如何正确设置zram和交换


9

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

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

Answers:


8

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


1
[需要引用]?我在Linux文档或Google中找不到推荐。
Maciej Piechotka

默认情况下max_comp_streams似乎是1根据文档进行的。我没有检查该参数是否存在于2011年,但它似乎是一个比多个交换文件更好的选择。
Maciej Piechotka,2015年

1
zram-config在Ubuntu(可能还有debian)下使用该软件包进行测试,我注意到配置默认为每个核心或线程1(旧E2140双核为2,i3-3220为4)
Elder Geek

有趣的是,通过阅读/etc/init/zram-config.conf
Aquarius Power

1
从内核版本3.15开始,此边注已过时。现在,您可以为单个大型zram具有多个压缩线程。
珀金斯

6

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

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap

或在/ etc / fstab中:

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0

编辑:只是一个完整的解决方案-这样的行可能对udev规则有用:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"

1

通过传递选择您想要多少个zram设备

zram.num_devices=4

到内核​​参数或直接到模块(不带zram)。默认值为1。zram将能够使用与您创建的设备数量一样多的cpus。

准备zram0设备,将大小设置为1GB。

echo 1000000000 > /sys/block/zram0/disksize

另外,您也可以按照udev规则进行操作。在zram0上创建交换

mkswap /dev/zram0

并使其具有比其他交换设备更高的优先级

swapon -p 32767 /dev/zram0

您要在此处编写什么内核版本和发行版?
Cbhihe

作为记录,在14.04.5桌面Ubuntu上按照您的建议进行操作失败。特别是,当我尝试在2核Intel T9300处理器盒上设置的优先级zram0并将zram1其值设置为10时,它给我带来了:swapon: /dev/zram0 or 1: swapon failed: Device or resource busy
Cbhihe

1

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

它明确指出:

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

要找出当前有多少个流,请执行以下操作:

cat /sys/block/zram0/max_comp_streams

但是,有一个普遍存在的城市神话,即最大流量为1。

这显然是不正确的。

zram被证明是有效的两个操作系统,Chrome OS和Android仅是一台设备。他们还调整page-cluster

page-cluster控制一次尝试从交换读取连续页面的页数。这是预读页面高速缓存的交换对象。
提到的连续性不是在虚拟/物理地址方面,而是在交换空间上连续–这意味着它们被一起交换了出去。

它是对数值-将其设置为零表示“ 1页”,将其设置为1表示“ 2页”,将其设置为2表示“ 4页”,依此类推。零完全禁用交换预读。

默认值为三(一次八页)。如果您的工作量需要大量交换,则将此值调整为其他值可能会有一些小的好处。

较低的值表示初始故障的等待时间较短,但同时,如果这些故障将成为预读的连续页面的一部分,则额外的故障和后续故障的I / O延迟。

                —从内核文档中获得/proc/sys/vm/*

因此用于echo "0" > /proc/sys/vm/page-cluster强制单页。

debian / ubuntu软件包似乎很多源于zram_config,由于某种原因,它似乎与zram的内核文档没有什么关联,并且孕育了一系列中国窃窃私语,实质上这可能是完全错误的。

使用文件交换,您是否为每个核心创建交换驱动器?也许可以回答您的问题。同时,为了支持此功能,谷歌的Chrome OS和Android也成功地与上述页面群集配合使用,因为它与磁盘不匹配,因此可以改善单个设备的延迟。

同样对于系统管理员来说,实际的内存使用或虚拟机内存使用有什么重要的意义?大多数示例显示通过disk_size创建,而完全忽略mem_limit。disk_size =未压缩的虚拟机大小。mem_limit =实际的内存占用限制。

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

zram_config甚至不检查以前的服务使用情况并覆盖它,而对zram sys类的简单检查将如下所示。

createZramSwaps () {
        totalmem=$(free|awk '/^Mem:/{print $2}')
        mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))

        # Check Zram Class created
        ZRAM_SYS_DIR='/sys/class/zram-control'
        if [ ! -d "${ZRAM_SYS_DIR}" ]; then
                modprobe zram
                RAM_DEV='0'
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        else
                RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        fi

        if [ "$BIG_CORES" -gt 1 ];then
                for i in $(seq $((BIG_CORES - 1))); do
                        RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                        echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                        echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                        mkswap /dev/zram${RAM_DEV}
                        swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
                done
        fi
}

0

启用zram时,它将自动具有优先级。

对于Ubuntu 16.04: /usr/bin/init-zram-swapping

您可以编辑该文件(第一个备份),以降低使用的实际内存,我将内存行更改为:

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
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.