NAS最本质的功能是存储与传输,不管厂商多加了什么花里胡哨功能,对用户而言读写性能永远是最重要的,只不过现在大部分NAS都无法进行直接准确的读写量化测试,用户遇到传输慢或者掉速会比较难定位问题点。
本文分享下量化NAS读写能力的测试教程,对应测试硬盘+运行硬件+NAS系统的综合性能,适用几乎所有品牌NAS,也欢迎大家把测试结果发在评论区共享,觉得有所帮助欢迎关注点赞收藏三连,有复杂问题咨询请单独联系。
在正式开始教程前,先和大家分享一下读写性能相关的基础知识。
1️⃣存储硬件与存储池的区别
不管NAS新手老手应该都知道,初次使用必定有创建存储池这一步,如果这里选择RAID,可以简单理解为将多块物理硬盘合并一块虚拟硬盘。
除了RAID-0以外都是以镜像备份形式保护数据,组建RAID后会导致可用容量下降+读写能力下降,由于不同硬件+系统优化水平不同,不同NAS的最终读写性能表现也会有所区别。
除了RAID以外,不同文件系统也会影响传输性能,比如btrfs和ext4就会有性能上的差别,用固态硬盘做加速的话差别会更大。
2️⃣测试使用工具说明
Windows系统有CrystalDiskMark和ASS SD Benchmark等知名测试工具,这里为新手朋友介绍下关键数据:
● 第一是顺序读写速度,单位为MB/s,测试结果越大越好,对应大文件的读写能力。
● 第二是随机读写速度,单位为MB/s,测试结果越大越好,对应小文件的读写能力。
● 第三是读写延迟,单位为ms,测试结果越小越好,对应响应速度。
这三类数据综合起来看,才能完成评估设备的理论传输能力,如果是走网络协议,最终传输速度还会受到路由器限制,后续有机会单独再出一篇说吧。
常规NAS几乎都是以Linux为内核,当然也就用不了上述工具,Linux目前除了文件系统本身自带的Benchmark以外,主流是用FIO进行评估测试,本次教程的核心工具也是它。
动手前先需要了解在用NAS是否适用本次教程,同时也需要准备必要的软件。
1️⃣NAS厂商支持说明
首先你得有台NAS,适用本次教程的NAS型号不限,处理器不区分ARM和X86架构,只要能SSH+支持Docker就行,群晖、威联通、万由和铁威马肯定可以。
需要注意一点,群晖和威联通自带了测速工具,只不过测试的是硬盘本身的性能,并不能测试存储池的性能,这两者的区别上文说过不再赘述。
尝试了下极空间和绿联,用内置Docker管理器并不能赋予容器完整的特权模式,这会导致创建测试文件会失败,请自行搜索这类轻NAS的SSH登录方法,省的这两家又碎碎念我。
2️⃣必要工具和NAS状态说明
不同NAS的内置Docker管理器会有所区别,分开讲解起来会非常麻烦,本文偷个懒,统一用第三方SSH工具作为演示,我用的是FinalShell,请去官方下载一下。
http://www.hostbuf.com/t/988.html
动手测试前请确认两点:
● 先给NAS创建好存储池,尽量在空盘状态下进行测试,已有的存储池需要预留100G及以上的的空闲空间。
● 如果有多个存储池且想全方位测试读写能力也是可以的,分几次挂载不同存储池跑就行,这也是本次分享的意义所在。
几乎所有NAS都不允许直接安装第三方软件,这里用容器版本的Ubuntu曲线救国,整个测试流程有两个注意点:
● 第一是准确的在目标存储池上创建容器的挂载文件夹,不然测试的可能是其他存储池。
● 第二是需要正确赋予Ubuntu容器特权模式,不然会出现FIO卡创建测试文件的问题。
如果看不懂上面这两句话也问题不大,严格跟着下文走就不会出错,除了挂载文件夹以外,不同NAS操作上的区别不大。
下面开始正式教程,先确认要测试的存储池是哪个,点击设置中的共享文件夹选项就能看到。
第一步,先创建挂载用文件夹,创建完成后右键该文件夹,确认该文件夹的真实路径,部分NAS可能要手动加上,我这里是:
/volume1/docker/ubuntu
第二步,SSH登录NAS,登录后用切换到su模式,输入:
sudo -i
按回车键(enter)确认
按照提示输入密码,这里看不到输入的密码,盲打。
按回车键(enter)确认
第三步,部署容器版本ubuntu,将黑体字替换成刚创建好的文件夹真实路径:
docker run -it -v /主机路径:/mnt --privileged ubuntu bash
这里我修改为:
docker run -it -v /volume1/docker/ubuntu://mnt --privileged ubuntu bash
按回车键(enter)确认
正确部署完应该如下图所示,已经用特权模式登录到Ubuntu的容器,而不是SSH登录NAS,切记检查一下,至此测试环境已经部署完成,这个窗口不要关,开始安装FIO。
PS:如果这时候不小心把ssh给关了,或者后期要重新做测试,重新SSH登录后输入上面代码就可以重新进入。
第一步,更新Ubuntu的软件源,输入:
apt update
按回车键(enter)确认
第二步,等待更新完成后,安装fio,输入:
apt install fio
按回车键(enter)确认
期间会按下图所示提示是否继续执行,输入:
Y
按回车键(enter)确认
等全部执行完成后应该如下图所示,至此fio安装完成,窗口不要关,下面开始实际测试环节。
第一步,创建一个用于存放测试文件的文件夹,输入:
cd /mnt
按回车键(enter)确认
mkdir test
按回车键(enter)确认
接下来开始运行fio进行测试,下面四行代码分别对应顺序读取、顺序写入、随机读取和随机写入,切记单次只能执行一个任务:
顺序读取
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=read --bs=128M --ioengine=libaio --iodepth=32 --runtime=120 --numjobs=4 --time_based --group_reporting --norandommap --name=iops-test-job --eta-newline=1
顺序写入
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=write --bs=128M --ioengine=libaio --iodepth=32 --runtime=120 --numjobs=4 --time_based --group_reporting --norandommap --name=iops-test-job --eta-newline=1
4K随机读取
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=read --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
4K随机写入
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=write --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
复制代码后按回车执行,测试时间可能会比较长,请耐心等待。
这里我以随机读取的结果为例,关键数据如下图所示:
● 上红框为平均值,包含速度和IOPS两个单位。
● 下红框为详细数据,包含速度和IOP两项的平均值、最小值和最大值。
细心的朋友应该发现,fio没有读写延迟的统计,可以通过iostat命令可以另外查看,输入:
iostat -x
下图圈出来的两处,左侧框是读取延迟,右侧框则是写入延迟。
本文到这里就结束了,给一拉到底的朋友画个重点:
这套测试流程基于Docker和FIO这俩工具,部署的前提是NAS内置可以赋予特权模式的Docker管理器,如果没有那只能走SSH部署。
通过本教程可以直接测试NAS上某个存储池的顺序读写和随机读写数据,和硬盘本身读写能力有一定的区别,具体看开头的说明。
以上就是本次分享,感谢观看。