apt-get dist-upgrade
在我的旧系统中,我在执行一些繁重的 I/O 操作(例如复制 4 GB 视频文件)时已经出现桌面冻结的情况。但现在,情况变得更糟了:任何操作apt-get install
都足以冻结整个桌面,并且复制视频根本nice -c 3
没有帮助,我有几分钟无法进行任何操作。根据man ionice
,空闲 I/O 进程对正常系统活动的影响应该为零。
还出现了一个奇怪的交换问题:我禁用了交换分区,并且两次触发了 OOM。但是,尽管我已经运行并检查了它是否有效,vm.oom_kill_allocating_task=1
但磁盘并没有杀死触发 OOM 的进程(我设置的),而是开始旋转并完全冻结桌面很长一段时间。sudo swapoff -a
旧的硬件和系统:
- 硬盘:500 GB 东芝
- 系统:Debian 7.9(32位)
- 内核:3.15.10-zen-686(Liquorix)
- 磁盘调度程序:BFQ
- 文件系统:ext4
新的硬件和系统:
- 硬盘:1TB三星
- 系统:Ubuntu 15.10(64位)
- 内核:4.2.0-30-generic
- 磁盘调度程序:截止日期(默认)
- 文件系统:使用 Btrfs 加密的 LVM
我发现很多人通过从 CFQ 调度程序更改为 Deadline 来解决类似的问题,但 Deadline 是 Ubuntu 内核上的默认值。我已经在使用所谓的快速 BFQ 磁盘调度程序(没有加密)时遇到了问题。
答案1
显然,最大的问题是交换问题。在我的旧系统中,设置vm.swappiness=100
帮助我在内存耗尽之前移动页面来避免系统冻结。在这个新系统上,它似乎产生了相反的效果:系统总是不断地进行不必要的交换。我购买了更多的内存并完全禁用了交换,问题已基本解决。
关于I/O操作导致桌面冻结的事实,似乎是因为操作的数据被缓存在RAM上,而桌面应用程序使用的内存被扔到交换区中,导致系统从磁盘读回每当我尝试与桌面交互时。
有了足够的 RAM,I/O 操作对桌面响应能力几乎没有影响,但如果桌面一段时间无人看管,与桌面交互时可能会出现初始延迟。这可能是由于内核认为系统足够空闲,可以为操作提供更高的优先级,并且其数据可能最终完全填满缓存,从而从桌面应用程序中删除页面。
关于磁盘调度程序,我还没有做足够的测试来知道哪个是最好的选择,但从我的研究来看,似乎要么完全忽略deadline ionice
,要么这ionice
是特定于CFQ的。