随着操作系统的不断更新和迭代,也反向推动了用户对计算机硬件的不断升级。例如,从 Windows XP 之后的 Windows Vista 系统开始,不配置个 4GB 内存,就很难运行顺畅。但作为 Linux 用户,很多用户则喜欢使用老旧的计算机或者笔记本来运行,而许多 Linux 发行版本在小内存计算机上也可以运行流畅。
但随着 Linux 系统的不断更新,浏览器应用反而成了吃内存大户。例如采用 LXDE 桌面环境的 Linux 系统在启动后只需占用约 150MB 的内存,但在 Chromium、Chrome 或 Firefox 中多打开几个标签时,内存就会迅速消耗几百 MB 甚至数 GB。当内存占用光后,机械硬盘转动就会越加频繁,Linux 系统中的音乐播放甚至会出现卡顿,应用程序切换也会有严重的延迟, 有可能连移动鼠标都会有延迟,而这一切都是受「磁盘抖动」的影响而造成的结果。
什么是磁盘抖动
首先需要了解什么是 SWAP 交换分区。在 Linux 系统中,当空闲内存消耗光时,操作系统长时间不访问的应用程序数据会被移动到 SWAP 交换区域,而 SWAP 交换分区通常存储在物理硬盘上。通过这样的机制,Linux 系统就可以释放出一些物理内存空间提供给需要的应用程序。
这样一来,用户在过去一断时间未访问的浏览器标签页就可能会被挪动到 SWAP 交换分区(即物理硬盘)当中,只有当用户切换回该标签时,Linux 才会将其从 SWAP 交换回物理内存当中。
当 SWAP 和物理内存之间的数据交换量较少时,此机制非常有效。但如果你的 Linux PC 只有 2GB 内存,打开的(所有)应用程序需要 4GB 内存时,Linux 就会在物理内存和 SWAP 之间不断交换数据。而物理硬盘的速度相较物理内存来说,速度是极其慢的,在这种情况下,存储设备基本上都无法满足更快的交换请求。也就是说,当「磁盘抖动」发生时,Linux 中的所有操作都会变得非常迟缓和卡顿。
SSD非常适合SWAP分区
此前网上曾有一句名言,大意是「永远不要在 SSD 磁盘上分配 SWAP 分区,它会干掉你的存储设备。」这句话在几年前算是「至理」,而现在却有所不同了。
实际上,在 SSD 磁盘上设置 SWAP 交换分区会有非常好的效果。如果你的计算机上配置有良好随机读/写性能(至少300MB)的 SSD 设备,你可以在其上配置 SWAP 分区,并直接忽略掉后文了。
如何显着减少Linux上的磁盘抖动
存储在 RAM 中的大多数数据其实都是可以压缩的,这意味着如果我们将 200MB的数据存储在内存中并对其进行压缩,甚至可以将大小减小到 100MB。这意味着,数据交换时 Linux 只须将更少的数据量写入到磁盘当中。
我们介绍的 Zswap 工具比较复杂,它能够智能地仅向磁盘发送无法压缩的位和片段,而将其余部分保存在内存的「保留部分」中。如果你想了解其内部的详细工作原理,可以参考 Linux Kernel 网站上有关 zswap 的页面。
如何在基于Debian的发行版中启用Zswap
1 打开「终端」——使用 vi 或 sudoedit 编辑 Grub 引导加载程序:
vi /etc/default/grub
2 在 GRUB_CMDLINE_LINUX_DEFAULT 行的引号内容中追加 zswap.enabled=1
3 编辑完成后,执行 sudo update-grub 命令以生新的 Grub 配置文件。
4.重启系统后 zswap 模块将自动启用。
如何在基于Fedora和OpenSUSE的发行版中启用Zswap
1 打开「终端」——使用 vi 或 sudoedit 编辑 Grub 引导加载程序:
sudoedit /etc/default/grub
2 在 GRUB_CMDLINE_LINUX 行的引号内容中追加 zswap.enabled=1
3 根据您的计算机是从 BIOS 还是 UEFI 系统引导,Grub 配置文件是在不同的路径中生成的。 要查找当前所在的位置,请执行以下命令:
sudo find /boot/ -name grub.cfg
4 根据上一条命令的输出来执行以下命令:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
5 重启计算机后,执行以下命令来验证 zswap 是否处于激活状态:
cat /sys/module/zswap/parameters/enabled
如果输出为 Y,则模块正常工作。
Arch Linux如何启用Zswap
1 在「终端」中执行以下命令安装 systemd-swap 包:
sudo pacman -Sy systemd-swap
2 执行以下命令启动 systemd-swap 并让其随时系统启动:
sudo systemctl start systemd-swap sudo systemctl enable systemd-swap
3 执行以下命令验证 zswap 模块是否已启用:
cat /sys/module/zswap/parameters/enabled
如果输出为 Y,则模块正常工作。