Mac*_*tka 9 linux swap zram virtual-memory
我正在配置和编译新的 3.0 内核。我计划使用一段时间(通过修补)并合并到 3.0 中的好东西之一是 zram。
是否可以同时设置 hdd 交换和 zram 交换,以便首先使用 zram 并且只将溢出的页面放入实际交换?
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!
小智 6
由于某种原因,似乎对https://www.kernel.org/doc/Documentation/blockdev/zram.txt有很多误解
\n\n它明确指出:
\n\n\n\n\n2) 设置压缩流的最大数量
\n\n
\n 无论传递给此属性的值是多少,ZRAM 将始终\n 分配多个压缩流 - 每个在线 CPU 一个 - 从而允许多个并发压缩操作。当某些 CPU 脱机时,分配的压缩流数量会减少。不再有单压缩流模式,除非您正在运行 UP 系统或只有 1 个 CPU 在线。要了解当前有多少个流可用:
\n\nRun Code Online (Sandbox Code Playgroud)\ncat /sys/block/zram0/max_comp_streams\n
但有一个普遍且持久的城市神话:最大流量为 1。
\n\n这显然不是真的。
\n\nzram 已证明这两个操作系统在 Chrome 操作系统和 Android 上非常有效,\n您可以在一个设备上使用。\n它们还进行了调整page-cluster:
\n\n\n\n\n
page-cluster控制单次尝试从交换 in\xc2\xa0 中读取连续页的页数。这是页面缓存预读的交换对应项。
\n 提到的连续性不是指虚拟/物理地址,而是交换空间 \xe2\x80\x93 上的连续性,这意味着它们被一起换出。它是一个对数值 \xe2\x80\x93 设置为零表示“1 页”,设置\n 为\xc2\xa01 表示“2 页”,设置为\xc2\xa02 表示“4 页”,等等.\n 零会完全禁用交换预读。
\n\n默认值为三(一次八页)。如果您的工作负载是交换密集型的,则将此值调整为不同的值可能会带来一些小好处。
\n\n较低的值意味着初始故障的延迟较低,但同时会出现额外的故障和后续故障的 I/O 延迟(如果它们是连续页面预读所带来的一部分)。
\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/*
所以使用echo "0" > /proc/sys/vm/page-cluster强制单页。
大部分内容似乎源自 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\nzram_config 甚至不检查以前的服务使用情况并进行覆盖,而对 zram sys 类进行简单检查(如下所示)即可。
\n\ncreateZramSwaps () {\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}\nRun Code Online (Sandbox Code Playgroud)\n