分頁與位址轉換

有效存取時間(effective access time)

/ abbr. EAT /

想像你多數的電話都用便利貼上已有的號碼(快),但少數幾通逼你得先翻電話簿(慢)。若有人問「平均來說,一通電話多久才接通?」,你不能只報快的時間或慢的時間——你必須按各自發生的「頻率」把它們混合。有效存取時間就是分頁下一次記憶體存取的那個混合平均:每次存取的典型時間,把快速的 TLB 命中路徑與緩慢的 TLB 失誤路徑,依其機率加權。

計算如下,其實就是一個加權平均。設 TLB 命中率為 h(介於 0 與 1 的分數),一次 TLB 命中花一次記憶體存取的時間 m,一次 TLB 失誤則多花一次讀分頁表的記憶體存取再加上資料存取,在最簡單的單層模型裡即 2m。那麼 有效存取時間 = h * m + (1 減 h) * 2m。(嚴格說,每次存取還花一點點 TLB 查找時間,常被加進去或視為可忽略而略過。)例如 m = 100 奈秒、h = 0.98:EAT = 0.98 * 100 + 0.02 * 200 = 98 + 4 = 102 奈秒,只比純記憶體慢 2%。若是多層(階層式)分頁表,失誤的代價更高,因為走訪要讀好幾層,於是失誤項相應變大。

有效存取時間之所以重要,是因為它把「TLB 有幫助」這個抽象想法化成一個確切的數字,精準呈現分頁究竟花多少成本,也鮮明地說明為何高命中率如此寶貴:即使只有區區百分之幾的失誤,當失誤慢上一倍時,也會明顯地把平均拉高。誠實的提醒是:這條簡單公式假設單層分頁表、並忽略一般的 CPU 快取;真實機器在其上疊了多層表、硬體走表器與資料快取,所以這條公式是乾淨的教學模型,而非對某顆特定晶片的精確量測。

記憶體存取 m = 100 奈秒,TLB 命中率 h = 0.80(偏低的 80%)。EAT = 0.80 * 100 + 0.20 * 200 = 80 + 40 = 120 奈秒,慢了 20%。把 h 提到 0.99,EAT 降為 0.99 * 100 + 0.01 * 200 = 101 奈秒,只慢 1%——同樣的硬體,因命中率更高而好上許多。

有效存取時間是命中與失誤兩條路徑的加權平均;命中率越高,懲罰縮得越快。

這條簡單公式假設單層分頁表、並忽略 CPU 資料快取;多層表會讓一次失誤花上好幾次記憶體存取,使失誤項增大。請把這個數字當成教學模型,而非晶片實測。

又称
EATaverage memory access time平均存取時間