RAM磁盘读取速度为何不及机械硬盘(HDD)?
测试结果的真实性说明与偏差原因
首先明确:你得到的测试结果不存在代码错误,观察到的反常现象是常规测试干扰导致的,并非RAM磁盘的读速真的低于机械硬盘。
按照你的操作顺序,四组dd输出对应的测速结果分别为:
- RAM盘写入速度:546 MB/s
- HDD写入速度:176 MB/s
- RAM盘读取速度:1.0 GB/s
- HDD读取速度:1.1 GB/s
二者读速的微小差值完全属于短周期测试的随机误差范围,不存在实质的速度反转。
出现该反常现象的核心原因
- 系统页缓存虚高了HDD的测速结果
Linux内核默认会把刚写入的文件内容暂存在内存的页缓存中,不会立刻同步刷写到磁盘盘片。你在测试HDD读速之前,刚完成向HDD路径下写入410MB测试文件的操作,测试文件的绝大部分内容根本还没写到机械硬盘上,全在内存里。此时执行dd读HDD文件的操作,本质是从内存取数,根本没有触发磁盘物理读取,测出来的速度自然和专用RAM盘处于同一水平。 - tmpfs的内核路径开销略高于普通缓存读路径
你挂载的RAM盘是tmpfs类型,属于内核实现的临时文件系统,每次读写都需要完成页表映射、权限校验、临时文件元数据更新等流程,这套处理路径的开销,略高于“普通磁盘文件命中页缓存”的简化读流程。对于你使用的K10架构AMD Opteron 3350 HE平台,受限于平台本身的内存控制器带宽,tmpfs跑出546MB/s的写速属于正常水平,不存在性能异常。这也是为什么HDD的测速值会略高于RAM盘的原因——不是磁盘更快,是内核处理普通内存缓存读的路径更短。 - 短周期测试的固有随机误差
你每组读测试的总耗时不足0.4秒,这种极短的测试窗口内,任意一次系统中断抖动、后台进程的微小调度延迟,都会带来50-100MB/s的速度波动。你观察到的1.0GB/s和1.1GB/s的差值,远小于随机误差的正常波动范围,完全不代表真实的硬件速度差距。
测得真实硬件速度的修正方法
要排除页缓存干扰,获取机械硬盘的真实物理读写性能,需要在测试前手动清空系统缓存:
- 完成HDD测试文件写入后,执行
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches,强制将缓存中的脏数据刷到磁盘,并清空所有文件页缓存 - 此时再执行dd读取操作,得到的才是7200转机械硬盘的真实盘片读取速度,通常为100-150MB/s,和tmpfs的读速会有近10倍的差距,不可能出现速度打平的情况。
补充说明:你测得的HDD写入速度176MB/s,同样包含页缓存的加速效果。真实无缓存场景下,7200转机械硬盘的连续写入速度通常在80-120MB/s区间,和RAM盘546MB/s的写速差4-5倍,和你观察到的3倍左右的写速比例基本吻合。
内容的提问来源于stack exchange,提问作者Michael Bluejay
相关产品推荐
相关产品推荐

