我有一个大型系统 - 128GB,几个 RAID0 文件系统(6TB 和 2TB),带有 SSD 缓存,8 个内核(16 个带超线程),运行 Ubuntu 12.04 64 位。当我尝试写入大型文件时,性能非常差,iotop 显示 iowait 中等待的进程超过 99%:
dd if=/dev/zero of=lezz bs=1024 count=$((1024*50))
51200+0 records in
51200+0 records out
52428800 bytes (52 MB) copied, 3.74852 s, 14.0 MB/s
来自 iotop:
Total DISK READ: 185.92 K/s | Total DISK WRITE: 84.06 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
24481 be/4 arris292 0.00 B/s 0.00 B/s 0.00 % 99.99 % dd if=/dev/zero of=lezz bs=1024 count=512000
22668 be/4 root 0.00 B/s 0.00 B/s 0.00 % 99.99 % [flush-252:0]
21532 be/4 root 0.00 B/s 0.00 B/s 0.00 % 99.99 % [kworker/1:2]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
8196 be/4 arris292 0.00 B/s 0.00 B/s 0.00 % 0.00 % sshd: arris292@pts/22
5 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u:0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
在非常相似的系统上(相同内存、相同模型、相似的文件系统),我获得了预期的性能,并且没有进程等待 99% 的时间进行 IO....
dd if=/dev/zero of=lezz bs=1024 count=$((1024*50))
51200+0 records in
51200+0 records out
52428800 bytes (52 MB) copied, 0.111191 s, 472 MB/s
我以前就见过这种情况,但我从未真正能够找到问题的根源,随着时间的推移,越来越多的工程师开始使用这个系统进行构建,整体性能就会下降到很慢。
那么是什么原因导致了如此高的 IO 等待时间?我该如何进一步排除故障?这可能是 SSD 或磁盘问题吗?如果是,我可以使用哪些工具进行诊断?