zramswaponに失敗しました:操作は許可されていません

zramswaponに失敗しました:操作は許可されていません

コアが32のシステムでサービスを有効にしようとすると、zramデバイスの数が26を超えるとサービスは失敗します。さらに、構成ファイルは表示されず、ユーティリティのみが表示され、zramctl直面する問題の明確なオプションはリストされません。

light-18-pro:~ # lsblk
NAME   MAJ:MIN RM    SIZE RO TYPE MOUNTPOINT
sda      8:0    0    300G  0 disk 
├─sda1   8:1    0    500M  0 part /boot/efi
├─sda2   8:2    0     35G  0 part /
├─sda3   8:3    0    1.9G  0 part [SWAP]
├─sda4   8:4    0     10G  0 part /home
└─sda5   8:5    0  223.5G  0 part /data
sr0     11:0    1      4G  0 rom  
zram0  253:0    0 1002.3M  0 disk [SWAP]
zram1  253:1    0 1002.3M  0 disk [SWAP]
zram2  253:2    0 1002.3M  0 disk [SWAP]
zram3  253:3    0 1002.3M  0 disk [SWAP]
zram4  253:4    0 1002.3M  0 disk [SWAP]
zram5  253:5    0 1002.3M  0 disk [SWAP]
zram6  253:6    0 1002.3M  0 disk [SWAP]
zram7  253:7    0 1002.3M  0 disk [SWAP]
zram8  253:8    0 1002.3M  0 disk [SWAP]
zram9  253:9    0 1002.3M  0 disk [SWAP]
zram10 253:10   0 1002.3M  0 disk [SWAP]
zram11 253:11   0 1002.3M  0 disk [SWAP]
zram12 253:12   0 1002.3M  0 disk [SWAP]
zram13 253:13   0 1002.3M  0 disk [SWAP]
zram14 253:14   0 1002.3M  0 disk [SWAP]
zram15 253:15   0 1002.3M  0 disk [SWAP]
zram16 253:16   0 1002.3M  0 disk [SWAP]
zram17 253:17   0 1002.3M  0 disk [SWAP]
zram18 253:18   0 1002.3M  0 disk [SWAP]
zram19 253:19   0 1002.3M  0 disk [SWAP]
zram20 253:20   0 1002.3M  0 disk [SWAP]
zram21 253:21   0 1002.3M  0 disk [SWAP]
zram22 253:22   0 1002.3M  0 disk [SWAP]
zram23 253:23   0 1002.3M  0 disk [SWAP]
zram24 253:24   0 1002.3M  0 disk [SWAP]
zram25 253:25   0 1002.3M  0 disk [SWAP]
zram26 253:26   0 1002.3M  0 disk 
zram27 253:27   0 1002.3M  0 disk 
zram28 253:28   0 1002.3M  0 disk 
zram29 253:29   0 1002.3M  0 disk 
zram30 253:30   0 1002.3M  0 disk 
zram31 253:31   0 1002.3M  0 disk 

エラーメッセージは次のとおりです。

light-18-pro:~ # systemctl status zramswap.service 
● zramswap.service - Service enabling compressing RAM with zRam
   Loaded: loaded (/usr/lib/systemd/system/zramswap.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2021-03-09 09:59:46 CET; 2h 13min ago
  Process: 2048 ExecStart=/usr/sbin/zramswapon (code=exited, status=255)
 Main PID: 2048 (code=exited, status=255)

Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram26: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram27: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram28: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram29: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram30: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro zramswapon[2048]: swapon: /dev/zram31: swapon failed: Operation not permitted
Mar 09 09:59:46 light-18-pro systemd[1]: zramswap.service: Main process exited, code=exited, status=255/n/a
Mar 09 09:59:46 light-18-pro systemd[1]: Failed to start Service enabling compressing RAM with zRam.
Mar 09 09:59:46 light-18-pro systemd[1]: zramswap.service: Unit entered failed state.
Mar 09 09:59:46 light-18-pro systemd[1]: zramswap.service: Failed with result 'exit-code'.

何が問題なのかご存知ですか?どうやって解決しますか?

答え1

swapon(2)システムコールのマニュアルページ説明する:

エラー
EPERM 呼び出し側に CAP_SYS_ADMIN 機能がありません。または、最大スワップファイル数が使用されました。以下の注を参照してください。


使用可能なスワップファイルの数には、カーネル定数MAX_SWAPFILESによって定義される上限があります。カーネル 2.4.10 以前では、MAX_SWAPFILES 値は 8 でした。カーネル2.4.10以降、その値は32です。カーネル2.6.18以降、CONFIG_MIGRATIONオプション(ページ移行機能用に2つのスワップテーブルエントリを予約)mbind(2)とmigration_pages(2)を使用してカーネルを構築した場合、制限は2(30)に減少します。カーネル2.6.32以降、CONFIG_MEMORY_FAILUREオプションを使用してカーネルをビルドした場合、この制限は1ずつ減ります。

したがって、これらのオプションがすべて有効であると仮定すると(カーネル構成の確認)、制限は32 - 2 - 2 - 1 = 27です。出力によると、これは使用しているスワップデバイスの正確な数lsblksda3+ zram0〜)ですzram25。 (なぜ関連するエラーがEPERM、「Permission Denied」なのか、ENFILEや「あまりにも多すぎる」を意味する他のエラーではないのかわかりません。)

カーネルを再コンパイルしてこの制限を増やすことはできますが、私はzramスクリプトを修正して少数のスワップデバイスを作成しました。コアごとに1つのコアを作成するというアイデアは、複数のコアを同時に交換しようとすると競合が発生しないことです。しかし、32個のコアがあれば、一度に交換しようとすると、すでに多くの問題があるように聞こえるので、数字を減らすことはおそらく重要ではないでしょう。もちろん、ベンチマークを実行することもできます。

私が持っているUbuntuシステムでは、生成するデバイスの数をに設定します。/etc/default/zramswapこれらのCORES=4設定は実際の設定スクリプトから読み取られます。これは他のLinuxenでも同様でもそうでない場合もあります。

関連情報