连接 SSD 驱动器后 IOWait 非常高

连接 SSD 驱动器后 IOWait 非常高

我的工作站出现了严重问题。前段时间我买了一个 SSD 磁盘。到目前为止一切都还好,我有两个 HDD 磁盘,复制文件的速度大约为每秒 50-60 兆字节,没有延迟或性能问题。在我连接 SSD 驱动器并重新安装系统后,对任何磁盘的任何操作都非常痛苦。无论我从任何磁盘读取数据还是在其上写入内容,IOWait 时间都会达到 100% CPU,整个机器冻结并且数据传输非常低。无论我执行什么操作,无论是否涉及 SSD,都会出现问题。即使将文件从一个 USB 驱动器复制到另一个也会导致严重的延迟。在我插入 SSD 之前,这个问题并不存在。SWAP 分区位于 SSD 驱动器上。

系统规格:

CPU: AMD Phenom II 965 BE [email protected]
RAM: 12GB 1600MHz DDR3 (2x2 and 1x8) 
HDD: 500GB WD Green for storage and old 300GB Samsung for trash data
SSD: 120GB Samsung 840 EVO
SYSTEM: elementaryOS Luna @ Ubuntu 12.04

Linux Leader 3.11.0-18-generic #32~precise1-Ubuntu SMP Thu Feb 20 17:52:10 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

/etc/fstab

UUID=9a3aeee3-da3c-494c-81a3-0fb9a2d0b0cb  / ext4 discard,noatime,nodiratime,errors=remount-ro  0 1
UUID=64c8d0c7-a70d-4a8a-803b-472bf0f368fe  /home ext4  discard,noatime,nodiratime  0 2
UUID=324b9dc2-e63d-4ffe-b77c-877470ab4492  /media/Storage  ext4  noatime,nodiratime  0 0
UUID=80d15662-997b-43b0-a36e-7b63c78e6ea3  none swap  discard,sw 0 0

/media/Storage/Wideo     /home/galmido/Wideo     none  bind  0  0
/media/Storage/Obrazy    /home/galmido/Obrazy    none  bind  0  0
/media/Storage/Muzyka    /home/galmido/Muzyka    none  bind  0  0
/media/Storage/Zdjęcia   /home/galmido/Zdjęcia   none  bind  0  0
/media/Storage/Pobrane   /home/galmido/Pobrane   none  bind  0  0

此截图是在将文件从一块硬盘(500GB WD,ext4)复制到另一块硬盘(300GB Samsung,ext2)时拍摄的。我勉强做到了。复制结束时,传输速度下降到每秒约 10 千字节,整个机器冻结了约 10 分钟。

--

编辑:

我刚想起来几个月前系统更新后这个问题明显增多。我没太注意更新了哪些软件包,但系统监视器显示 SWAP 分区上的可用空间从 10GB 增加到了 16GB,然后这个问题就变得严重了。我尝试将内核版本回滚到旧版本,但没有成功。

答案1

1) 这与 fstab 无关,但请删除 nodiratime。noatime 也包含 nodiratime,因此无需再次添加。
还请尝试将 ,commit=15 作为选项添加到您的 ssd 分区。这基本上告诉它们每 15 秒批量发送 io 请求,从而大大加快速度。请记住,如果突然断电,您将might丢失最后 15 秒未提交的磁盘写入

2) 使用 iotop 或 Glances 查看导致持续 I/O 的原因。这些工具会显示当前占用驱动器的进程。

3) 使用 powertop 并检查可调参数选项卡。特别检查您的 ssd sata 控制器的省电选项是否已启用。如果已启用,请尝试禁用它们,看看是否有任何变化。如果您有笔记本电脑并使用 laptop-mode-tools 或类似的电源管理程序,它们可能已启用类似的选项,从而导致所有这些延迟。

4) 如果您仍然找不到问题的根源,请检查 /etc/udev/rules.d(如果您使用 udev)并尝试查看那里存在哪些规则。它可能会在某些设备插入时更改其设置并导致所有这些问题。

5)尝试将这些设置添加到您的 sysctl.conf,然后加载它们,看看它们是否有什么不同。

vm.swappiness=1     
vm.vfs_cache_pressure=45
vm.dirty_background_ratio = 10
vm.dirty_ratio = 10
vm.dirty_writeback_centisecs = 1500    
kernel.nmi_watchdog = 0  

并且还要检查 /var/log 中的 errors.log、daemon.log 和 kernel.log 以查找可能的错误,这些错误可能会向您显示错误所在。

答案2

您的 /proc/sys/vm/swappiness 文件中的值是什么?

你能尝试关闭交换空间吗?通过发出

swapoff -a

IO恢复正常了吗?

相关内容