
実際には2つの場所を想像できます。
- メモリをin/outに交換するプロセスに属するカーネル空間
- ~から
[kswapd0]
mm/vmscan.c
ただし、kswapdソースコード(、、)を詳しく見てみると、init/main.c
kswapdがシングルスレッドであり、単一スレッドで始まることがわかります。 (NUMAシステムを除くと、すべてのメモリ領域のkswapdが異なりますが、ほとんどの一般的なPCはNUMAシステムではありません。)
しかし、これから問題が発生します。ディスクがメモリよりはるかに遅いと仮定できるため、ディスクI / Oを処理するためにマルチスレッドkswapdは必要ありません。ただし、内部zswapレイヤーも活用する必要がある場合はそうではありません。特に高い圧縮率(収縮)では、CPUがボトルネックを引き起こす可能性が高いです。
しかし、kswapdはシングルスレッドです。
これは本当ですか?
マルチスレッドkswapdを使用する予定ですか?本当に必要ですか?
PS私は見つけたこれLinuxカーネルメーリングリストのスレッド。これは、NUMA以外のシステムでマルチスレッドkswapdを有効にする拒否パッチ提案に関するものです。彼らはこのzswap問題を除くすべてについて話しています。おそらくそれは関係がないかもしれません。
PS2。コンテキスト:
- 私は深刻なメモリオーバーコミット(プロセスが物理的に利用可能なメモリよりもはるかに多くのメモリを使用している)を持つLinuxシステムを持っています。
- 同時に実行されるプロセスの数は、CPUコアの数よりはるかに少なくなります。
- 私はzswapをたくさん使っています。
- この環境では、以下を使用します。メモリページの圧縮/圧縮解除に使用されるすべての使用可能な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