Linux-Kernel

哪個程序(核心執行緒)正在為 zswap 進行實際壓縮?

  • October 17, 2020

我可以想像實際上有兩個位置:

  1. 在屬於正在換入/換出 ram 的程序的核心空間中
  2. [kswapd0]

但是,深入研究 kswapd 原始碼 ( mm/vmscan.c, init/main.c),我可以發現:kswapd 是單執行緒的,並且是在單執行緒上啟動的。(NUMA 系統除外,所有記憶體區域都有不同的 kswapd。但大多數普通 PC 都不是 NUMA 系統。)

但是,從現在開始,我們有一個問題。我們可以假設,磁碟比記憶體慢得多,這就是我們不需要多執行緒 kswapd 來處理磁碟 I/O 的原因。但如果我們還需要使用內部 zswap 層,情況就不是這樣了。特別是從更高的壓縮率(放氣)中,cpu 可以並且很可能會成為瓶頸。

但是kswapd 是單執行緒的。

這是真的嗎?

是否計劃進行任何多執行緒 kswapd?真的需要嗎?


Ps 我在 linux 核心郵件列表中找到了這個執行緒。這是關於一個被拒絕的更新檔建議,什麼可以在非 NUMA 系統上啟用多執行緒 kswapd。他們在談論一切,除了這個 zswap 問題。也許是無關的。

PS2。語境:

  1. 我有一個高度 ram 過度使用的 Linux 系統(程序使用的 ram 比物理上可用的多得多)。
  2. 同時執行的程序數遠低於 CPU 核心數。
  3. 我正在大量使用 zswap。
  4. 在這種環境下,將所有可用的 CPU 核心用於壓縮/解壓縮記憶體頁面將非常有用。我目前最好的估計是頁面壓縮/解壓縮由[kswapd0]單個核心執行緒完成。我正在研究利用所有 CPU 核心進行壓縮/解壓縮的選項。從本質上講,這將是一種轉換剩餘 CPU 容量以彌補物理記憶體不足的方法。

經過大量調查,我想我找到了答案。

實際的壓縮是在[kswapd].

引用執行緒中拒絕郵件的作者表明,負責人至少有一些原因他沒有溝通,但更有可能他根本不知道來自 zswap。

我在我的系統上安裝了更新檔建議。它使kswapd多執行緒,即它可以壓縮所有 CPU 核心上的記憶體。該更新檔的作用就像魅力一樣,並顯著改善了 zswap-ping 環境。

證明:我的系統(記憶體消耗量大的 qemu + pxz 壓縮器)嚴重超載,包括記憶體和 CPU。之後,我在top

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 927 root      20   0   12,3g   3,6g   3612 R 141,8  23,1  36006:53 qemu-system-x86
5017 root      20   0 7607428   4,2g   1580 R  78,4  26,8   2:32.85 pxz
 354 root      20   0       0      0      0 R  53,6   0,0  32:17.28 kswapd0:5
 128 root      20   0       0      0      0 R  45,8   0,0  32:57.42 kswapd0:0
 352 root      20   0       0      0      0 R  40,5   0,0  32:16.80 kswapd0:3
 356 root      20   0       0      0      0 R  36,6   0,0  32:53.58 kswapd0:7
 350 root      20   0       0      0      0 R  35,3   0,0  31:15.53 kswapd0:1
 353 root      20   0       0      0      0 R  35,3   0,0  30:48.00 kswapd0:4
 351 root      20   0       0      0      0 R  28,1   0,0  31:57.45 kswapd0:2
 355 root      20   0       0      0      0 R  27,5   0,0  31:44.12 kswapd0:6

是的,它還意味著以下內容:

  • 多執行緒 kswapd極大地提高了 zswap 性能
  • 它不包含在主線核心中,
  • 是的,很可能是因為無能或害怕不穩定。

我在測試環境中使用的 zswap 參數如下(可以在 中設置/sys/modules/zswap/parameters):

same_filled_pages_enabled:Y
enabled:Y
max_pool_percent:50
compressor:deflate
zpool:z3fold
accept_threshold_percent:90

引用自:https://unix.stackexchange.com/questions/510096