如何永久启用压缩内存交换?使用哪个版本?

如何永久启用压缩内存交换?使用哪个版本?

编辑:确切地说,现在有zram-config。这是一项新任务,可压缩多达一半的内存,分布在 $(CPU 核心数) 个交换设备上。它并非总是在启动时启动,但发布有效sudo service zram-config start

/etc/initramfs-tools/initramfs.conf我按照说明启用了 compcache="256 M"这里(我写的 :P)。我相信,这可以创建,/dev/ramzswap0但永远不会启用为交换。它仅在mkswap&&之后起作用swapon

然后是创建模块 zram /dev/zram。它是别的吗?它的工作方式相同,但是/dev/ramzswap是由模块 ramzswap 创建的。

最终,我想在内存中有一个压缩交换,并使用两者中更好的一个,为此,我需要知道如何以非黑客的方式永久启用它。如何做到这一点?

我在 Lucid 中写了关于 ramzswap 的文章这里但 Natty 的情况已经改变。您仍然可以在 initramfs.conf 中启用 ramzswap,但它不会被激活。

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

答案1

现在有一个 PPA 可以安装适当的 Upstart 脚本,以便在启动时启用 zram。它会为您的系统选择正确的压缩交换设备大小和数量。

https://launchpad.net/~shnatsel/+archive/zram

答案2

我也遇到了同样的问题。

今天我发现了一篇关于此的精彩博客文章。 http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

虽然“sudo start zramswap”不起作用,但当我重新启动电脑时,它完美地解决了我的问题。

尝试一下。

答案3

直接来自 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 <[email protected]>
# 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

完毕。

答案4

/etc/rc.local这是廉价的解决方案。在 之前添加以下行exit 0

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

相关内容