Linux

zramswapon 失敗:不允許操作

  • March 9, 2021

當我嘗試zram在具有 32 個核心的機器上啟用該服務時,當設備數量大於 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'.

你知道它有什麼問題嗎?如何解決?

swapon(2)系統呼叫的手冊頁說:

ERRORS

EPERM 呼叫者沒有 CAP_SYS_ADMIN 能力。或者,已使用最大數量的交換文件;請參閱下面的註釋。

注意

可以使用的交換文件數量有一個上限,由核心常量 MAX_SWAPFILES 定義。在核心 2.4.10 之前,MAX_SWAPFILES 的值為 8;從核心 2.4.10 開始,它的值為 32。從核心 2.6.18 開始,如果核心是使用 CONFIG_MIGRATION 選項建構的(為頁面遷移功能保留兩個交換錶條目),則限制減少 2(因此:30) mbind(2) 和 migrate_pages(2))。從核心 2.6.32 開始,如果核心是使用 CONFIG_MEMORY_FAILURE 選項建構的,則限制會進一步減少 1。

因此,假設所有這些選項都已啟用(檢查您的核心配置),限制為 32 - 2 - 2 - 1 = 27。這恰好是您使用的交換設備的確切數量,基於lsblk輸出(sda3+zram0zram25)。(我不知道為什麼所涉及的錯誤是 EPERM,“權限被拒絕”,而不是例如 ENFILE 或其他暗示“太多”的東西。)

您也許可以通過重新編譯核心來增加該限制,但我只需修改 zram 腳本以創建更少的交換設備。為每個核心創建一個的想法是,如果多個核心想要同時交換,則不會發生爭用。但是……如果你有 32 個核心試圖一次全部交換,這聽起來已經很麻煩了,所以減少數量可能並不重要。當然,您可以執行基準測試。

在我手頭的 Ubuntu 系統上,要創建的設備數量設置在 中/etc/default/zramswap,因為CORES=4該設置由實際的設置腳本讀取,這在其他 Linuxen 中可能相似也可能不相似。

引用自:https://unix.stackexchange.com/questions/638354