RAS 與 CAS 延遲(列/行存取延遲)
/ razz and kazz /
想像在檔案櫃裡找一條資料。你先拉開正確的抽屜、把整個資料夾抬到桌上——這個打開的動作要花一點時間。接著,資料夾攤在你面前,抓出任何一頁都很快。緩慢的「拉開抽屜」步驟是列存取;快速的「從打開的資料夾抓一頁」步驟是行存取。DRAM 的運作方式一模一樣,而這兩個步驟有兩種不同的延遲。
具體來說,RAS(列位址選通,Row Address Strobe)延遲是啟動一列的時間——感測單元並把整列載入列緩衝區;其中一個關鍵部分 tRCD,是從送出列位址到能送出行命令之間的延遲。CAS(行位址選通,Column Address Strobe)延遲,常寫作 CL,是在列已經開著的情況下,從送出行讀取命令到資料出現之間的延遲。所以一次存取的代價要看情況:列緩衝區命中只付 CAS;列緩衝區未命中要付 預充電 + RAS + CAS;空記憶庫存取則付 RAS + CAS。在 DIMM 上這些會被標成像 CL16 這樣的數字,意思是 16 個時脈週期的行延遲。
為何重要:讓一次孤立的記憶體存取顯得慢的,是這些延遲、而不是原始頻寬——數十奈秒、數十到數百個 CPU 週期。這正是記憶體控制器要費這麼大勁、靠重排請求並利用列緩衝區把未命中轉成命中的原因。記憶體牆誠實的標題正在這裡:數十年來這些存取延遲只有溫和的改善,而頻寬與 CPU 速度爬升得快得多,所以延遲是那個頑固的瓶頸。
在 CL16 的 DDR4-3200 上,光是行延遲就是 16 個週期。一次乾淨的列緩衝區命中花費約一個 CAS;一次列衝突還要再加上預充電與列啟動的延遲——這正是為何一次隨機存取的未命中,可能比一次串流命中貴上好幾倍。
總存取延遲取決於列緩衝區狀態:命中付 CAS,未命中付 預充電 + RAS + CAS。
跨世代比較時,較低的 CL 數字並不自動代表「較快」——以奈秒計的延遲是 CL 除以時脈頻率。一條高時脈、CL 數字很大的 DDR5,實際時間上仍可能勝過一條 CL 很低的舊條。