什麼是系統抖動,系統抖動及解決方法詳解

2020-07-16 10:04:37
如果低優先順序進程所分配的幀數低於電腦架構所需的最小數量,那麼必須暫停該進程執行。然後,應調出它的所有剩餘頁面,以便釋放所有分配的幀。這個規定引入了中級 CPU 排程的換進換出層。

事實上,需要研究一下沒有“足夠”幀的進程。如果進程沒有需要支援活動使用頁面的幀數,那麼它會很快產生缺頁錯誤。此時,必須置換某個頁面。然而,由於它的所有頁面都在使用中,所以必須立即置換需要再次使用的頁面。因此,它會再次快速產生缺頁錯誤,再一次置換必須立即返回的頁面,如此快速進行。

這種高度的頁面排程活動稱為抖動如果一個進程的調頁時間多於它的執行時間,那麼這個進程就在抖動。

系統抖動的原因

抖動導致嚴重的效能問題。考慮以下場景,這是基於早期調頁系統的實際行為。

作業系統監視 CPU 利用率。如果 CPU 利用率太低,那麼通過向系統引入新的進程來增加多道程度。採用全域性置換演算法會置換任何頁面,而不管這些頁面屬於哪個進程。

現在假設進程在執行中進入一個新階段,並且需要更多的幀。它開始出現缺頁錯誤,並從其他進程那裡獲取幀。然而,這些進程也需要這些頁面,因此它們也會出現缺頁錯誤,並且從其他進程中獲取幀。這些缺頁錯誤進程必須使用調頁裝置以將頁面換進和換出。當它們為調頁裝置排隊時,就緒佇列清空。隨著進程等待調頁裝置,CPU 利用率會降低。

CPU 排程程式看到 CPU 利用率的降低,進而會增加多道程度。新進程試圖從其他執行進程中獲取幀來啟動,從而導致更多的缺頁錯誤和更長的調頁裝置佇列。因此,CPU 利用率進一步下降,並且 CPU 排程程式試圖再次增加多道程度。這樣就出現了抖動,系統吞吐量陡降,缺頁錯誤率顯著增加。結果,有效記憶體存取時間增加,沒有工作可以完成,因為進程總在忙於調頁。

系統抖動
圖 1 系統抖動