虛擬記憶體與需求分頁

分頁錯誤率(page-fault rate)

假設你在一本書裡讀了一千個字,而每個字偶爾才需要你走去圖書館取回某一缺失的章節。分頁錯誤率就是你的查字動作中、變成一趟圖書館之行的比例。若每 1000 次查字有 1 次要跑一趟,你的錯誤率是 0.001;若每 10 次就有 1 次,那就是 0.1,而你幾乎所有時間都會花在走路上。同樣這個數字也描述一個程式:在它所有的記憶體參考中,有多少比例造成了分頁錯誤?

具體來說,分頁錯誤率通常寫成一個機率 p,介於 0(沒有任何參考會發生錯誤)與 1(每一次參考都發生錯誤)之間。它是在某次執行中測得的:錯誤次數除以記憶體參考總數。由於一次命中 RAM 的記憶體存取極快、而一次命中磁碟的分頁錯誤極慢,p 對真實效能的影響大得不成比例——即使極小的 p 也會把平均值大幅拉高。這正是有效存取時間公式的核心輸入:有效存取時間等於(1 減 p)乘以快速的記憶體內存取時間,加上 p 乘以大得多的頁錯誤服務時間。

為什麼重要:需求分頁那殘酷的算術就活在這一個數字裡。由於服務一次錯誤大約比一次記憶體存取慢十萬倍,你需要 p 小到趨近於零——往往要低於每十萬或每一百萬次參考一次錯誤——才能讓變慢的程度勉強可以忍受。一個用日常標準聽起來很低的比率,例如「每千次存取一次錯誤」,實際上會讓記憶體存取平均慢上數百倍。因此把分頁錯誤率維持在低點,就是虛擬記憶體效能的全部賽局,而達成的方法是善用區域性、給每個行程足夠的頁框,並置換掉正確的頁。

若記憶體存取為 100 奈秒、一次錯誤花費 8 毫秒(8,000,000 奈秒),那麼僅僅 p = 0.001 的錯誤率就給出平均約 100 + 0.001 x 8,000,000 = 8100 奈秒——比 RAM 慢 80 倍以上。要讓變慢維持在 10% 以下,你需要 p 遠低於 0.0000013。

由於磁碟太慢,即使 0.1% 的錯誤率也是效能災難。

不要用對「小百分比」的日常直覺去評斷分頁錯誤率。磁碟與 RAM 的速度差距如此巨大,以致一個聽起來微不足道的比率,仍可能把平均存取時間主導到高出許多倍。

又称
fault probability缺頁率頁錯誤機率