fio磁盘测试:4K随机读写和顺序读写,买VPS到底看哪个

YABS磁盘分数背后是fio。小够讲清顺序读写和4K随机读写的区别、IOPS是什么、建站和数据库分别看哪个指标,以及商家宣传里的磁盘数字游戏。

我是小够。上篇说了sysbench是YABS的CPU发动机,这篇讲磁盘发动——fio。YABS输出里那一排"4k/64k read/write"的数字,全是fio跑出来的。但很多人盯着数字大就喊"这盘牛",其实四个数字里,对你有用的可能只有一个。今天把fio讲明白。

fio是什么

fio(Flexible I/O Tester)是Linux下最专业的磁盘压测工具,特点是"灵活":读写模式、块大小、队列深度、线程数,全都能调。YABS用它跑一套固定参数,输出顺序读写和4K随机读写。商家宣传页上"NVMe 3000MB/s"这种数字,很多也是fio顺序读跑出来的。

两个核心概念:顺序读写 vs 4K随机读写

顺序读写:像复印一整本书,一页接一页,测的是"大文件搬运"能力。单位MB/s,数字最好看。备份、传文件、下载,就吃这个。

4K随机读写:像在图书馆里随机抽书,每次只拿4K大小的一小叠,测的是"小文件随机访问"能力。单位是IOPS(每秒操作次数)。数据库、网站(WordPress每次打开要读几十上百个小文件)、系统启动,就吃这个。

关键结论:对绝大多数VPS用户(建站、跑服务),4K随机读写比顺序读写重要得多。顺序读3000MB/s听着吓人,但你的博客一天产生的流量可能都用不满100MB/s;反倒是4K随机写IOPS太低,网站打开会明显变慢。

商家的数字游戏

知道上面这点,你就能看穿两种常见话术:

  1. 只宣传顺序读写:“NVMe高速磁盘,读速3000MB/s!"——4K随机IOPS一个字不提。顺序读高不代表随机读写好,有些便宜盘顺序读漂亮,4K随机写惨不忍睹。看到这种宣传,直接问客服要4K随机读写的IOPS,不给的,心里就有数了。

  2. 缓存盘冒充:有些机器第一次跑fio分数极高,跑第二次掉一半——因为第一次命中了缓存。YABS默认跑多轮取数,相对靠谱;但商家自己贴的单次截图,可能是缓存加持的"最佳成绩”。自己到手重跑一遍,跑两次对比,差太多就说明有猫腻。

自己动手:一条命令看真相

fio --name=test --rw=randrw --bs=4k --size=1G --numjobs=4 --iodepth=32 --runtime=60 --time_based --group_reporting

这条是4K随机混合读写,4线程、队列深度32,跑60秒。输出看read: IOPS=和write: IOPS=两行。对VPS来说,4K随机读IOPS过万、写过几千,日常建站就够用了;低于1000,就要怀疑是不是机械盘或者超分严重的虚拟盘。

再补一条顺序读写的:

fio --name=test --rw=read --bs=1M --size=2G --numjobs=1 --iodepth=16 --runtime=60 --time_based --group_reporting

看BW=(带宽)那行。这个数字和你实际下载大文件的速度最接近。

小够的选购建议

  1. 建站/博客:优先看4K随机读写IOPS,读>10000、写>5000算合格线。顺序读写够用就行,别为3000MB/s多花钱。
  2. 数据库/重IO应用:4K随机写IOPS是生命线,低于3000的盘,MySQL稍微上点并发就排队。
  3. 纯下载/备份机:反过来,顺序读写更重要,随机IOPS可以放宽要求——这种场景买大硬盘便宜盘最划算。
  4. 别迷信"NVMe"三个字:NVMe只是接口,盘的体质、宿主机的超分程度、虚拟化层的损耗,都会吃掉性能。同是NVMe,不同商家能差出几倍。到手自己跑fio,数字自己会说话。

读懂YABS磁盘输出:示例拆解

YABS的磁盘部分长这样(示例输出,非实测,仅示意格式):

fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/vda1):
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ----
Read       | 85.20 MB/s    (21.3k) | 1.42 GB/s     (22.7k)
Write      | 85.46 MB/s    (21.3k) | 1.43 GB/s     (22.9k)
Total      | 170.66 MB/s   (42.6k) | 2.85 GB/s     (45.6k)

读法:先看4k那列的IOPS——读21.3k、写21.3k,建站完全够用;再看64k列的吞吐——2.85GB/s总量,搬运无压力。如果4k列只有几百IOPS,但64k列几个GB/s,那就是"顺序漂亮、随机拉胯"的典型,建站体验不会好。

注意YABS测的是混合读写(50/50),比纯读更接近真实。商家如果贴的是自己跑的fio纯读截图,数字会比YABS好看一截,对比时要心里有数。

商家话术对照表

商家说翻译你该问
NVMe高速磁盘接口是NVMe,体质未知4K随机IOPS多少
读速3000MB/s顺序读,可能开了缓存随机写IOPS?跑两次差多少
SSD企业级企业级盘,超分未知steal多少?晚高峰再测一次
不限IO没写就是没承诺写进TOS了吗

一句话总结

顺序读写看搬运,4K随机看体验;建站看IOPS,下载看MB/s。商家只报最好看的那个数字,你要学会问他没报的那个。下一篇讲iperf3——想知道VPS的真实带宽,得两台机器"对打"才测得准。