我的电脑出了问题,导致 GUI 几乎无法使用,非常草率,直到死掉。
我在分析中得出结论,这是由缓存/缓冲区强制进行过多交换引起的。有什么办法可以微调这些设置吗?
用例:只需从任何硬盘驱动器(不是 SSD)读取或写入大量数据。假设使用dd
或f3read
/ 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 上。根据atop
SSD 的数据,繁忙程度在 20% 到 50% 之间,主要来自于交换。
我已经尝试将/proc/sys/vm/swappiness
60 设置为 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