讀寫、IOPS、延遲,你的硬盤性能到底怎么看?)
摘要SSD廠商標(biāo)稱的7000MB/s到底意味著什么為什么順序讀寫飆到天際實(shí)際用起來卻感覺卡頓本文從讀寫速度的物理本質(zhì)出發(fā)拆解順序/隨機(jī)讀寫、IOPS、延遲三大核心指標(biāo)揭示QD隊(duì)列深度對(duì)性能的影響機(jī)制并用fio實(shí)測數(shù)據(jù)告訴你如何正確評(píng)估SSD真實(shí)性能。 目錄一、為什么順序讀寫速度是最容易被誤解的指標(biāo)二、讀寫速度的三大核心指標(biāo)2.1 順序讀寫速度Sequential Read/Write2.2 隨機(jī)讀寫IOPSRandom Read/Write IOPS2.3 延遲Latency三、順序 vs 隨機(jī)物理機(jī)制的本質(zhì)差異3.1 順序讀寫的內(nèi)部流程3.2 隨機(jī)讀寫的內(nèi)部流程3.3 性能差距的根源分析四、隊(duì)列深度QD被忽視的關(guān)鍵變量4.1 什么是隊(duì)列深度4.2 QD對(duì)性能的影響曲線4.3 SATA vs NVMe的QD差異五、主流測試工具與方法論5.1 CrystalDiskMark5.2 fio——專業(yè)級(jí)存儲(chǔ)測試5.3 AS SSD Benchmark六、fio實(shí)戰(zhàn)完整測試SSD性能的命令集6.1 順序讀寫測試6.2 隨機(jī)讀寫IOPS測試6.3 延遲測試七、消費(fèi)級(jí) vs 企業(yè)級(jí)SSD性能對(duì)比八、如何正確解讀廠商標(biāo)稱參數(shù)九、當(dāng)日知識(shí)點(diǎn)小結(jié)十、思考題一、為什么順序讀寫速度是最容易被誤解的指標(biāo)每當(dāng)我們購買SSD包裝盒上最醒目的參數(shù)一定是順序讀取7000 MB/s 順序?qū)懭?300 MB/s這個(gè)數(shù)字很震撼——相當(dāng)于每秒讀取7GB數(shù)據(jù)。但問題是日常使用中你幾乎不可能達(dá)到這個(gè)速度。原因很簡單使用場景典型IO模式典型塊大小隊(duì)列深度操作系統(tǒng)啟動(dòng)大量小文件隨機(jī)讀取4KB-64KBQD1-8打開應(yīng)用程序隨機(jī)讀取4KB-256KBQD1-4網(wǎng)頁瀏覽緩存隨機(jī)讀寫混合4KB-32KBQD1-4視頻編輯回放順序讀取1MB-8MBQD1-2大文件拷貝順序?qū)懭脒B續(xù)塊QD1-32數(shù)據(jù)庫查詢隨機(jī)讀取4KB-8KBQD32-256從上表可以清晰看出日常使用中90%以上的場景都是小文件隨機(jī)IO塊大小集中在4KB隊(duì)列深度QD1-QD4。而廠商標(biāo)稱的7000MB/s是128KB大塊、QD32條件下的順序讀取峰值。核心結(jié)論順序讀寫速度決定了大文件拷貝的上限但隨機(jī)讀寫IOPS和QD1延遲才是決定系統(tǒng)流暢度的關(guān)鍵。二、讀寫速度的三大核心指標(biāo)2.1 順序讀寫速度Sequential Read/Write定義在連續(xù)邏輯塊地址上進(jìn)行大塊數(shù)據(jù)讀寫時(shí)的吞吐率單位 MB/s 或 GB/s。測試條件塊大小Block Size128KB 或 1MB隊(duì)列深度Queue DepthQD32 或 QD128測試范圍跨越整個(gè)SSD容量物理限制因素順序讀取速度 min( NAND通道帶寬 × 通道數(shù), PCIe接口帶寬, 主控處理能力 )以PCIe 4.0 x4 NVMe SSD為例PCIe 4.0 x4 理論帶寬 16 GT/s × 4 lane × 128b/130b編碼 ≈ 7.88 GB/s ≈ 7876 MB/s 實(shí)際SSD順序讀取峰值 ≈ 7000-7500 MB/s約90%利用率2.2 隨機(jī)讀寫IOPSRandom Read/Write IOPS定義每秒能完成的獨(dú)立隨機(jī)IO操作次數(shù)單位 IOPSInput/Output Operations Per Second。測試條件塊大小4KB行業(yè)標(biāo)準(zhǔn)訪問模式完全隨機(jī)LBA隨機(jī)分布隊(duì)列深度QD1 / QD32 / QD128分別測試計(jì)算公式IOPS 1000000 / 平均延遲(μs) 單QD情況 示例若4KB隨機(jī)讀取平均延遲為50μs IOPS 1000000 / 50 20000 IOPSIOPS與吞吐率的關(guān)系吞吐率(MB/s) IOPS × 塊大小(KB) / 1024 示例20000 IOPS × 4KB / 1024 78.125 MB/s這就是為什么一個(gè)標(biāo)稱7000MB/s順序讀取的SSD在4KB隨機(jī)讀取時(shí)可能只有70-80MB/s——但I(xiàn)OPS可能高達(dá)100萬。2.3 延遲Latency定義從發(fā)出IO請(qǐng)求到收到響應(yīng)的時(shí)間間隔單位微秒μs或毫秒ms。三種延遲度量指標(biāo)含義重要性平均延遲所有IO請(qǐng)求延遲的算術(shù)平均值反映整體水平P99延遲99%的IO請(qǐng)求在此延遲內(nèi)完成反映尾部延遲關(guān)鍵P99.99延遲99.99%的IO請(qǐng)求在此延遲內(nèi)完成企業(yè)級(jí)SSD核心指標(biāo)為什么P99比平均值更重要假設(shè)某SSD 10000次4KB隨機(jī)讀取的延遲分布 - 平均值45μs - P50中位數(shù)42μs - P9585μs - P99350μs - P99.992800μs 平均值看起來很好但P99延遲是平均值的7.8倍 這意味著每100次請(qǐng)求就有1次卡頓超過350μs 對(duì)于數(shù)據(jù)庫場景這就是用戶感知的毛刺三、順序 vs 隨機(jī)物理機(jī)制的本質(zhì)差異3.1 順序讀寫的內(nèi)部流程順序?qū)懭肓鞒?┌─────────┐ ┌──────────┐ ┌─────────────┐ ┌──────────┐ │ 主機(jī)數(shù)據(jù) │───│ 寫入緩沖區(qū)│───│ 選擇空SuperBlock│───│ NAND編程 │ │ 連續(xù)到達(dá) │ │ (DRAM) │ │ 按序?qū)懭隤age │ │ (TLC≈500μs)│ └─────────┘ └──────────┘ └─────────────┘ └──────────┘ 關(guān)鍵特征 - 無需FTL查表順序分配LBA→PPA映射 - 無需GC直接寫空Block - NAND通道可流水線并行操作 - 寫放大WAF ≈ 1.0理想情況3.2 隨機(jī)讀寫的內(nèi)部流程隨機(jī)寫入流程 ┌─────────┐ ┌──────────┐ ┌─────────────┐ ┌──────────┐ │ 主機(jī)數(shù)據(jù) │───│ FTL查表 │───│ 寫入新Page │───│ 更新映射表│ │ 隨機(jī)LBA │ │ (可能miss)│ │ (無法合并) │ │ (DRAM/SRAM)│ └─────────┘ └──────────┘ └─────────────┘ └──────────┘ 關(guān)鍵特征 - 每次寫入都要查FTL映射表DRAM命中 or SRAM回表 - 寫入位置分散無法利用NAND通道并行性 - 可能觸發(fā)GC空閑Block不足時(shí) - 寫放大WAF 1.0 ~ 5.0取決于GC效率3.3 性能差距的根源分析因素順序讀寫隨機(jī)讀寫性能影響倍數(shù)FTL查表開銷無順序分配每次4KB查一次延遲增加2-5μsNAND通道利用率多通道并行單通道串行為主吞吐差10-50x緩存命中率順序預(yù)取命中率高隨機(jī)命中不可預(yù)測緩存效果差寫放大WAF≈1.0WAF1.5-5.0實(shí)際寫入量倍增GC觸發(fā)概率低空Block充足高Block碎片化延遲膨脹10x典型消費(fèi)級(jí)NVMe SSD性能對(duì)比Samsung 990 Pro 2TB 性能參數(shù) 順序讀取 順序?qū)懭?隨機(jī)讀取 隨機(jī)寫入 塊大小 128KB 128KB 4KB 4KB QD 32 32 32 32 速度(IOPS) 7450 MB/s 6900 MB/s 1400K IOPS 1200K IOPS 換算吞吐 7450 MB/s 6900 MB/s 5469 MB/s 4688 MB/s 但如果是QD1 速度(IOPS) ~200 MB/s ~200 MB/s ~25K IOPS ~35K IOPS 換算吞吐 200 MB/s 200 MB/s 97 MB/s 137 MB/s QD1隨機(jī)讀取僅為QD32順序讀取的 1.3%四、隊(duì)列深度QD被忽視的關(guān)鍵變量4.1 什么是隊(duì)列深度隊(duì)列深度Queue Depth, QD是指主機(jī)可以同時(shí)向SSD發(fā)送的未確認(rèn)IO請(qǐng)求數(shù)量。QD1發(fā)送1個(gè)請(qǐng)求 → 等待完成 → 發(fā)送下一個(gè)串行 QD4同時(shí)發(fā)送4個(gè)請(qǐng)求 → 等待全部完成 → 發(fā)送下一批 QD32同時(shí)發(fā)送32個(gè)請(qǐng)求 → 等待全部完成 → 發(fā)送下一批4.2 QD對(duì)性能的影響曲線IOPS vs Queue Depth 典型曲線 IOPS ↑ │ ___________ │ ____/ │ ____/ │ ____/ │ ____/ │ ____/ │ ___/ │/ └──────────────────────────────────────→ QD 0 1 4 8 16 32 64 128 256 特征 - QD1單請(qǐng)求延遲決定IOPS最低 - QD1→QD4IOPS線性增長NAND通道被逐步利用 - QD4→QD32IOPS增長放緩接近通道飽和 - QD32→QD128IOPS趨于平穩(wěn)或微增主控算力成為瓶頸 - QD128可能因爭用導(dǎo)致IOPS下降4.3 SATA vs NVMe的QD差異特性SATAAHCI協(xié)議NVMe協(xié)議最大隊(duì)列深度3265536隊(duì)列數(shù)量165536中斷機(jī)制單中斷延遲高多隊(duì)列中斷MSI-X鎖競爭全局鎖每隊(duì)列無鎖實(shí)際常用QDQD1-32QD1-128消費(fèi)級(jí)關(guān)鍵區(qū)別SATA的AHCI只有1個(gè)隊(duì)列、32個(gè)深度、全局鎖在高并發(fā)場景下鎖競爭嚴(yán)重。NVMe支持65536個(gè)獨(dú)立隊(duì)列每個(gè)CPU核心可以獨(dú)占一個(gè)隊(duì)列消除了鎖競爭。這也是為什么同等級(jí)NANDNVMe SSD的隨機(jī)IOPS遠(yuǎn)高于SATA SSD。五、主流測試工具與方法論5.1 CrystalDiskMark特點(diǎn)消費(fèi)級(jí)最常用界面直觀測試快速默認(rèn)測試項(xiàng)目解讀測試項(xiàng) 塊大小 QD 含義 ───────────────────────────────────────────── SEQ1M Q8T1 1MB 8 順序讀寫大塊、淺隊(duì)列 SEQ1M Q1T1 1MB 1 順序讀寫大塊、單請(qǐng)求 RND4K Q32T16 4KB 32 隨機(jī)讀寫小塊、深隊(duì)列 RND4K Q1T1 4KB 1 隨機(jī)讀寫小塊、單請(qǐng)求? 最接近日常使用 關(guān)注重點(diǎn) - 廠商標(biāo)稱的7000MB/s對(duì)應(yīng) SEQ1M Q8T1 - 日常流暢度對(duì)應(yīng) RND4K Q1T1這個(gè)數(shù)字最有參考價(jià)值5.2 fio——專業(yè)級(jí)存儲(chǔ)測試特點(diǎn)Linux/Windows通用參數(shù)靈活企業(yè)級(jí)測試標(biāo)準(zhǔn)工具# 安裝Linuxsudoaptinstallfio# 安裝Windows# 從 https://github.com/axboe/fio/releases 下載5.3 AS SSD Benchmark特點(diǎn)專門針對(duì)SSD優(yōu)化包含延遲測試和評(píng)分系統(tǒng)評(píng)分維度順序讀寫大塊連續(xù)性能4K隨機(jī)小文件性能4K-64線程多線程隨機(jī)性能訪問延遲響應(yīng)時(shí)間六、fio實(shí)戰(zhàn)完整測試SSD性能的命令集6.1 順序讀寫測試# 順序讀取測試128KB塊QD32持續(xù)60秒fio--nameseq_read\--filename/dev/nvme0n1\--bs128k\--rwread\--iodepth32\--numjobs1\--runtime60\--time_based\--group_reporting# 順序?qū)懭霚y試fio--nameseq_write\--filename/dev/nvme0n1\--bs128k\--rwwrite\--iodepth32\--numjobs1\--runtime60\--time_based\--group_reporting6.2 隨機(jī)讀寫IOPS測試# 4KB隨機(jī)讀取IOPS測試QD1——日常體驗(yàn)參考值fio--namerand_read_qd1\--filename/dev/nvme0n1\--bs4k\--rwrandread\--iodepth1\--numjobs1\--runtime60\--time_based\--group_reporting# 4KB隨機(jī)讀取IOPS測試QD32——廠商標(biāo)稱參考值fio--namerand_read_qd32\--filename/dev/nvme0n1\--bs4k\--rwrandread\--iodepth32\--numjobs1\--runtime60\--time_based\--group_reporting# 4KB隨機(jī)讀寫混合測試70讀/30寫模擬數(shù)據(jù)庫負(fù)載fio--namerandrw_7030\--filename/dev/nvme0n1\--bs4k\--rwrandrw\--rwmixread70\--iodepth32\--numjobs4\--runtime120\--time_based\--group_reporting6.3 延遲測試# 4KB隨機(jī)讀取延遲分析關(guān)注P99和P99.99fio--namelatency_test\--filename/dev/nvme0n1\--bs4k\--rwrandread\--iodepth1\--numjobs1\--runtime120\--time_based\--lat_percentiles1\--group_reporting# 輸出關(guān)鍵指標(biāo)解讀# lat (usec) : 平均延遲# clat (usec) : 完成延遲# slat (usec) : 提交延遲# |- 99.0000th[ xx] ← P99延遲# |- 99.9000th[ xx] ← P99.9延遲# |- 99.9900th[ xx] ← P99.99延遲企業(yè)級(jí)關(guān)鍵指標(biāo)七、消費(fèi)級(jí) vs 企業(yè)級(jí)SSD性能對(duì)比以4KB隨機(jī)讀取為例對(duì)比不同級(jí)別SSD在QD1和QD32下的表現(xiàn)SSD類型 QD1 IOPS QD32 IOPS QD1延遲 QD32延遲 ───────────────────────────────────────────────────────────────── 消費(fèi)級(jí)SATA SSD 8,000 100,000 125μs ~20μs 消費(fèi)級(jí)NVMe Gen4 30,000 1,000,000 33μs ~5μs 企業(yè)級(jí)NVMe Gen4 40,000 1,500,000 25μs ~4μs 企業(yè)級(jí)NVMe Gen5 50,000 2,500,000 20μs ~3μs 關(guān)鍵差異分析 1. 企業(yè)級(jí)SSD的QD1延遲更低更優(yōu)的固件算法獨(dú)立SRAM緩存 2. 企業(yè)級(jí)SSD的P99/P99.99延遲遠(yuǎn)優(yōu)于消費(fèi)級(jí)穩(wěn)態(tài)性能更強(qiáng) 3. 企業(yè)級(jí)SSD在大QD下擴(kuò)展性更好更強(qiáng)的主控更多NAND通道穩(wěn)態(tài)性能Steady Statevs 爆發(fā)性能Burst消費(fèi)級(jí)SSD寫入性能曲線TOX測試 寫入速度 ↑ │████████████ ← SLC Cache區(qū)域爆發(fā)性能速度極快 │ ████ │ ████ ← Cache耗盡TLC直接寫入速度驟降 │ ████ │ ████████ ← 穩(wěn)態(tài)性能GC介入后的真實(shí)水平 └──────────────────────────────────→ 寫入時(shí)間 企業(yè)級(jí)SSD寫入性能曲線 寫入速度 ↑ │████████████████████████████████████ ← 幾乎無SLC Cache │ ████ │ ████ ← 輕微下降 │ ████████ ← 穩(wěn)態(tài)≈爆發(fā) └──────────────────────────────────────────────→ 寫入時(shí)間 結(jié)論企業(yè)級(jí)SSD通過過配比OP、強(qiáng)GC算法實(shí)現(xiàn)穩(wěn)態(tài)性能≈爆發(fā)性能八、如何正確解讀廠商標(biāo)稱參數(shù)廠商標(biāo)稱參數(shù)的測試條件通常不會(huì)寫在包裝上參數(shù)常見測試條件實(shí)際使用條件順序讀取 7000MB/s128KB塊, QD32, SLC Cache內(nèi)極少達(dá)到順序?qū)懭?5300MB/s128KB塊, QD32, SLC Cache內(nèi)大文件拷貝才觸發(fā)隨機(jī)讀取 1000K IOPS4KB塊, QD128日常QD1-4隨機(jī)寫入 800K IOPS4KB塊, QD32日常QD1-4TBW 600TB全盤順序?qū)懭胫翂勖谋M取決于使用模式消費(fèi)者應(yīng)該重點(diǎn)關(guān)注的指標(biāo)按優(yōu)先級(jí)排序1. 4K Q1T1 隨機(jī)讀取IOPS → 決定系統(tǒng)流暢度最有價(jià)值 2. 4K Q1T1 隨機(jī)讀取延遲 → 決定響應(yīng)速度 3. 4K Q32T16 隨機(jī)讀取IOPS → 決定多線程性能 4. TBW耐久度 → 決定使用壽命 5. 順序讀寫速度 → 僅對(duì)大文件傳輸有意義選購建議不要被7000MB/s迷惑。對(duì)比不同SSD時(shí)找評(píng)測網(wǎng)站測的4K Q1T1數(shù)據(jù)——這才是你最該關(guān)注的數(shù)字。九、當(dāng)日知識(shí)點(diǎn)小結(jié)知識(shí)點(diǎn)核心內(nèi)容關(guān)鍵數(shù)據(jù)順序讀寫速度大塊連續(xù)IO的吞吐率128KBQD32測試PCIe 4.0上限≈7876MB/s隨機(jī)IOPS每秒4KB隨機(jī)IO次數(shù)QD32測試消費(fèi)級(jí)≈50萬-140萬IOPS延遲指標(biāo)平均/P50/P99/P99.99四個(gè)維度消費(fèi)級(jí)QD1≈30-50μs隊(duì)列深度QD同時(shí)未確認(rèn)IO數(shù)影響并行利用率SATA max32, NVMe max65536性能測試工具CrystalDiskMark/fio/AS SSD關(guān)注4K Q1T1最有價(jià)值穩(wěn)態(tài)vs爆發(fā)SLC Cache耗盡后性能驟降企業(yè)級(jí)穩(wěn)態(tài)≈爆發(fā)廠商標(biāo)稱解讀測試條件≠實(shí)際使用條件QD1隨機(jī)IOPS最有參考價(jià)值十、思考題Q1一塊標(biāo)稱順序讀取7000MB/s的PCIe 4.0 SSD和一塊標(biāo)稱順序讀取3500MB/s的PCIe 3.0 SSD在日常使用中打開應(yīng)用程序、瀏覽網(wǎng)頁、系統(tǒng)啟動(dòng)體感差異可能不到5%。請(qǐng)從IO模式、塊大小、隊(duì)列深度三個(gè)維度解釋原因。Q2某消費(fèi)級(jí)NVMe SSD的CrystalDiskMark測試結(jié)果如下SEQ1M Q8T1 Read: 6800 MB/sRND4K Q32T16 Read: 950,000 IOPSRND4K Q1T1 Read: 78 MB/s請(qǐng)計(jì)算RND4K Q1T1的等效IOPS并解釋為什么Q1T1和Q32T16的IOPS差距超過10倍。Q3企業(yè)級(jí)SSD通常不使用SLC Cache策略而是采用全盤OP強(qiáng)化GC的方式。從性能穩(wěn)定性的角度分析為什么企業(yè)級(jí)場景更偏好這種方式SLC Cache模式在什么場景下會(huì)產(chǎn)生嚴(yán)重的性能抖動(dòng)? 推薦標(biāo)簽SSD固態(tài)硬盤讀寫速度IOPS順序讀寫隨機(jī)讀寫存儲(chǔ)性能測試fio作者持續(xù)更新中關(guān)注獲取每日SSD硬核知識(shí)