zswapの実際の圧縮を実行するプロセス(カーネルスレッド)は何ですか?

zswapの実際の圧縮を実行するプロセス(カーネルスレッド)は何ですか?

実際には2つの場所を想像できます。

  1. メモリをin/outに交換するプロセスに属するカーネル空間
  2. ~から[kswapd0]

mm/vmscan.cただし、kswapdソースコード(、、)を詳しく見てみると、init/main.ckswapdがシングルスレッドであり、単一スレッドで始まることがわかります。 (NUMAシステムを除くと、すべてのメモリ領域のkswapdが異なりますが、ほとんどの一般的なPCはNUMAシステムではありません。)

しかし、これから問題が発生します。ディスクがメモリよりはるかに遅いと仮定できるため、ディスクI / Oを処理するためにマルチスレッドkswapdは必要ありません。ただし、内部zswapレイヤーも活用する必要がある場合はそうではありません。特に高い圧縮率(収縮)では、CPUがボトルネックを引き起こす可能性が高いです。

しかし、kswapdはシングルスレッドです。

これは本当ですか?

マルチスレッドkswapdを使用する予定ですか?本当に必要ですか?


PS私は見つけたこれLinuxカーネルメーリングリストのスレッド。これは、NUMA以外のシステムでマルチスレッドkswapdを有効にする拒否パッチ提案に関するものです。彼らはこのzswap問題を除くすべてについて話しています。おそらくそれは関係がないかもしれません。

PS2。コンテキスト:

  1. 私は深刻なメモリオーバーコミット(プロセスが物理的に利用可能なメモリよりもはるかに多くのメモリを使用している)を持つLinuxシステムを持っています。
  2. 同時に実行されるプロセスの数は、CPUコアの数よりはるかに少なくなります。
  3. 私はzswapをたくさん使っています。
  4. この環境では、以下を使用します。メモリページの圧縮/圧縮解除に使用されるすべての使用可能なCPUコア。現時点では、ページ圧縮/圧縮解除は[kswapd0]単一のカーネルスレッドによって実行されることが最善の見積もりです。圧縮/圧縮解除のためにすべてのCPUコアを利用するオプションを調査中です。本質的に、これは残りのCPU容量を変換して物理メモリ不足を補う方法です。

ベストアンサー1

多くの調査の終わりに答えを見つけたようです。

実際の圧縮は[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

はい、また、次のことを意味します。

  • マルチスレッドkswapdzswapのパフォーマンスが大幅に向上しました。
  • メインラインカーネルには含まれていません。
  • はい。無能力や不安定の恐れが原因かもしれません。

テスト環境で使用するzswapパラメータは次のとおりです(で設定可能/sys/modules/zswap/parameters)。

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

おすすめ記事