首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  NAS

群晖 NAS 磁盘读写速度的一些测试

  •  
  •   Sylv · 134 天前 · 5006 次点击
    这是一个创建于 134 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前提

    近期我更换了我的群晖 NAS 里的硬盘,在选择存储空间的文件系统时不知该选 ext4 还是 Btrfs,我主要考量的是磁盘的读写性能,于是就写了个脚本测试了下我的群晖 NAS 在两种文件系统下的磁盘读写速度,顺便也测试了下其在不同 RAID 类型下的磁盘读写速度。

    目录

    • 说明
    • 一些结论
      • TL;DR
      • 细节对比
    • 测试硬件
      • 群晖 NAS
      • 硬盘
    • 测试使用的脚本
    • 测试脚本使用的命令
      • hdparm 读取测试
      • dd 读写测试
        • dd 读取测试
        • dd 写入测试
      • fio 读写测试
    • 测试结果
      • ext4 和 Btrfs 文件系统的对比
        • BASIC 单盘
        • JBOD 四盘
        • RAID0 四盘
        • RAID1 四盘
        • RAID10 四盘
        • RAID5 四盘
        • SHR 四盘(相当于 RAID5 )
        • RAID6 四盘
        • SHR2 四盘(相当于 RAID6 )
      • ext4 在不同 RAID 类型下的对比
    • 原始数据

    说明

    • 测试使用的命令和参数是从网上搜刮来的,可能并不完善。
    • 测试并未严格控制变量,也未多次重复测试取平均值,结果可能存在误差,仅供参考。
    • 本文使用的数据单位采用 SI 和 IEC 标准
      • 1000 进制的 SI 标准单位:kB (1000 字节), MB (1000^2 字节), GB (1000^3 字节) ...
      • 1024 进制的 IEC 标准单位:KiB (1024 字节), MiB (1024^2 字节), GiB (1024^3 字节) ...
    • 测试了 ext4 和三种选项下 Btrfs 的磁盘读写速度:
      • ext4
      • Btrfs
      • Btrfs + 校验:启用了 文件自我修复功能(启用数据总和检查码以实现高级数据完整性)
      • Btrfs + 校验 + 压缩:启用了 文件自我修复功能 + 文件压缩功能

    一些结论

    TL;DR

    • 我最后还是选用了 ext4。
    • 大部分情况下,当读写块较大时,Btrfs 的读写速度和 ext4 相差不大;但当读写块较小时,Btrfs 的速度明显劣于 ext4。
    • 一些情况下,文件自我修复功能(数据总和检查码)对 Btrfs 的读写速度有影响。
    • 文件压缩功能对 Btrfs 的实际读写速度无可见影响。
    • RAID0 性能最佳,但提升不及预期,四盘 RAID0 性能大部分情况下达不到单盘的两倍。
    • JBOD 大部分情况下性能与单盘一致,在少数小块写入测试中写入速度有明显提升。
    • RAID1 在部分测试下性能略低于单盘,未见理论上的读取速度提升。
    • 部分情况下,RAID10 / RAID5 / SHR / RAID6 / SHR2 的性能相比单盘有提升。
    • 大部分情况下,群晖自己的 SHR / SHR2 (Synology Hybrid RAID) 与普通的 RAID5 / RAID6 相比差别不大。

    细节对比

    • [ext4] vs [Btrfs] vs [Btrfs + 校验] vs [Btrfs + 校验 + 压缩]:

      • hdparm 读取测试:
        • 四者无显著差别。
      • dd 读取测试:
        • 四者差别似乎不是非常明显,在不同 RAID 类型下有些许波动。
      • dd 写入测试:
        • 当测试使用大读写块( 1 GiB、128 MiB )时,ext4 和 Btrfs 的写入速度无显著差别,有时 Btrfs 还会略高于 ext4。
        • 当测试使用的读写块大小从 1 MiB 逐步降低时,Btrfs 的写入速度开始显著低于 ext4。最严重的情况下( RAID5 / RAID6 + 512 字节块大小),Btrfs 的写入速度只是 ext4 的九分之一( 20 kB/s vs 180 kB/s )。
        • 大部分情况下,文件自我修复功能对 Btrfs 的写入速度无影响。
        • Btrfs 开启文件压缩功能后,因为 dd 写入测试写入的数据都是 0,所以会导致测试出的写入速度虚高。
      • fio 连续读取测试:
        • 大部分情况下,Btrfs 略低于 ext4。
        • 开启文件自我修复功能后,Btrfs 的读取速度会更低些。
      • fio 连续写入测试:
        • 大部分情况下,未开启文件自我修复功能的 Btrfs 略慢于 ext4。
        • 在 RAID5 / SHR / RAID6 / SHR2 下,文件自我修复功能对 Btrfs 的写入速度基本无影响。
        • 在其它 RAID 类型下,开启文件自我修复功能后,Btrfs 的写入速度明显下降,大概只有 ext4 的一半。
      • fio 随机读取测试:
        • 1 MiB 块大小时,四者差别不大。
        • 4 KiB 块大小时:
          • BASIC / JBOD / RAID1:四者差别不大。
          • RAID0 / RAID10 / RAID5 / SHR / RAID 5 / SHR2:开启文件自我修复功能后,Btrfs 的随机读取速度大幅度下降,可下降到 ext4 的十分之一( SHR2 )。
      • fio 随机写入测试:
        • 1 MiB 块大小时:
          • BASIC / JBOD / RAID1 / RAID5 / SHR / SHR2:四者差别不大。
          • RAID0:特例,无校验 Btrfs 的随机写入速度是 ext4 的 140%,但在开启校验后速度下降到一半。
          • RAID10:ext4 > Btrfs >> Btrfs + 校验 ≈ Btrfs + 校验 + 压缩
          • RAID6:ext4 的随机写入速度是其它三者的两倍。
        • 4 KiB 块大小时:
          • 出于某种原因,开启了校验的 Btrfs 的随机写入速度反而是 ext4 的两倍以上。
    • ext4 在不同 RAID 类型下的对比:

      • 大读写块连续读取测试:
        • JBOD 和 RAID1 基本和 BASIC 单盘的读取速度一致。
        • RAID0 确实对读取速度有明显提升,但可能受制于我的群晖的机能,提升远不及理论值,四盘 RAID0 的速度只是单盘的 1.5 倍到 2 倍。
        • RAID10 / RAID5 / SHR / RAID6 / SHR2 相比单盘速度有部分提升,有的速度与 RAID0 相近。
      • 小读写块连续读取测试:
        • 所有 RAID 类型的速度无明显差别。
      • dd 写入测试:
        • RAID0 写入速度最好,块越小越明显,512 字节块大小时,其写入速度是单盘的 10 倍。
        • JBOD 在块小时的写入速度也有明显提升。
        • 其余 RAID 类型的写入速度相近,约为单盘速度。
      • fio 连续写入测试:
        • 1 MiB 块大小时:
          • RAID0 >> BASIC / JBOD / RAID10 > RAID1 / RAID5 / SHR / RAID6 / SHR2
        • 4 KiB 块大小时:
          • BASIC / JBOD > RAID0 / RAID1 / RAID10 >> RAID5 / SHR / RAID6 / SHR2
          • RAID5 / SHR / RAID6 / SHR2 只是单盘速度的近七分之一。
      • fio 随机读取测试:
        • 1 MiB 块大小时:
          • RAID0 略快一些。
          • 其它 RAID 类型速度相近。
        • 4 KiB 块大小时:
          • BASIC / JBOD / RAID1 速度相近。
          • 其它 RAID 类型速度提升明显,是单盘的 10 倍左右。
      • fio 随机写入测试:
        • 1 MiB 块大小时:
          • RAID0 提升明显,是单盘速度的 2.5 倍。
          • RAID10 是单盘的 2 倍。
          • 其它 RAID 类型差别不大。
        • 4 KiB 块大小时:
          • RAID0 相对于单盘略有提升。
          • RAID5 / SHR / RAID6 / SHR2 速度明显下降,是单盘速度的 35% 左右。

    测试硬件

    群晖 NAS

    我的群晖 NAS 是 2013 年款的 DS1513+,五盘位,CPU 是 Intel Atom D2700 Dual Core 2.13 GHz,内存扩充到了 4 GiB,群晖系统版本是 DSM 6.2。

    硬盘

    测试使用的硬盘是四个 HGST 昱科的 Deskstar NAS 充氦硬盘(HGST Deskstar NAS 3.5" 10TB 7200 RPM 256MB Cache),型号是 HDN721010ALE604,容量是 10 TB,转速是 7200 RPM,缓存是 256 MiB,网上这款硬盘的评测

    测试使用的脚本

    synology_disk_benchmark.sh

    使用方法:

    1. 保存 synology_disk_benchmark.shxfio.conf 到 NAS 上。
    2. 授予脚本执行权限:
    chmod +x synology_disk_benchmark.sh
    
    1. 运行测试:
    sudo ./synology_disk_benchmark.sh 测试名
    
    1. 测试根据机能和磁盘速度的不同可能会花费数十分钟。
    2. 测试结束后会生成一个结果报告文件:测试名.md

    测试脚本使用的命令

    hdparm 读取测试

    sudo hdparm -Tt $device
    

    dd 读写测试

    dd 读取测试

    # 生成一个 1 GiB 大小的随机数据测试文件
    head -c 1G </dev/urandom >test
    # 清除缓存
    sync; echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
    # 从 test 文件读取,每次读取 1 MiB 数据,读取 1024 次,共读取 1 GiB 数据
    dd if=test of=/dev/null bs=1M count=1024
    

    dd 写入测试

    # 写入 0 到 test 文件,每次写入 x 数据,写入 y 次,共写入 x*y 数据( dsync 不缓存)
    dd if=/dev/zero of=test bs=$x count=$y oflag=dsync
    

    分别测试了 bs 读写块大小为 1 GiB、128 MiB、1 MiB、128 KiB、4 KiB、512 bytes 时的写入速度。

    fio 读写测试

    fio xfio.conf
    

    fio 测试使用的配置文件:xfio.conf

    进行了以下测试:

    • 连续读取和写入,1 MiB 块大小
    • 连续读取和写入,4 KiB 块大小
    • 随机读取和写入,1 MiB 块大小
    • 随机读取和写入,4 KiB 块大小

    注:群晖内置了 fio 命令。

    测试结果

    ext4 和 Btrfs 文件系统的对比

    BASIC 单盘

    basic_b

    basic_c

    basic_d

    basic_e

    basic_f

    basic_g

    basic_h

    basic_i

    basic_j

    basic_k

    basic_l

    basic_m

    basic_n

    basic_o

    basic_p

    basic_q

    JBOD 四盘

    jbod_b

    jbod_c

    jbod_d

    jbod_e

    jbod_f

    jbod_g

    jbod_h

    jbod_i

    jbod_j

    jbod_k

    jbod_l

    jbod_m

    jbod_n

    jbod_o

    jbod_p

    jbod_q

    RAID0 四盘

    raid0_b

    raid0_c

    raid0_d

    raid0_e

    raid0_f

    raid0_g

    raid0_h

    raid0_i

    raid0_j

    raid0_k

    raid0_l

    raid0_m

    raid0_n

    raid0_o

    raid0_p

    raid0_q

    RAID1 四盘

    raid1_b

    raid1_c

    raid1_d

    raid1_e

    raid1_f

    raid1_g

    raid1_h

    raid1_i

    raid1_j

    raid1_k

    raid1_l

    raid1_m

    raid1_n

    raid1_o

    raid1_p

    raid1_q

    RAID10 四盘

    raid10_b

    raid10_c

    raid10_d

    raid10_e

    raid10_f

    raid10_g

    raid10_h

    raid10_i

    raid10_j

    raid10_k

    raid10_l

    raid10_m

    raid10_n

    raid10_o

    raid10_p

    raid10_q

    RAID5 四盘

    raid5_b

    raid5_c

    raid5_d

    raid5_e

    raid5_f

    raid5_g

    raid5_h

    raid5_i

    raid5_j

    raid5_k

    raid5_l

    raid5_m

    raid5_n

    raid5_o

    raid5_p

    raid5_q

    SHR 四盘(相当于 RAID5 )

    shr_b

    shr_c

    shr_d

    shr_e

    shr_f

    shr_g

    shr_h

    shr_i

    shr_j

    shr_k

    shr_l

    shr_m

    shr_n

    shr_o

    shr_p

    shr_q

    RAID6 四盘

    raid6_b

    raid6_c

    raid6_d

    raid6_e

    raid6_f

    raid6_g

    raid6_h

    raid6_i

    raid6_j

    raid6_k

    raid6_l

    raid6_m

    raid6_n

    raid6_o

    raid6_p

    raid6_q

    SHR2 四盘(相当于 RAID6 )

    shr2_b

    shr2_c

    shr2_d

    shr2_e

    shr2_f

    shr2_g

    shr2_h

    shr2_i

    shr2_j

    shr2_k

    shr2_l

    shr2_m

    shr2_n

    shr2_o

    shr2_p

    shr2_q

    ext4 在不同 RAID 类型下的对比

    ext4__b

    ext4__c

    ext4__d

    ext4__e

    ext4__f

    ext4__g

    ext4__h

    ext4__i

    ext4__j

    ext4__k

    ext4__l

    ext4__m

    ext4__n

    ext4__o

    ext4__p

    ext4__q

    原始数据

    原始测试结果数据

    31 回复  |  直到 2018-10-06 05:38:49 +08:00
        1
    ryd994   134 天前 via Android
    btrfs 坑过我,而且性能不行
    建议试试 zfs
        2
    EPCoo   134 天前 via iPhone
    感谢楼主分享!
        3
    SunnyLyx   134 天前 via Android
    V2er 打开此主题就会卡死
    另感谢楼主分享
        4
    zhangckid   134 天前 via Android
    虽然 btrfs 不行但是群晖主打啊…我记得群晖的 KVM 不用 btrfs 还不给我用…简直弱智…逼我手动开 qemu
        5
    Sylv   134 天前
    @SunnyLyx
    其实应该在标题里标下「多图杀猫」😁
        6
    yingfengi   134 天前 via Android
    你能打开这个帖子会不会卡成狗,Android V2ER 客户端
        7
    yingfengi   134 天前 via Android
    @SunnyLyx 卡一会儿,往下拉就好了???大概是图太多的锅
        8
    C2G   134 天前 via Android
    @yingfengi 应该是图片过多加载问题。我刚刚也是卡了一下,然后就好了。拉下来一看一堆图
        9
    SunnyLyx   133 天前 via Android
    @yingfengi 急性子,卡一会儿就好了
        10
    Athrob   133 天前 via iPhone
    楼主用心了
        11
    Rabbit52   133 天前 via Android
    我的天,这个贴手机差点卡死了 🤔
        12
    hjc4869   133 天前 via iPhone
    楼主应该用更专业的 IO 测试软件比如 iozone3。另外如果瓶颈是千兆网,那么考虑这些意义不大。
        13
    514146235   133 天前   ♥ 1
    ext4 和 btrfs 场景不一样。一般使用 btrfs 是追求它的一些新的特性。例如压缩,快照等等。
    下一代的文件系统 cow 是趋势,包括苹果的 apfs 也一样。cow 带来的性能下降是必然的。就看你能不能接受。

    btrfs 目前已经足够稳定了。我的 nas 一直使用 btrfs,5 块硬盘 16T 容量合并成一个磁盘空间,不过没有开启 raid。开启了自动快照,然后就再也没有因为误删丢过任何数据了。然后还有部分冷数据直接开启压缩。真的是很爽。

    期间经历过 N 次断电之类的,文件系统没有任何问题。不像 btrfs 早期那样可能导致文件系统损坏。

    使用 btrfs 唯一要注意的就是,尽可能使用比较新的内核。
    自己组的 nas,archlinux,5 块硬盘,总容量 16T,上面还跑很多服务。目前已经稳定连续工作近 2 年时间。

    现在唯一期待的就是 btrfs 加入利用 ssd 磁盘加速的功能了。好像会在下一个 feature 里面。
        14
    ryd994   133 天前 via Android   ♥ 1
    @514146235 你要的这些,zfs 全都有,而且久经考验,而且 FreeBSD 官方支持
        15
    loading   133 天前 via Android
    群辉还跑分,买椟还珠!
        16
    514146235   133 天前
    @ryd994 我知道,zfs 目前的确是比 btrfs 成熟。但是 freebsd 作为专用服务器还可以。多功能服务器还是 linux 比较好用一些。我的 nas 上面还要跑 kvm, docker 等等严重依赖 linux 内核的东西。

    而且 freebsd 的软件包编译安装也确实比较费时间。十几年前用过 freebsd 作为服务系统,后来已经弃坑了。
        17
    zn   133 天前
    @ryd994 群辉不直接支持 ZFS 吧?得专门装 FreeNAS 一类的系统,然后 FreeNAS 这系统嘛,超级耗内存,光系统本身就要求 8G 内存起步,其他应用、虚拟机所需的内存,得额外计算。
        18
    514146235   133 天前
    @ryd994 而且 btrfs 早就已经进入 linux 内核了。以后是发展趋势。
        19
    xinhangliu   133 天前 via Android
    赔我流量🙂
        20
    yingfengi   133 天前 via Android
    @C2G 是的,不过在农村老家,运营商炸了。
        21
    ferock   133 天前   ♥ 1
    btrfs 比较 ext4 性能当然不行,毕竟有很多备份的特性在那里。
    但是。。。
    这是以后的趋势
        22
    ryd994   133 天前 via Android   ♥ 2
    @514146235 我是 CentOS 打底,kvm 开虚拟机,pcie 直通 HBA 给 nas4free。其他服务放其他虚拟机。虚拟网络用 jumbo frame,其实开销很小。唯一缺点就是内存消耗大。但是二手服务器 ECC 内存都是白菜价。无论你是不是用 zfs,对于数据安全,ECC 内存都是非常值得的投资

    我 3 年前用 btrfs 时,它就已经在内核里,而且声称 production ready 了。实际呢?意外断电后全盘无法识别。信任就是一次偶然可以毁掉的。

    btrfs 那时候还号称是未来的趋势。然而到现在也没有取代 ext4,而且性能也远比不上 ext4。在我看来,btrfs 是对 zfs 的一次失败的重造轮子。
    RedHat 系不再默认 ext4,而是改用了 xfs。xfs 对小文件,SSD,的性能非常好。所以用于服务器系统盘最合适。数据盘再考虑其它。

    顺带一提,ext4 也可以一定程度上 SSD cache。使用 external journal。

    @zn 不到 8G 也可以。只要你不开去重。NAS 都是顺序读写,瓶颈总是在带宽。1G/T+8G 是建议配置,建议而已。
        23
    wowodavid   133 天前
    瓶颈还是网络啊,万兆网关键不在设备,而在于重新装修的成本
        24
    wtdd   133 天前
    NAS 毁硬盘不是开玩笑的,建议还是保命优先,性能就随他去吧……
        25
    ryd994   133 天前 via Android
    @wtdd raid6 以上,坏就坏呗
    能同时坏三块那真算我倒霉了
    raid5 就算了,重建分分钟再挂一块挂给你看
    该备份的还是要另外备

    再推一波 wd my book,毕竟是氦气盘体
        26
    maolaohei   133 天前
    用手机看真卡,还得用电脑看
        27
    Sylv   133 天前
    @xinhangliu 我算过了这帖图片一共 25.4 MB 大小,现在流量这么便宜,用不了几毛钱。😛
        28
    Sylv   133 天前
    @hjc4869 群晖因为用的是自己的 Linux 系统,要用 iozone 等其他测试软件得自己编译,所以就用了一些自带的工具简单测试了下,日后若有其他用户进行类似测试也好有个参考。
        29
    Sylv   133 天前
    @wowodavid 据说超五类线距离不长的话是足够跑万兆的,我下一步准备试试。
        30
    Sylv   133 天前
    @wtdd 我是 RAID5 + 一比一备份。其实 NAS 配上靠谱 UPS 并没有那么容易毁硬盘的,我之前的多块硬盘 7x24 运行了四年多,一块都没出问题。
        31
    msg7086   133 天前   ♥ 1
    NAS 跑性能测试……额。

    我自己是 xfs 一把梭,公司里 NAS 用的 ZFS on Linux,虽然比原厂 ZFS 可能要不稳点,但是现在还没遇到问题。

    @Sylv 我们 ZFS 服务器跑了 2 年,至今已经累计坏了 5 块了。
    希捷企业级,上电的时候大概 20-25k 的 POH,现在普遍在 35-45k。
    上次是两块一起坏,一起换掉以后重建的。这次是前几天刚坏了,刚换上重建的。
    还是挺频繁的。

    @ryd994 我选择 easystore,比 my book 好拆,而且可能会便宜点。
    缺点是保修少一年,但是反正也拆开了……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2243 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1