如何永久启用压缩RAM交换?使用什么版本?


11

编辑:确切地说,现在有zram-config。这是一项新贵的工作,最多可以压缩$(CPU核心数)个交换设备上的RAM的一半。它并非始终在启动时启动,而是可以发布sudo service zram-config start

/etc/initramfs-tools/initramfs.conf此处所述启用了compcache =“ 256 M” (我:P)。我相信,这会创建,/dev/ramzswap0但永远不会将其启用为交换。它仅在mkswap&& 之后起作用swapon

然后是创建的模块zram /dev/zram。还有吗 它的工作方式相同,但是/dev/ramzswap是从模块ramzswap创建的。

最终,我想在ram中进行压缩交换,并使用两者中的更好者,为此,我需要知道如何以一种非骇客的方式永久启用它。怎么做?

我清醒写ramzswap 这里,但事情已经在纳蒂改变。您仍然可以在initramfs.conf中启用ramzswap,但不会被激活。

PS:我扫描了/ lib和/ etc中的所有udev规则,但没有发现任何感兴趣的内容。

Answers:



2

我在同一个问题上挣扎。

今天,我找到了一篇很棒的博客文章。 http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

尽管“ sudo start zramswap”不起作用,但是当我重新启动PC时,它完美地解决了我的问题。

尝试一下。


实际上,这是我什至第一次注意到/ etc / init /。通常我在启动时使用/etc/init.d/来启动东西。令人着迷...
turbo

/etc/init/是Upstart初始化脚本所在的位置。中/etc/init.d的大部分只是兼容性包装器,它们在中调用它们/etc/init
瑞安·汤普森

1

这是便宜的解决方案。在/etc/rc.local之前,将以下行添加到exit 0

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done

for i in /dev/ramzswap*;do ...我认为更好的解决方案。在我的书里还是有点朴实。
Turbo

怎么find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... 样 它将消除换行符导致文件名奇怪的问题。
Cbhihe

@turbo:这里是老东西,但我相信从脚本的角度来看,Ryan的回答实际上比您在本年度评论中提出的答案更笼统和更安全。一般而言,yr for循环可能会对带有空格和/或特殊字符的文件名造成麻烦。据说您确实为系统节省了一个过程。
Cbhihe

1

直接来自Debian Wiki。对我来说,这是最简单的。

首先,将此代码复制并粘贴到/etc/init.d/zram中

### BEGIN INIT INFO
# Provides:          zram
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:      0 1 6
# Short-Description: Use compressed RAM as in-memory swap
# Description:       Use compressed RAM as in-memory swap
### END INIT INFO

# Author: Antonio Galea <antonio.galea@gmail.com>
# Thanks to Przemysław Tomczyk for suggesting swapoff parallelization

FRACTION=75

MEMORY=`perl -ne'/^MemTotal:\s+(\d+)/ && print $1*1024;' < /proc/meminfo`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$(( MEMORY * FRACTION / 100 / CPUS ))

case "$1" in
  "start")
    param=`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '`
    modprobe zram $param=$CPUS
    for n in `seq $CPUS`; do
      i=$((n - 1))
      echo $SIZE > /sys/block/zram$i/disksize
      mkswap /dev/zram$i
      swapon /dev/zram$i -p 10
    done
    ;;
  "stop")
    for n in `seq $CPUS`; do
      i=$((n - 1))
      swapoff /dev/zram$i && echo "disabled disk $n of $CPUS" &
    done
    wait
    sleep .5
    modprobe -r zram
    ;;
  *)
    echo "Usage: `basename $0` (start | stop)"
    exit 1
    ;;
esac

接下来,执行以下两个命令:

sudo chmod +x /etc/init.d/zram
sudo /etc/init.d/zram start

最后,在启动时添加zram:

sudo update-rc.d zram defaults

做完了

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.