使用 zram 時 vm.swappiness 的合適值是多少?

使用 zram 時 vm.swappiness 的合適值是多少?

我在電腦上使用 zram 作為壓縮的 RAM 支援的交換區。當系統需要交換某些內容時,將其交換到 zram 支援的交換檔案或多或少相當於壓縮記憶體中的資料以釋放空間。相對於磁碟支援的交換,這使得交換在大多數情況下都非常快。因此,我想知道透過鼓勵系統更積極地交換未使用的內容是否可以獲得一些效能,因為它可以在不實際存取磁碟的情況下這樣做?

vm.swappiness那麼有沒有人在使用 zram 時搞亂過,例如設定為 100 ?這是可取的嗎?

sysctl -w vm.swappiness=100

答案1

簡短回答:vm.swappiness=100適當的值對於 zram(至少在 Debian Stretch 和 Linux 4.9 上,我相信這是最有價值的)

我已經vm.swappiness=100為我測試了。

我想你可以做一些簡單的測試以確定哪個值最適合您。

我還做了另一個簡單的程序為了測試這個問題。 x 在我的機器上,非常低的vm.swappiness值(例如vm.swappiness=1)將導致明顯的反應問題。

關於:SwapCached/proc/meminfo

首先,嘗試一下vm.page-cluster=0,這個也許可以減少一些無用的SwapCached交換。

SwapCached 可以像非 zram 交換設備一樣加速 zram

SwapCached必要時可重複使用(免費):

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

答案2

我真的不建議將 swappiness 設定得更高。核心中的一個常見機制是它將頁面(記憶體區塊)放入交換區中,以釋放一些記憶體供其他正在運行的任務使用。

第一個「問題」是當核心想要釋放 n 個頁面時,在 RAM 中新建立 m 個(m < n,m 是保存 n 所需的壓縮頁面數),我不確定這是否會幹擾核心或不是。

不管怎樣,當交換中有頁面時,您以後可能會在交換中使用該應用程式及其某些頁面。核心所做的是將這些頁面帶回物理內存,但不會將它們從交換中刪除(使用標準交換可以將其視為快取,因此當應用程式返回後台時,核心不必將這些頁面寫回慢速交換區)。然而,對於 zram 來說,這可能不是一個明智的技巧,因為你的記憶體中包含 zram 中的 m 頁 + 記憶體中的 n 頁!

核心通常有一個“總記憶體”,可以用來完成其業務。當您添加 zram 時,它僅計入“交換”內存,就像任何基於磁碟的交換一樣,但它減少了實際的“總內存”,而這不是內核所期望/預期的。有時您可能會因此而出現奇怪且不受歡迎的行為!

使用 zram 時,當核心面臨記憶體壓力時,最好不要與該區域進行過多交換。而且您應該始終擁有一個至少大於 zram 最大大小的真實硬碟交換分割區,這樣系統就不會出現 OOM,同時您會看到報告的大量可用空間free

答案3

https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram

這些值是Pop!_OS 使用什麼。 Pop!_OS GitHub 拉取請求也連結到用戶在 r/Fedora 上完成的一些測試,這確定 vm.page-cluster = 0 是理想的。他們還發現高交換值是理想的,這與建議的相匹配內核文件

預設值為 60。例如,如果針對交換設備的隨機 IO 平均比來自檔案系統的 IO 快 2 倍,則交換性應為 133 (x + 2x = 200, 2x = 133.33)。

答案4

當記憶體已滿時,需要將頁面換出(到磁碟)。如果您使用記憶體來創建當記憶體已滿時交換頁面的位置,人們會認為它超出了目的,除非壓縮產生了影響(然後自然地直接壓縮記憶體而不是透過交換)。我想人們必須對此進行基準測試,因為與記憶體速度相比,電腦的壓縮和解壓縮速度越來越快。

相關內容