如何調整核心以實現總交換?

如何調整核心以實現總交換?

我想部署以下交換策略:

  • 預設情況下,記憶體中的所有頁面也應該位於交換空間中。
  • 當記憶體中的頁面發生變更(即髒)時,應盡快將該頁面寫出,但優先順序低於其他進程。
  • 如果達到某個可設定的水位線(假設 80% 的頁面是髒頁),則優先權將與其他行程相同。

Linux 核心可以實作這種交換策略嗎?如果是這樣,我該如何設定內核設定來實現這一目標?

編輯:

顯然這樣做的原因是為了減少需要換出的頁面數量。只有髒頁需要寫入磁碟,並且隨著時間的推移,這會在後台發生。因此,當發生頁遺失(即該頁不在記憶體中)時,不需要將任何頁從記憶體寫入到磁碟,而只需從磁碟寫入到記憶體。因此,它降低了出現 I/O 瓶頸的可能性,因為換入和換出都會嘗試同時存取磁碟。

答案1

您可以設定 的值/proc/sys/vm/swappiness來控制交換的資料段與保留在記憶體中的資料段的比率。值為 0 會不惜一切代價完全避免交換。

這可以使用以下任一方法來完成:

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • 將該設定儲存在/etc/sysctl.conf

一般來說,使用一點點交換並不是一件壞事。空閒記憶體可用於快取從磁碟讀取的數據,並且系統可以針對應用程式突然需要大量記憶體而提前規劃。

然而,當交換太多程式時,每次程式切換期間都會有大量與磁碟相關的活動,這確實會使一切變慢。在使用某些東西之前,需要將其載入回記憶體。

與記憶體存取相比,磁碟讀取速度非常慢,因為資料到達所需的時間要長得多。系統必須在其他讀取/寫入請求之間安排讀取,驅動器開始嘗試找到正確的柱面,最後開始緩慢傳輸資料。

因此,我認為你的邏輯是有缺陷的。一般來說,您希望讓程式在記憶體中運行,同時仍為突然增長保留足夠的空間。不要過於頻繁地使用交換來“將內容寫入磁碟”,因為它既不是備份也不是效能改進。

較舊的電腦記憶體較少,因此會出現交換問題。當同時開啟許多程式時,系統會變慢,並且您可以聽到磁碟讀寫交換檔案的聲音。

答案2

僅僅因為您的系統正在交換,並不意味著您有問題。有些應用程式經過精心調整,可以充分利用交換,而不會影響系統的效能。大多數關係型資料庫系統都是這樣調整的: IE:Oracle 和 Cache,可能是最大的兩個。

如果您使用休眠模式,它會使用交換空間來儲存 RAM。當系統重新啟動時,交換區中的所有內容都會加回 RAM。這樣,您就可以關閉系統電源,而無需像待機那樣消耗電池電量,並且仍然可以返回關閉電源之前離開的位置。因此,您的電池將持續更長時間。

交換可能是一件很棒的事情,因為它可以釋放更多的活動 RAM,以保持系統的高效能。當您的活動 RAM 已滿且交換區已滿,並且您仍然需要更多空間時,只有那時您才會遇到問題。在那之前,交換是為了幫助你,而不是傷害你。

答案3

添加到 vdboor 的答案,我認為要實現你想要的,你需要修改超過swappiness.有更多可用的核心可調參數可以控制交換的使用方式。使用者可以在運行時透過/proc/sys/vm/*檔案存取這些內容或永久設定/etc/sysctl.conf(這可能需要將sysctlinit 腳本新增至啟動序列才能生效)

Linux 核心文件中詳細介紹了這些設定。您可以在下面找到它<your_kernel_sources_path>/Documentation/sysctl/vm.txt。您也可以查看一些線上文檔比如這個

相關內容