背景: https://www.v2ex.com/t/983981
为了找到问题根本,我耗时两天,进行了各种磁盘性能测试。
省流总结:随便什么姿势,随便选一个就行,性能区别不大(我主板只有一个 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 测试了,想着测磁盘性能,应该和操作系统没关系。
于是又进行测试
操作系统 | 宿主机文件系统 | 宿主机压缩 | 虚拟机文件系统 | 读取性能 |
---|---|---|---|---|
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+,原因未知,有请大佬分析。
顺带一问,在 ZFS 开启压缩后,怎么能够真实的测试出磁盘读取性能呢?用 FIO 测出来的应该不是真实的了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.