Disks: 10xSSD Ultrastar SS200 960GB 12GB/s Raid 0, 6, 10.
Controller: LSI Syncro 9380-8e
Filesystem: ext4 without LVM
System: Centos 7
2x E5620 @ 2.40GHz
32GB RAM
fio-2.1.10: --iodepth=32 --ioengine=libaio --rw=randrw --bs=4k --size 10000M -numjobs=10
测试开始时,我在 raid 0 中有大约 60k IOPS,2-3 分钟后计数器下降到 2-5k IOPS
开始:
Jobs: 10 (f=10): [mmmmmmmmmm] [10.6% done] [123.6MB/123.6MB/0KB /s] [31.7K/31.7K/0 iops] [eta 13m:40s]
后:
Jobs: 10 (f=10): [mmmmmmmmmm] [14.5% done] [4839KB/4723KB/0KB /s] [1209/1180/0 iops] [eta 14m:18s]
此刻最热门:
top - 09:19:06 up 4:45, 2 users, load average: 10.41, 5.78, 2.41
Tasks: 282 total, 2 running, 280 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.6 us, 3.5 sy, 0.0 ni, 42.8 id, 52.9 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 32769764 total, 214292 free, 334168 used, 32221304 buff/cache
KiB Swap: 16515068 total, 16515068 free, 0 used. 31963788 avail Mem
我认为对于 10 个 SSD(60K iops rw)来说,即使每个磁盘可以处理 30-40 iops,其性能仍然很低。
我尝试了 2 种不同的控制器、3 种类型的 raid、Windows 和 Linux 系统 - 测试结果相同。我的问题是什么?如何理解为什么性能太低以及为什么我的性能下降很大?我听说过 SSD 备用区域,但我仍然不明白如何重新配置它。
答案1
该 fio 作业被允许执行缓冲写入,因此写入数据可以在 RAM 中缓冲,并且稍后才发送到磁盘(通过写回)。鉴于此,一种解释可能是最初大部分 I/O 都进入 RAM,但随后在某个时候 RAM 缓冲区开始刷新,数据实际上必须发送到后备存储,导致新 I/O 进入缓冲区必须等待,从而导致速度变慢。
还要注意的是,fio 文档指出,使用缓冲 I/O 时,libaio ioengine 可能不是异步的模式并且您正在使用它对 ext4 文件系统进行 I/O(这又会引发更多阻塞)。
最后,您确定您的控制器支持 320(32 x 10)的 iodepth 吗 - 它可能支持,但值得检查...
TLDR;fio 作业的结果可能因缓冲而严重扭曲,并且可能无法达到预期的 I/O 深度。