You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Intel NVMe SSD持续fio顺序读带宽下降及多numjobs无下降原因咨询

Intel NVMe SSD持续fio顺序读带宽下降及多numjobs无下降原因咨询

嘿,这个问题刚好戳中了NVMe SSD工作机制里的几个关键细节,我来给你拆解清楚:

1. 单job后期降速:SLC缓存耗尽是核心原因

你用的这款Intel NVMe SSD大概率是TLC或QLC闪存类型的(目前消费级/企业级NVMe的主流选择),这类SSD都会内置动态SLC缓存——简单说就是划出一部分闪存空间,模拟成速度更快的SLC模式来临时承载数据,用来拉高初期读写的爆发速度。

  • 你跑单job初期能冲到6400MiB/s(甚至超过标称的6000),就是因为数据先从SLC缓存里读取,这时候相当于SSD在“鸡血模式”下运行;
  • 但持续跑了30秒后,SLC缓存被全盘读的请求耗尽了,后续的读请求只能直接访问原生的TLC/QLC闪存,这部分的连续读速度本来就远低于SLC缓存,所以带宽直接掉到了3000MiB/s左右;
  • 再加上你是直接读取裸盘/dev/nvme0n1,相当于遍历全盘数据,SLC缓存的耗尽速度会比读单个大文件更快,降速的拐点也就来得更明显。

2. 4个numjobs能维持高速:把NVMe的多队列并行能力拉满了

NVMe协议的核心优势就是**多队列(Multi-Queue)**设计,SSD内部本身就有多个独立的闪存通道、处理核心,需要足够多的并发IO请求才能把这些硬件资源全部利用起来:

  • 单job哪怕设置了iodepth=256,本质上还是单个IO队列在发送请求,可能没办法完全触发SSD所有的内部并行资源;尤其是当SLC缓存耗尽后,单队列的IO请求密度不够,没法把每个闪存通道都“喂饱”,自然速度上不去;
  • numjobs=4相当于开启了4个独立的IO队列,同时向SSD发送读请求,这时候SSD的所有内部通道、核心都被充分调动起来了——哪怕是直接读原生TLC/QLC闪存,也能通过并行读写把整体带宽拉到标称的6000MiB/s以上(标称值一般是保守的典型值,实际略超属于正常情况);
  • 另外,多个job的并行IO还能让SSD的内部调度更高效,避免了单队列可能出现的请求等待间隙,进一步稳住了高带宽。

额外补充:为什么单job初期能超标称速度?

因为SLC缓存的读写速度本来就远高于SSD标称的持续读写速度(标称值特指缓存耗尽后的原生闪存速度),所以你一开始能跑到6400MiB/s是缓存带来的“爆发buff”,而4个job能维持这个速度,才是真正把SSD的硬件并行能力给榨出来了。

备注:内容来源于stack exchange,提问作者pan renhua

火山引擎 最新活动