如何正确设置 zram 和交换

Mac*_*tka 9 linux swap zram virtual-memory

我正在配置和编译新的 3.0 内核。我计划使用一段时间(通过修补)并合并到 3.0 中的好东西之一是 zram。

是否可以同时设置 hdd 交换和 zram 交换,以便首先使用 zram 并且只将溢出的页面放入实际交换?

Mac*_*tka 8

swapon-p设置优先级的开关。我可以设置:

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
Run Code Online (Sandbox Code Playgroud)

或者在 /etc/fstab 中:

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0
Run Code Online (Sandbox Code Playgroud)

编辑:只是为了一个完整的解决方案 - 作为 udev 规则,这样的行可能会有所帮助:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Run Code Online (Sandbox Code Playgroud)


小智 8

旁注:由于每个 CPU 的锁定,重要的是拥有与 CPU 一样多的 zram 交换(modprobe zram_num_devices=n zram)而不是一个大的。RTFM!

  • 此旁注自内核版本 3.15 起已过时。您现在可以为单个大型 zram 使用多个压缩线程。 (3认同)
  • [需要引用]?我在 Linux 文档或 Google 中找不到推荐。 (2认同)

小智 6

由于某种原因,似乎对https://www.kernel.org/doc/Documentation/blockdev/zram.txt有很多误解

\n\n

它明确指出:

\n\n
\n

2) 设置压缩流的最大数量
\n 无论传递给此属性的值是多少,ZRAM 将始终\n 分配多个压缩流 - 每个在线 CPU 一个 - 从而允许多个并发压缩操作。当某些 CPU 脱机时,分配的压缩流数量会减少。不再有单压缩流模式,除非您正在运行 UP 系统或只有 1 个 CPU 在线。

\n\n

要了解当前有多少个流可用:

\n\n
cat /sys/block/zram0/max_comp_streams\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

但有一个普遍且持久的城市神话:最大流量为 1。

\n\n

这显然不是真的。

\n\n

zram 已证明这两个操作系统在 Chrome 操作系统和 Android 上非常有效,\n您可以在一个设备上使用。\n它们还进行了调整page-cluster

\n\n
\n

page-cluster控制单次尝试从交换 in\xc2\xa0 中读取连续页的页数。这是页面缓存预读的交换对应项。
\n 提到的连续性不是指虚拟/物理地址,而是交换空间 \xe2\x80\x93 上的连续性,这意味着它们被一起换出。

\n\n

它是一个对数值 \xe2\x80\x93 设置为零表示“1 页”,设置\n 为\xc2\xa01 表示“2 页”,设置为\xc2\xa02 表示“4 页”,等等.\n 零会完全禁用交换预读。

\n\n

默认值为三(一次八页)。如果您的工作负载是交换密集型的,则将此值调整为不同的值可能会带来一些小好处。

\n\n

较低的值意味着初始故障的延迟较低,但同时会出现额外的故障和后续故障的 I/O 延迟(如果它们是连续页面预读所带来的一部分)。

\n
\n\n

\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2 \x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80\x83\xe2\x80 \x94 来自内核文档/proc/sys/vm/*

\n\n

所以使用echo "0" > /proc/sys/vm/page-cluster强制单页。

\n\n

大部分内容似乎源自 debian/ubuntu 软件包的 zram_config,由于某种原因,该软件包似乎与 zram 的内核文档几乎没有相关性,并且产生了一系列本质上可能完全错误的中文谣言。

\n\n

通过文件交换,您是否为每个核心创建一个交换驱动器?也许这可能会回答您的问题。 \n还要支持 Google 的 Chrome 操作系统和 Android,它们成功地与上述页面集群一起使用,因为它与磁盘不匹配,因此可以改善单个设备的延迟。

\n\n

另外,对于系统管理员来说,实际内存使用量或虚拟机内存使用量有何重要意义?\n大多数示例显示通过 disk_size 创建并完全忽略 mem_limit。\ndisk_size=未压缩的虚拟机大小。\nmem_limit=实际内存占用空间限制。

\n\n

它使 disk_size 选择变得令人困惑,因为它的虚拟最大大小取决于 comp_alg 比率以及不使用时磁盘大小的 0.1% 的开销,并且实际上是节俭与 mem_limit *(大约 2 - 4)的猜测乐观。

\n\n

zram_config 甚至不检查以前的服务使用情况并进行覆盖,而对 zram sys 类进行简单检查(如下所示)即可。

\n\n
createZramSwaps () {\n        totalmem=$(free|awk \'/^Mem:/{print $2}\')\n        mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))\n\n        # Check Zram Class created\n        ZRAM_SYS_DIR=\'/sys/class/zram-control\'\n        if [ ! -d "${ZRAM_SYS_DIR}" ]; then\n                modprobe zram\n                RAM_DEV=\'0\'\n                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm\n                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize\n                mkswap /dev/zram${RAM_DEV}\n                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}\n        else\n                RAM_DEV=$(cat /sys/class/zram-control/hot_add)\n                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm\n                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize\n                mkswap /dev/zram${RAM_DEV}\n                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}\n        fi\n\n        if [ "$BIG_CORES" -gt 1 ];then\n                for i in $(seq $((BIG_CORES - 1))); do\n                        RAM_DEV=$(cat /sys/class/zram-control/hot_add)\n                        echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm\n                        echo ${mem} > /sys/block/zram${RAM_DEV}/disksize\n                        mkswap /dev/zram${RAM_DEV}\n                        swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}\n                done\n        fi\n}\n
Run Code Online (Sandbox Code Playgroud)\n