zramの使用の最大の欠点はLRU反転:
古いページは優先順位の高い zram に移動してすばやく埋められますが、新しいページはスロースワップからスワップイン/アウトされます [...]
これzswap ドキュメントzswapはこの問題の影響を受けないと言います。
ZswapはFrontswap APIを介して圧縮するページを受信し、LRUベースの独自の圧縮プールからページを削除し、圧縮プールがいっぱいになるとバックアップスワップデバイスに書き換えることができます。
max_pool_percent
に設定すると、zramと完全に圧縮されたRAMのすべての利点が得られますか100
?
Zswap seeks to be simple in its policies. Sysfs attributes allow for one user controlled policy: * max_pool_percent - The maximum percentage of memory that the compressed pool can occupy.
ここではmax_pool_percent
デフォルト値は指定されていませんが、アーチウィキページだと答えてください20
。
解凍がパフォーマンスに与える影響に加えて、max_pool_percent
これをに設定すると、どのようなリスク/欠点がありますか100
?
改善されたスワップサポートによってzramのように動作しますか?
答え1
あなたの質問に答えるために、まず一連の実験を行いました。最終回答は最後に太字で表示されます。
行われた実験:
1) swap file, zswap disabled
2) swap file, zswap enabled, max_pool_percent = 20
3) swap file, zswap enabled, max_pool_percent = 70
4) swap file, zswap enabled, max_pool_percent = 100
5) zram swap, zswap disabled
6) zram swap, zswap enabled, max_pool_percent = 20
7) no swap
8) swap file, zswap enabled, max_pool_percent = 1
9) swap file (300 M), zswap enabled, max_pool_percent = 100
事前実験設定:
- バーチャルボックス 5.1.30
- Fedora 27、xfceスピン
- 512MB RAM、16MBビデオRAM、CPU 2個
- Linuxカーネル4.13.13-300.fc27.x86_64
- デフォルト
swappiness
(60) - 一部のラップで使用できるように空の512MBスワップファイル(ラップ9では300MB)を作成しましたが、
dd
まだ作成していません。swapon
- すべてのdnf * systemdサービスを無効にし、
watch "killall -9 dnf"
dnfが実験中に自動更新またはその他の操作を試み、結果をあまり歪めないように実行します。
実験前のガイドライン:
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 280 72 8 132 153
Swap: 511 0 511
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 74624 8648 127180 0 0 1377 526 275 428 3 2 94 1 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 102430 688 3593850 67603 3351 8000 1373336 17275 0 26
sr0 0 0 0 0 0 0 0 0 0 0
その後の交換操作などにより、実験中に異なる設定が発生し、これらの値に約2%以内の差が生じました。
実験作業には以下が含まれます。
- 初めてFirefoxを実行してみてください
- 約40秒間、またはネットワークとディスクのアクティビティが停止するまで(どちらか長い時間)待ちます。
- 実験後、次の状態を記録します(firefoxがクラッシュしている実験7と9を除いて、Firefoxは引き続き実行されます)。
実験後の状態:
1)スワップファイル、zswapを無効にする
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 287 5 63 192 97
Swap: 511 249 262
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 255488 5904 1892 195428 63 237 1729 743 335 492 3 2 93 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 134680 10706 4848594 95687 5127 91447 2084176 26205 0 38
sr0 0 0 0 0 0 0 0 0 0 0
2) ファイル交換、zswap 有効、max_pool_percent = 20
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 330 6 33 148 73
Swap: 511 317 194
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 325376 7436 756 151144 3 110 1793 609 344 477 3 2 93 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 136046 1320 5150874 117469 10024 41988 1749440 53395 0 40
sr0 0 0 0 0 0 0 0 0 0 0
3) ファイル交換、zswap 有効、max_pool_percent = 70
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 342 8 32 134 58
Swap: 511 393 118
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 403208 8116 1088 137180 4 8 3538 474 467 538 3 3 91 3 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 224321 1414 10910442 220138 7535 9571 1461088 42931 0 60
sr0 0 0 0 0 0 0 0 0 0 0
4) ファイル交換、zswap 有効、max_pool_percent = 100
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 345 10 32 129 56
Swap: 511 410 101
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 420712 10916 2316 130520 1 11 3660 492 478 549 3 4 91 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 221920 1214 10922082 169369 8445 9570 1468552 28488 0 56
sr0 0 0 0 0 0 0 0 0 0 0
5)zramスワップ、zswapを無効にする
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 333 4 34 147 72
Swap: 499 314 185
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 324128 7256 1192 149444 153 365 1658 471 326 457 3 2 93 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 130703 884 5047298 112889 4197 9517 1433832 21037 0 37
sr0 0 0 0 0 0 0 0 0 0 0
zram0 58673 0 469384 271 138745 0 1109960 927 0 1
6) zram スワップ、zswap イネーブル、max_pool_percent = 20
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 338 5 32 141 65
Swap: 499 355 144
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 364984 7584 904 143572 33 166 2052 437 354 457 3 3 93 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 166168 998 6751610 120911 4383 9543 1436080 18916 0 42
sr0 0 0 0 0 0 0 0 0 0 0
zram0 13819 0 110552 78 68164 0 545312 398 0 0
7) 交換不可
この統計が記録された時点で、実験中にFirefoxは実行されていませんでした。
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 289 68 8 127 143
Swap: 0 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 70108 10660 119976 0 0 13503 286 607 618 2 5 88 5 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 748978 3511 66775042 595064 4263 9334 1413728 23421 0 164
sr0 0 0 0 0 0 0 0 0 0 0
8) ファイル交換、zswap 有効、max_pool_percent=1
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 292 7 63 186 90
Swap: 511 249 262
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 255488 7088 2156 188688 43 182 1417 606 298 432 3 2 94 2 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 132222 9573 4796802 114450 10171 77607 2050032 137961 0 41
sr0 0 0 0 0 0 0 0 0 0 0
9) スワップファイル(300M)、zswap 有効、max_pool_percent = 100
Firefox がハングしており、システムはまだディスクからデータを読み込んでいます。この実験の基準は、新しいスワップファイルが作成されたために異なります。
total used free shared buff/cache available
Mem: 485 280 8 8 196 153
Swap: 299 0 299
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 8948 3400 198064 0 0 1186 653 249 388 2 2 95 1 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 103099 688 3610794 68253 3837 8084 1988936 20306 0 27
sr0 0 0 0 0 0 0 0 0 0 0
特に、この変更により649384個のセクタが追加されました。
実験後の状態:
[root@user-vm user]# free -m ; vmstat ; vmstat -d
total used free shared buff/cache available
Mem: 485 335 32 47 118 53
Swap: 299 277 22
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
7 1 283540 22912 2712 129132 0 0 83166 414 2387 1951 2 23 62 13 0
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 3416602 26605 406297938 4710584 4670 9025 2022272 33805 0 521
sr0 0 0 0 0 0 0 0 0 0 0
2022272から追加の書き込みセクタ649384を減算すると、1372888になります。これは1433000(以下を参照)より小さいです。これはFirefoxが完全にロードされていないためです。
また、低い値(10と1)でいくつかの実験を実行しましたが、swappiness
どちらもディスクの読み取りが多すぎて最終的なメモリ統計を記録できなくなりました。
観察結果:
- 主観的に高い
max_pool_percent
価値は不振を引き起こします。 - 主観的に、実験9のシステムは遅すぎて有用ではなかった。
- 値が高いと
max_pool_percent
書き込みが最も少なくなり、値が非常に低いと書き込みがmax_pool_percent
最も発生します。 - 実験5と6(zramスワッピング)は、Firefoxが約62,000個のセクタがディスクに書き込まれるデータを記録することを示しています。 1433000以上のすべてのセクターは交換のために記録されました。下の表を参照してください。
- 実験の最低読み出しセクタ数に基づいて仮定すると、スワッピングに起因する追加の読み出しセクタ数に関して実験を比較することができる。
スワッピングによって直接作成された作成されたセクタ(およそ):
650000 1) swap file, zswap disabled
320000 2) swap file, zswap enabled, max_pool_percent = 20
30000 3) swap file, zswap enabled, max_pool_percent = 70
40000 4) swap file, zswap enabled, max_pool_percent = 100
0 5) zram swap, zswap disabled
0 6) zram swap, zswap enabled, max_pool_percent = 20
-20000 7) no swap (firefox crashed)
620000 8) swap file, zswap enabled, max_pool_percent = 1
-60000 9) swap file (300 M), zswap enabled, max_pool_percent = 100 (firefox crashed)
スワッピングの直接結果として読み取られる追加のセクタ(およそ):
51792 1) swap file, zswap disabled
354072 2) swap file, zswap enabled, max_pool_percent = 20
6113640 3) swap file, zswap enabled, max_pool_percent = 70
6125280 4) swap file, zswap enabled, max_pool_percent = 100
250496 5) zram swap, zswap disabled
1954808 6) zram swap, zswap enabled, max_pool_percent = 20
61978240 7) no swap
0 (baseline) 8) swap file, zswap enabled, max_pool_percent = 1
401501136 9) swap file (300 M), zswap enabled, max_pool_percent = 100
結果の解釈:
- これは、現在のユースケースに基づいて主観的で具体的です。他のユースケースでは動作が異なります。
- Zswapのページプールは、システムページキャッシュ(ファイルサポートページの場合)で使用できるRAMスペースを占有します。つまり、システムはファイルサポートページを繰り返し削除し、必要に応じて再読み込みすることで読み取りが多すぎます。 。
- ラボ7の過度の読み取りは、同じ問題が原因で発生しました。システムの匿名ページがRAMの大部分を占め、ファイルサポートページをディスクから繰り返し読み取る必要がありました。
- 場合によっては、スワップディスクに書き込まれるデータの量をゼロに近づけることで最小限に抑えることができます
zswap
が、確かにこれには適していません。 - ありえない」完全に圧縮されたRAMシステムが機能するには、RAMにある数のスワップされていないページが必要です。
個人的な意見と逸話:
- ディスク書き込み時のzswapの主な改善点は、ページを圧縮するのではなく、ページキャッシュを減らし、より多くの匿名ページ(圧縮形式)をRAMに効果的に維持する独自のバッファリングおよびキャッシュシステムがあることです。 (しかし、毎日のLinuxを使用した主観的な経験によると、スワップとデフォルト値を
zswap
持つswappiness
システムは、値がない、高い、または値が高いmax_pool_percent
システムよりも常に優れたパフォーマンスを発揮します。)swappiness
zswap
zswap
max_pool_percent
- 過度のディスク読み取りが原因でシステムが利用できないほど残っているページキャッシュの量が少なすぎるまで、値が低いほど
swappiness
システムパフォーマンスが向上するようです。高すぎるに似ていますmax_pool_percent
。 - スワップを使用し
zram
てメモリに保持する必要がある匿名ページの数を制限するか、デフォルトでzswap
ディスクサポートスワップを使用してください。swappiness
max_pool_percent
編集:質問の詳細に答えるための今後の努力は、特定のユースケースzsmalloc
で使用されたアロケータがzram
圧縮の観点から使用されたアロケータとどのようにzbud
比較されるかを調べることですzswap
。しかし、私はそうしません。文書/インターネットで何を検索するかを指摘するだけです。
編集2:
echo "zsmalloc" > /sys/module/zswap/parameters/zpool
zswapのアロケータをからに切り替えましたzbud
。zsmalloc
上記の実験のテスト設定を続けて+zram
とzswap
比較するzsmalloc
と、必要なスワップメモリがzram
swapまたはにzswap
等しい限りmax_pool_percent
、ディスクの読み書き量が2人は非常に似ています。 。事実に基づいて、私は個人的に必要なスワップの量がzram
実際にRAMに保持できるスワップの量よりも少ない場合、必要なスワップの量が私が望む量を超える場合は単独でzram
進む方が良いと思います。実際にRAMに保存できる場合は、ワークロードを変更してこれを回避するか、スワップと使用を無効にし、zramが以前にメモリに費やしたのと同じ値(*圧縮率のサイズ)に設定することをお勧めしzram
ます。しかし、現在、これらの追加テストを正しく書く時間はありません。zram
zswap
zsmalloc
max_pool_percent
zram