我有一台 2005 年的老式服务器(双 3GHz Xeon、LSI53C1030T RAID/SCSI 控制器,带 256MB 缓存、8GB RAM),我打算将其重新用于一些轻量级 VM 存储任务。
第一次尝试是将 4x300GB 驱动器放入硬件 RAID5,然后在其上安装 Openfiler 的 LVM 和 iSCSI。这导致读取速度非常不一致(20MB/秒到 2GB/秒,但这可能是缓存),写入速度非常糟糕但稳定,为 8MB/秒。所有这些结果都是使用本地 dd 和通过网络进行的实际大文件传输来测量的,两者的结果都相似。
因此,在阅读了大量资料后,我发现上述 LSI 控制器对于硬件 RAID 来说并不是那么好,因此我关闭了带有 4x300GB 驱动器的通道上的 RAID 功能,使用 mdadm 软件 RAID 制作了 RAID 阵列,并在其上放置了 LVM。我进行了更多测试,结果有所改善(20MB/秒写入),但这仍然相当糟糕。我又花了一天时间对齐分区、优化块、条带宽度、步长大小、使用 ext4 选项、不同的日志选项等,但没有太多明显的改进。
我做的另一个实验是hdparm -tT
在 /dev/md0 与 /dev/mapper/vg0-lv0(这只是整个 md0 的映射)上运行,当通过 LVM 时,速度减慢了 2 倍。我读到 LVM 可能会带来一些速度损失,但将速度减半是不可接受的。
由于这些都毫无意义,我回到了基础,在单个驱动器上创建了一个分区,没有 LVM、RAID,只有普通的旧 SCSI320,并对其进行了一些测试。通过多次运行和多个程序,我获得了 ~75MB/秒的读取速度和 ~55MB/秒的写入速度。
那么,如果一个驱动器的读取速度为 75MB/秒,写入速度为 55MB/秒,为什么 3 个驱动器组成的 RAID5(硬件或软件!)速度如此糟糕?我做错了什么?我还应该尝试什么?
更新 1:在继续实验时,我注意到其中一个磁盘有时不想分区;parted 和 fdisk 会拒绝实际将分区写入该磁盘。因此,我尝试在所有其他磁盘上使用相同的命令,以确保这不是系统性问题,而且看起来问题只存在于该磁盘上。我继续smartctl
在该磁盘上运行健康测试,一切正常。 dmesg
是表明驱动器可能有问题的唯一迹象,尽管消息相当隐晦且没有特别有用的帮助。出于纯粹的好奇心,我拔出驱动器,重新启动,并重新执行了迄今为止对没有 LVM 但带有 ext4 的软件 RAID5 所做的一切。第一次尝试时,当我使用 dd 将 4.2GB 文件以 64kB 块的形式转储到新分区时,我获得了 200MB/秒的读取速度和 120MB/秒的写入速度,这是对一个五驱动器阵列(在此期间,我找到了另外两个 300GB 驱动器)的读取速度。显然,驱动器虽然没有完全死机,但并不是特别合作,而且一旦脱离方程,一切都运行得更好。
我现在感觉更理智了,无论哪个 RAID 级别,8MB/秒都感觉不对。
明天:使用 LVM 进行测试,也许会回到硬件 RAID。
答案1
RAID5 的写入性能非常差。原因是每次写入特定磁盘都需要更新奇偶校验块,因此每次写入都需要从阵列中的所有其他磁盘读取数据 + 计算奇偶校验,然后将奇偶校验重新写入保存该特定块奇偶校验的磁盘。
与仅仅写入一个块相比,这需要很长时间。
如果想要快速写入,镜像配置更好,例如 RAID1 或 RAID10。