我的交换磁盘可以写入 100 MB/s。当系统换出时,它仅写入 8-20 MB/s。
iostat
说该设备处于 100% 活动状态,因此我感觉 Linux 正在驱动器上查找或交换小块。
如果同时存在交换,我可以解释这一点,但没有交换,也没有其他磁盘 I/O。
我是否可以告诉 Linux 将其换成更大的连续块,例如,确定最旧的 10 MB 页面并将它们换成一个块?
有点像说swap的页框大小不是4K而是10M。
对于我的系统,我认为类似这样的算法是理想的:
dirty_pct = dirty pages / all RAM
if dirty_pct > 50%:
# Half of memory is dirty, slowly start swapping out
if busy_time(swapdevice) < dirty_pct:
# if RAM is 60% dirty, start swapping if disk is less than 60% busy
# if RAM is 90% dirty, start swapping if disk is less than 90% busy
identify the next 10 MB that would be swapped if dirty_pct had been 100%
save the 10 MB to swap as a single chunk
mark the pages as clean
这样,我的系统将在脏度达到 50% 时开始交换,并且不会影响性能,因为它会在闲置的驱动器上执行此操作。也许交换的数据永远不会被使用,然后我们就浪费了一些闲置的 IO。
$ uname -a
Linux r815 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
答案1
不是。这是不可能的。
Linux 内核通过不同的算法来决定何时以及如何使用交换内存分配,如 RAM、交换空间、上次使用的交换位置、磁盘缓存响应、交换性等。
系统不能只是等待“10MB> 页面收集”,因为内存管理是按需的,以避免系统冻结和进程终止。
然而,由于系统开始交换时的性能非常糟糕,多年来已经报告了一些与 RAM 和交换管理相关的错误。
我可以说,使用 zswap 可以改善磁盘使用情况,因为这里最大的问题是到达交换时页面的指数倍增(这是因为内存页面链接)。
zswap 压缩该乘法,减少磁盘读/写,并对 CPU 使用率产生显着影响。
zswap 是内核管理的,您有很多有用的低级配置来适应您的系统需求。
https://www.maketecheasier.com/use-zswap-improve-old-linux-performance/
答案2
好问题。这取决于您安装的文件系统的类型。我认为这与内核空间有关,但谷歌搜索我发现xfs文件系统您可以在用户空间级别调试它: