在我们构建分布式文件系统时,我正在对节点进行一些基准测试。由于文件将分布并复制到许多节点,因此我们在节点本身上使用 raid0。但是,我得到了一些奇怪的性能数字,我很好奇 StackOverflow 社区是否可以帮助找出原因。我使用 fio 作为基准测试工具;请注意,版本 1.38 对我来说不起作用,我需要使用版本 1.59 或 1.60。
这是我的 fio 配置文件:
[global]
directory=/mnt/gluster
lockfile=readwrite
ioengine=libaio
iodepth=8
rw=randrw
nrfiles=200
openfiles=30
runtime=900
[file]
filesize=16-8k/8M-512M
size=1GiB
对于使用软件 raid 的 raid0,我得到了以下结果(剪切到基本内容):
read : io=285240KB, bw=324535 B/s, iops=79 , runt=900011msec
write: io=283532KB, bw=322592 B/s, iops=78 , runt=900011msec
在使用软件 raid 的 raid1 上,我得到了以下结果:
read : io=683808KB, bw=778021 B/s, iops=189 , runt=900000msec
write: io=488184KB, bw=628122 B/s, iops=153 , runt=795864msec
单盘性能依然胜过raid0性能:
read : io=546848KB, bw=622179 B/s, iops=151 , runt=900018msec
write: io=486736KB, bw=591126 B/s, iops=144 , runt=843166msec
LVM 以 4k 区段跨四个磁盘进行条带化:
read : io=727036KB, bw=827198 B/s, iops=201 , runt=900007msec
write: io=489424KB, bw=604693 B/s, iops=147 , runt=828800msec
硬件 RAID0(HighPoint RocketRaid 2470)
read : io=326884KB, bw=371918 B/s, iops=90 , runt=900008msec
write: io=328824KB, bw=374125 B/s, iops=91 , runt=900008msec
请注意,上面的前四个结果仅在主板的 SATA 控制器上运行。但是,在移至 RocketRaid 卡后,我使用软件 RAID 重现了这些结果。这些是 1TB SATA 驱动器。运行多线程测试得到的结果大致相同。RAID0 运行速度这么慢有什么原因吗?我认为它在随机 I/O 方面的表现会优于单个驱动器或 RAID1。
后续:根据 Scalable Informatics 的 Joe(好人,买他的东西!)的一些建议,我改变了我的测试以使用更深的队列和更随机的块大小。
[global]
directory=/mnt/glusterfs
lockfile=readwrite
ioengine=libaio
iodepth=32
rw=randrw
numjobs=8
[file]
filesize=16-8k/8M-512M
blocksize_range=64k-1M
size=1GiB
nrfiles=50
openfiles=8
runtime=900
最终的结果是 HighPoint RocketRaid 2740 卡很烂。
- 单盘性能(SuperMicro 主板 SATA):读取 43.2mb/s,写入 42.6 mb/s
- MD Raid 0(使用 RocketRAID 作为 HBA,无论是否加载驱动程序):读取速度为 53.1 mb/s,写入速度为 54.1 mb/s
- RocketRaid Raid 0:读取速度为 29.4 mb/s,写入速度为 29.2 mb/s
- MD RAID 0(主板 SATA):读取速度为 58.0 mb/s,写入速度为 58.3mb/s
与 RocketRaid 卡连接的性能整体上较慢。
我将把这个问题留待解答——我们将在未来一两周内获得一批新的 RAID 卡以便进行测试,并且我仍在寻找优化技巧以获得超过单磁盘性能,但这个问题似乎还没有得到彻底的解答。
答案1
您可能遇到了条带大小问题,其中写入或读取的数据集中在单个磁盘上 - 请参阅软件 RAID 指南了解详情。您可以通过查看以下输出来检查是否是这种情况iostat。
如果您想检查线性访问性能,请尝试使用“hdparm -t”或 dd 进行基准测试 - 这应该显示的性能数字大约是单个磁盘性能的两倍。
答案2
我认为它在随机 I/O 方面提供的性能将优于单个驱动器或 RAID1。
不,如果您随机搜索的块大于条带大小,那么它应该与单个驱动器的速度差不多。但这仍然无法解释您的结果比单个驱动器更差。
从维基百科。
对于大于条带大小的读写操作(例如复制文件或视频播放),磁盘将在每个磁盘上寻找相同的位置,因此阵列的寻道时间将与单个驱动器的寻道时间相同对于小于条带大小的读写操作(例如数据库访问),驱动器将能够独立寻道。