zramswapon 失敗:不允許操作
當我嘗試
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'.
你知道它有什麼問題嗎?如何解決?
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
+zram0
到zram25
)。(我不知道為什麼所涉及的錯誤是 EPERM,“權限被拒絕”,而不是例如 ENFILE 或其他暗示“太多”的東西。)您也許可以通過重新編譯核心來增加該限制,但我只需修改 zram 腳本以創建更少的交換設備。為每個核心創建一個的想法是,如果多個核心想要同時交換,則不會發生爭用。但是……如果你有 32 個核心試圖一次全部交換,這聽起來已經很麻煩了,所以減少數量可能並不重要。當然,您可以執行基準測試。
在我手頭的 Ubuntu 系統上,要創建的設備數量設置在 中
/etc/default/zramswap
,因為CORES=4
該設置由實際的設置腳本讀取,這在其他 Linuxen 中可能相似也可能不相似。