三種操作的時間尺度差了兩個數量級
NAND 頁讀取在數十微秒量級,頁編程在數百微秒到毫秒量級,而塊擦除通常需要 2 至 5 毫秒。擦除既是最慢的一步,也是唯一無法被拆細的一步——它必須對整個塊施加完整的擦除脈衝序列並做校驗。GC 的成本因此不均勻地壓在這一環節上。
阻塞發生在 die 層面,不只是通道
常見的誤解是把它當成頻寬問題。實際上 NAND 的忙狀態粒度是 die 或 LUN:某個 die 正在擦除時,所有映射到該 die 的讀請求只能排隊等待,通道再寬也無濟於事。這是資源佔用問題。在低佇列深度場景下後果尤其明顯——J750/J770 規劃的 QD1 平均讀延遲為 65 µs,而一次不巧撞上擦除的讀會被推到毫秒量級,直接反映在 P99.9 上。
Erase Suspend 與它的隱藏成本
企業級 NAND 普遍支援掛起擦除去服務讀,隨後再恢復。這個能力有用,但不是免費的:恢復後的擦除需要重新施加脈衝,累計擦除時間被拉長;掛起過於頻繁還可能讓擦除不夠充分,抬高後續編程的誤碼率,把問題從延遲域轉移到可靠性域。韌體必須限制單次擦除允許被掛起的次數,超過閾值就讓它跑完。
把擦除鋪開:配額、錯峰與水位
合理的 GC 不是發現哪個塊最髒就立刻擦。排程器為每個通道和每個 die 維護擦除配額,在時間窗口內均勻分攤,並主動避開前臺 I/O 的突發時段。空閒塊水位分兩檔:高於高水位時 GC 完全後臺化,可被前臺隨時搶佔;一旦跌破低水位則切換為前臺限流,寧可主動降低主機寫入的接納速率,也不讓延遲分佈整體塌陷。
穩態才是需要關注的工況
新盤上跑不出擦除引起的問題,因為空塊充裕、GC 幾乎不工作。任何有意義的評估都必須先做足量預處理,把盤寫到寫放大穩定之後再採數。J770 規劃的 600 KIOPS 與 J750 的 300 KIOPS 4KB 隨機寫都是按穩態定義的,兩者的差距很大程度上來自預留空間不同帶來的 GC 壓力差異,而不是主控算力差異——兩款產品的順序讀 7,400 MB/s 與順序寫 5,500 MB/s 完全一致。
