虛擬記憶體與記憶體映射

輾轉(thrashing)

輾轉(thrashing)是當一台機器 RAM 短缺到幾乎把所有時間都花在記憶體與磁碟之間搬頁、幾乎完全不在真正運算時所發生的事。程式想做的工作幾乎毫無進展,磁碟燈卻一直亮著;即使 CPU 技術上很忙,系統卻感覺像凍住了。它是置換在最末端的失效模式。

這個惡性循環的步驟如下。執行中程式們合起來的工作集——它們各自即將需要的頁——大於實體 RAM。為了替某個程式騰出一個頁框,作業系統必須逐出另一個程式幾乎馬上又要用的頁,那一頁接著又被錯誤帶回來,而代價是逐出另一個還在用的頁。每個程式都不斷在剛被丟掉的頁上發生錯誤,每次錯誤都是一個等磁碟的緩慢主要錯誤。有用的 CPU 工作卡在一波磁碟讀取後面,於是吞吐量崩向零,即使使用率計數器看起來很高。

輾轉不是溫和的變慢,而是一道斷崖:少量記憶體壓力能被平順處理,但一旦熱門工作集超過 RAM,系統就可能墜入幾近全面的癱瘓。解方在於工作集,而非置換:跑更少或更小的程式好讓熱門頁裝得下、加真正的 RAM,或改善區域性讓每個程式同時需要常駐的頁更少。加更多置換空間沒有幫助,往往還更糟,因為它讓超額配置在崩潰前陷得更深。

在 RAM 不足的筆電上多開一個過大的應用程式:滑鼠卡頓、切換視窗要好幾秒、磁碟不停運轉,卻什麼都做不完——機器正在輾轉,把同樣的頁換出去又馬上換回來。

全是磁碟、毫無進展——這就是輾轉的招牌。

輾轉是工作集的問題,不是置換大小的問題;更多置換通常加深它而非治癒它。真正的解方是把熱門工作集塞進 RAM(更少/更小的程式、更多 RAM、更好的區域性),而非把它分頁去的磁碟弄大。

又称
swap thrashingpage thrashing顛簸