桌面 I/O 操作完全冻结

桌面 I/O 操作完全冻结

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的。

相关内容