我正在配置和编译新的3.0内核。我计划一段时间(通过打补丁)合并到3.0中的好东西是zram。
是否可以同时设置hdd swap和zram swap,以便首先使用zram,仅将溢出的页面放入实际交换中?
我正在配置和编译新的3.0内核。我计划一段时间(通过打补丁)合并到3.0中的好东西是zram。
是否可以同时设置hdd swap和zram swap,以便首先使用zram,仅将溢出的页面放入实际交换中?
Answers:
旁注:由于每CPU锁定,重要的是拥有与CPU一样多的zram交换(modprobe zram_num_devices = n zram),而不是一个大的交换。RTFM!
zram-config
在Ubuntu(可能还有debian)下使用该软件包进行测试,我注意到配置默认为每个核心或线程1(旧E2140双核为2,i3-3220为4)
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"
通过传递选择您想要多少个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
zram0
并将zram1
其值设置为10时,它给我带来了:swapon: /dev/zram0 or 1: swapon failed: Device or resource busy
。
由于某些原因,似乎对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延迟。
因此用于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
}