zram vs zswap vs zcache终极指南:何时使用哪一个


55
  1. 他们到底是什么?它们有什么不同(我在下面的答案中写了我的理解)
  2. 在Zswap系统中,将页面从zswap驱逐到实际交换时,页面是否存储在压缩自?(或者在存储之前已经解压缩了吗?,AFAICT它仍然被压缩但是我不确定)
  3. zcache的当前状态是什么?它显然已被删除或3.11中的某些内容。这是什么意思?(http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7

2
答案2.提交消息清楚地表明补丁(与zcache有关)已从3.11中删除,但将包含在主-mm树中。
askb 2014年

1
@staticd为什么您不接受自己的答案?这很棒!
莱奥波德·赫兹(LéoLéopoldHertz)2016年

当页面从zswap(压缩交换缓存)中逐出时,将被_ decompressed_放置在后备交换设备中,具体方法如下:[ lwn.net/Articles/537422/]
Cbhihe

lwn.net/Articles/537422- “在恢复写回期间,zswap将页面解压缩...”)。下面的@mmin表示这可能对服务器造成低效甚至是可利用的危险!
mwfearnley

Answers:


2

关于2.,zswap似乎确实在回写时解压缩了页面,从而确认了@Cbhihe的注释。

mm / zswap.c,第828行:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

因此,zswap在压缩的内存内高速缓存在写回磁盘之前可能会很快被遗忘的情况下非常有用。不适用于具有大而长寿命的堆的应用程序,这些应用程序最终将需要实际的交换设备来支持。


7
我发现zswap有潜在的危险行为。当应用程序分配许多页面并向其写入压缩得很好的数据(例如零序列)时,zswap会将它们愉快地存储在内核slab内存中。但是,当某些事情触发实际的磁盘交换时,存储的数据突然“突发”-页面上的许多零仅占用了“ GB”的内存,现在解压缩到磁盘上的数百GB。
mnish

2
攻击者可能试图在服务器上存储低熵数据。当某些东西触发交换时,服务器将死机。
mnish

1
您在上游报告了此消息吗?
肯·夏普

写入未压缩数据的另一个缺点
Mihail Malostanidis

当然,在空间和时间上以解压缩的形式转储数据会更好!这听起来像是我们真正想要做的事情。我只能假定对交换区域进行重组以允许它要么涉及重写许多现有代码,要么需要更复杂的分配系统。
mwfearnley

75

关于这三个系统,有很多东西,但是没有一个可以对它们进行简单的比较,更不用说对它们进行很好的解释了。我试着弄明白了,但是我的头突然爆炸了。然后我以为我知道了,于是我试着写下来,然后脑袋又爆炸了。(请参阅实现摘要)我认为将其发布在这里会很有用,因为有很多stackexchange问​​题询问它们之间的成对比较。

何时使用摘要:

  1. ZRAM(如果HDD / SSD上没有交换设备)。
  2. ZSWAP(如果您在HDD / SSD上确实有交换设备)。
  3. ZCACHE:它执行ZSWAP的工作,并且还压缩并加速文件系统页面缓存。(它在内部要复杂得多,并且不在主线内核中,因为它仍在开发中)。

其执行摘要:

  1. ZRAM是基于压缩RAM的交换设备
  2. 如果您已经有交换,则ZSWAP是压缩的缓存
  3. ZCache是一种特殊类型的虚拟RAM后端(超速内存)的后端,可用于缓存文件系统页面或交换数据。

细节:

  • ZRAM: 在RAM中制作交换设备。此处发送的页面在存储时会被压缩。它具有比其他交换设备更高的优先级:换出的页面会优先发送到zram设备,直到页面已满,然后再使用其他任何交换设备。

    • 好处:独立于其他(物理)交换设备。当没有交换分区扩展可用内存时,可以使用它。
    • 缺点:如果存在其他交换设备(HDD / SSD),则无法最佳使用它们。由于zram设备是一个独立的交换设备,因此一旦装满,任何需要交换的新页面都将直接发送到下一个交换设备,因此:
      1. LRU(最近最少使用)反转的可能性很大:它将是最近交换的数据进入慢速磁盘,而很久以前交换出去的不活动页面将保留在快速ZRAM中
      2. 发送到磁盘和从磁盘读取的数据将被压缩,因此会占用大量带宽。
    • 状态:合并到主线内核3.14中。在系统上启用后,需要一些用户空间配置来设置交换设备并使用它们。
  • ZSWAP:frontswap系统钩子试图换出的页面,并使用zswap作为回写缓存的HDD / SSD交换设备:试图压缩页面,如果它不好包含可压缩数据是直接写入到磁盘中。如果数据被压缩,则将其存储在zswap内存池中。如果在RAM中的总压缩页面超过特定大小时将页面交换出内存,则会将最近使用最少的(LRU)压缩页面写入磁盘,因为不太可能很快需要它。

    • 好处:非常高效地使用RAM和基于磁盘的交换。通过减少所需的写入和读取次数(数据已压缩并保存在RAM中)以及由于数据处于压缩形式而减少了这些I / O操作的带宽,从而使磁盘I / O最小化。
    • 限制:它是基于磁盘的交换系统的增强,因此取决于硬盘上的交换分区。
    • 状态:合并到3.11主线linux内核中。
  • ZCache:它是Transcendent内存系统的后端。超越内存提供类似于RAM的内存,只能使用putget调用一次访问一个页面。这不同于可以一次访问一个字节的普通内存。在frontswapcleancache系统挂钩的企图交换,并分别回收文件系统的页缓存,并将它们发送到超越的内存后端。当zcache用作后端时,数据将被压缩并存储在RAM中。当它填满时,压缩的页面被逐出交换区。(备用后端是RAMster,它跨网络计算机共享一个RAM池)。仅将frontswap前端与zcache后端一起使用就像zswap。(实际上,zswap是zcache的简化子集)

    • 优点提供交换和文件系统缓存的压缩缓存。
    • 状态:仍未上线,因为它非常复杂且正在开发中。

我发现的最佳资源是:



6
使用zram和zswap是否可能和/或合理?
菲利亚2015年

2
三种需求/不应同时运行。zswap需要基于磁盘的交换作为后端,而ZRAM不需要专用的交换分区。但是,如果您具有交换功能,则ZRAM +交换分区的有效性要远低于zswap + swap分区。
2013年

您能在这里总结一下如何激活zswap。下面详细介绍askubuntu.com/a/361321/25388
莱奥列奥波尔德·赫兹준 영


1
每个回答zram都是“ a” swap是完全错误的。zram不是swap。该swap只可以存储在zram。但这是许多可能的用例之一!这是一个示例:“某些用例包括/ tmp存储,用作交换磁盘,/ var下的各种缓存,也许还有更多:)” kernel.org/doc/Documentation/blockdev/zram.txt例如,我将其用于我像其他普通块设备一样格式化和挂载的临时存储。
维克多·亚雷玛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.