あなたの質問に答えるために、まず一連の実験を行いました。最終回答は最後に太字で表示されます。

あなたの質問に答えるために、まず一連の実験を行いました。最終回答は最後に太字で表示されます。

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システムよりも常に優れたパフォーマンスを発揮します。)swappinesszswapzswapmax_pool_percent
  • 過度のディスク読み取りが原因でシステムが利用できないほど残っているページキャッシュの量が少なすぎるまで、値が低いほどswappinessシステムパフォーマンスが向上するようです。高すぎるに似ていますmax_pool_percent
  • スワップを使用しzramてメモリに保持する必要がある匿名ページの数を制限するか、デフォルトでzswapディスクサポートスワップを使用してください。swappinessmax_pool_percent

編集:質問の詳細に答えるための今後の努力は、特定のユースケースzsmallocで使用されたアロケータがzram圧縮の観点から使用されたアロケータとどのようにzbud比較されるかを調べることですzswap。しかし、私はそうしません。文書/インターネットで何を検索するかを指摘するだけです。

編集2: echo "zsmalloc" > /sys/module/zswap/parameters/zpoolzswapのアロケータをからに切り替えましたzbudzsmalloc上記の実験のテスト設定を続けて+zramzswap比較するzsmallocと、必要なスワップメモリ​​がzramswapまたはにzswap等しい限りmax_pool_percent、ディスクの読み書き量が2人は非常に似ています。 。事実に基づいて、私は個人的に必要なスワップの量がzram実際にRAMに保持できるスワップの量よりも少ない場合、必要なスワップの量が私が望む量を超える場合は単独でzram進む方が良いと思います。実際にRAMに保存できる場合は、ワークロードを変更してこれを回避するか、スワップと使用を無効にし、zramが以前にメモリに費やしたのと同じ値(*圧縮率のサイズ)に設定することをお勧めしzramます。しかし、現在、これらの追加テストを正しく書く時間はありません。zramzswapzsmallocmax_pool_percentzram

おすすめ記事