如何微调 Linux 缓存/交换比率?

如何微调 Linux 缓存/交换比率?

我的电脑出了问题,导致 GUI 几乎无法使用,非常草率,直到死掉。

我在分析中得出结论,这是由缓存/缓冲区强制进行过多交换引起的。有什么办法可以微调这些设置吗?

用例:只需从任何硬盘驱动器(不是 SSD)读取或写入大量数据。假设使用ddf3read/ f3write。大约一分钟后,缓存或缓冲区变得如此之大,以至于 Linux 开始大量交换。

在此atop代码片段中,您可以在 PAG 行中看到这一点。

MEM |  tot    15.5G |  free    3.5G  | cache   7.8G  |  buff   96.1M |  slab  394.5M |  vmbal   0.0M  | hptot   0.0M  |
SWP |  tot     1.0G |  free  634.7M  |               |               |               |  vmcom   8.5G  | vmlim   8.8G  |
PAG |  scan  156637 |  steal 156616  | stall      0  |               |               |  swin       0  | swout  11814  |
PSI |  cs     0/0/2 |  ms     5/2/2  | mf     5/2/1  |  is  50/24/15 |  if  50/24/15 |                |               |
DSK |           sdb |  busy     56%  | read      61  |  write   1312 |  MBr/s    0.0 |  MBw/s  147.8  | avio 3.95 ms  |
DSK |           sda |  busy     24%  | read     100  |  write  11803 |  MBr/s    0.2 |  MBw/s    4.6  | avio 0.20 ms  |

我不完全理解这些字段的含义。但我在笔记本电脑上尝试了同样的操作。一切都很相似,除了SWOUT统计数据要低得多并且系统不会受到影响。

两台计算机上的 Ubuntu 19.10 内核 5.3.0-19-generic。交换位于 SSD 上。根据atopSSD 的数据,繁忙程度在 20% 到 50% 之间,主要来自于交换。

我已经尝试将/proc/sys/vm/swappiness60 设置为 10,但没有帮助。我vfs_cache_pressure从 100 设置到 50,但这也没有帮助。

难道原因在别的地方吗?我确实遇到了 SATA 问题,现在应该已经解决了。我曾经有过GPU HANG一次(在英特尔上),我相信这是由交换问题引起的......

当我开始看到这个问题时(在我进行彻底分析之前),我添加了交换(之前没有),因为kswapd总是发疯。添加 swap 至少可以防止 kswapd 占用 100% 的 cpu。

任何想法?

答案1

我找到了一个解决方法:使用内核 4

在 Ubuntu 19.10 Eoan 中,这意味着安装内核 linux-image-4.15.0-1050-oem,这是存储库中唯一可用的 4.x 内核。我尝试了 19.4 或更旧的内核,它们在 Ubuntu 19.10 中不起作用

我将尝试找出真正的原因,如果找到,我将在此发布解决方案。

在那之前,我认为这可能是一个可能的方向: https://bugs.freedesktop.org/show_bug.cgi?id=111790

相关内容