背景:黑群晖的内网SMB拷贝速度始终上不去,使用iperf3工具测试排查网络问题后开始排查硬盘问题。
为了找到问题根本,我耗时两天,进行了各种磁盘性能测试。
省流总结:随便什么姿势,随便选一个就行,性能区别不大(我主板只有一个SATA控制器,没测直通控制器,但是按网上说的,区别也不大)
设备:
物理机: CPU:D1581 内存:128G 2133 MHz ECC 磁盘:3T HDD 7200转 垂直盘 * 2
虚拟机: 4核CPU 8G内存
系统:arpl+DSM7.2.1
首先,我采用最普遍的方式,PVE把2块磁盘全盘映射到虚拟机,然后进行测试(由于磁盘测试耗时实在是太长了,因此下面所有测试都只跑了4K随机读取性能):
RAID | 文件系统 | 数据完整性校验 | 压缩 | 读取性能 |
---|---|---|---|---|
RAID1 | Ext4 | 不支持 | 不支持 | 3757KiB/s |
RAID1 | Btrfs | 开启 | 开启 | 3692KiB/s |
RAID1 | Btrfs | 开启 | 不开启 | 3752KiB/s |
RAID1 | Btrfs | 不开启 | 不开启 | 3798KiB/s |
RAID0 | Ext4 | 不支持 | 不支持 | 3947KiB/s |
这个结果可以说明好几个问题:
1、btrfs和ext4性能差异不大
2、btrfs开不开群晖的压缩(我不知道他用的哪种算法),开不开完整校验,性能差距不大
3、群晖中,Raid0和Raid1都能够优化磁盘读取性能,都接近2N的速度
接着,为了做对照,同样的宿主机下,把同样的2块磁盘通过全盘映射的方式挂到debian系统下面测试,这里我偷懒了,没配RAID,只挂了一块盘,测试
RAID | 文件系统 | 数据完整性校验 | 压缩 | 读取性能 |
---|---|---|---|---|
无 | Ext4 | 不支持 | 不支持 | 2142KiB/s |
这个测试数据基本说明了群晖Raid0和Raid1确实提升了磁盘读取速度。
到这里,我原帖Copy速度为啥跑不上去的根源基本上找到了。但是!我还有一个疑问,那就是我第一个测试结果,我的磁盘是怎么跑到400Mib/s的?我当时绝对跑出那个速度了,但是后续为啥复现不出来了呢?
我仔细回忆了当时的测试步骤,当时应该是刚刚装好系统,当时是PVE使用ZFS建的磁盘组,然后建了一个虚拟磁盘给虚拟机,当时想着群晖装fio不方便,就直接拿Debian测试了,想着测磁盘性能,应该和操作系统没关系。
于是又进行测试,宿主机使用ZFS文件系统,Raid1阵列
操作系统 | 宿主机文件系统 | 宿主机压缩 | 虚拟机文件系统 | 读取性能 |
---|---|---|---|---|
debian | ZFS | lz4 ashift 12 | Ext4 | 61.5MiB/s |
debian | ZFS | lz4 ashift 9 | Ext4 | 439MiB/s |
DSM | ZFS | lz4 ashift 9 | Ext4 | 54.7MiB/s |
DSM | ZFS | lz4 ashift 9 | Btrfs | 53.1MiB/s |
DSM | ZFS | lz4 ashift 9 | Ext4 On Raid0 | 64.4MiB/s |
这里也能看出一个问题,宿主机使用阵列后,虚拟机再组阵列就不能达到2N的速度了
到这来,400+的读取速度复现出来了。我盲猜一波,造成这种问题的原因应该是Fio写入的测试数据都是重复的值,ZFS开启压缩算法后直接给去重了,读取性能约等于解压性能。
但是,我还有一点纳闷,DSM在ZFS虚拟盘的场景下,读取性能还是不如Debian,Debian能跑到400+,群晖才50+,原因未知,有请大佬分析。