磁盘 I/O 饱和时系统锁定

磁盘 I/O 饱和时系统锁定

当我通过 Nautilus 或终端将大型文件从外部 USB3 硬盘传输到内部硬盘(或反之亦然)时,Ubuntu (Unity) 几乎会完全锁定。在文件传输过程中,alt-tab 等操作需要 20 秒或更长时间才能完成。当对磁盘进行大量随机读取/写入时(例如安装软件包时),情况并非如此。

当我运行 Windows 时,我可以在后台运行文件传输,并且仍然可以执行操作,尽管当某些操作需要访问磁盘时速度会变慢。我仍然可以正常使用 alt-tab。

Ubuntu 似乎将文件传输的优先级置于所有其他磁盘 I/O 之上,这就是它锁定的原因。在 Windows 中,文件传输的优先级似乎较低,这意味着系统在磁盘饱和时仍能保持响应。

我该如何修复这个问题?这很烦人,因为复制文件时计算机完全无法使用。这个问题在 14.04 和 15.10 中都存在。我不得不将硬盘插入 USB2 端口以防止出现此问题,但这会导致传输时间更长。

答案1

我的笔记本电脑也遇到了同样的问题,与计算机的其余部分相比,它的磁盘系统速度相当慢。

通过更改用于磁盘传输的调度算法,我能够使情况变得更好。默认情况下,Ubuntu 使用 Deadline,但我发现使用 cfq 时系统响应速度更快。

要查看您正在使用的调度程序,请发出命令

cat /sys/class/block/sda/queue/scheduler    

要进行一次性更改(直到重新启动),请发出命令

echo cfq | sudo tee /sys/class/block/sda/queue/scheduler

请注意,更改外部硬盘驱动器的内容非常重要;我的通常加载为 sdb。所以我会发出命令echo cfq | sudo tee /sys/class/block/sdb/queue/scheduler

我通过在 grub 文件中添加内核参数,使更改对连接到我的计算机的所有驱动器永久生效,elevator=cfq如下所示:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noautogroup elevator=cfq"

相关内容