whexy1999

SSD 缓存能否提升群晖 NAS 的写入速度

Whexy /
July 26, 2023

结论:只加装 SSD 对于群晖日常使用的写入速度没有任何提升。

我在网络上搜寻了一番,但未能找到任何有关群晖 SSD 缓存对 NAS 写入速度影响的具体测试。在一些论坛帖子中,有的人称 SSD 缓存能 “大幅提升” 写入速度,也有人表示 “毫无效果”。然而,这些帖子和评论都没有给出具体的测试数据作为证明。

因此,我决定花费 60 美元购买两块 500GB 的 NVME SSD,亲自测试群晖 SSD 缓存是否能够提高写入速度。

⚠️

SSD 读写缓存限制

注意:在群晖系统中设置 SSD 读写缓存,需要两块容量相同的 SSD 构建 RAID 1 阵列。如果不满足这个条件,就无法建立读写缓存。

我进行的实验很简单,分为两个部分:

  • 拷贝单个 4GB 大文件
  • 拷贝总计 4GB 的 8192 个小文件

选择 4GB 的原因是,NAS 本身的内存大小为 2GB。使用超过内存大小的文件进行传输,可以避免内存缓存对结果产生影响。

试验设置

设备:使用 MacBook M1 Pro 向群晖 723+ NAS 拷贝数据。

连接方式:通过网线直接连接 MacBook 和 NAS,不经过任何交换机或路由器,确保两台设备都无法访问互联网。

数据生成:使用 dd 命令从 /dev/urandom 抽取随机值生成文件。首先,我创建了一个名为large-4G的 4GB 大文件,其内容完全由随机数据填充。然后,我生成了 8192 个 0.5MB 的小文件,总计也是 4GB。

拷贝方法:使用 NAS 的命令行,通过 rsync -av --status <src> <dst> 命令进行拷贝。

dd if=/dev/urandom of=large-4G bs=1g count=4

for i in $(seq 1 8192)
do
	dd if=/dev/urandom of=random_file_$i bs=524288 count=1
done

测试结果

以下是拷贝速度测试的结果:

测试名称无缓存有 SSD 读写缓存
大文件 (4GB)81.12 MB/s86.24 MB/s
多个小文件 (4GB)83.49 MB/s85.24 MB/s

理想情况下,所有测试应进行多次,然后给出平均值和中位数。 然而,坦白说,我本希望写入速度能有显著的提升。但这次测试结果已经证明多次试验毫无价值。

结果分析

花了三天饭钱购买 SSD 之前,我本以为加上读写缓存能够显著提升 NAS 的写入速度。但实际上,SSD 缓存对 NAS 的写入速度几乎没有任何影响。这是为什么呢?

于是我又测试了两个设备之间的网络速度。使用 speedtest 测得的下载速率为 966.8Mbps,上传速率为 735.9Mbps。群晖 NAS 出厂配备的是千兆网卡,加上 speedtest 运行在 docker 容器内有些许性能损耗,可以说测试结果与预期相符。

speedtest 测试结果

speedtest 测试结果

对比我们之前的测试结果,最快的写入速度是 86.24 MB/s,即 689.92 Mbps。也就是说,NAS 的写入速度已经接近千兆网卡的极限。因此,即使加装 SSD 缓存,也无法提升写入速度。

在不升级 NAS 网络的情况下,使用 SSD 读写缓存对于大文件或多个小文件的写入速度,提升并不显著。

所以对于想要提升 NAS 写入速度的朋友,我建议先升级一下网络。因为你的瓶颈大概率不是硬盘,而是带宽。

升级建议

群晖非常小气,给每个家用 NAS 配的都是千兆网卡。其实现在 USB 2.5G 网卡价格已经 100 元不到了,升级一下网卡,可以让你日常使用 NAS 的速度提升一倍 (2500Mbps)。

其次是升级路由器。现在的手机和电脑已经支持 WiFi 6 甚至 WiFi 6e,但大多数家庭的路由器还是非常平庸的五六年前的产品。推荐升级到 AX9000 或者 AX6000,最低也要 AX5400。

SSD 缓存的实际作用

对于随机读取大量小文件来说,SSD 缓存的帮助巨大。无论是 btrfs 还是 ext4 文件系统,都选择将元数据放在磁盘的最前面的位置。索引大量小文件会导致机械硬盘的磁头在元数据位置和文件位置之间反复移动,大幅增加寻道时间,从而降低读取速度。而 SSD 缓存可以将这些元数据缓存到 SSD 上,从而提升读取速度。

© LICENSED UNDER CC BY-NC-SA 4.0