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 옵션(페이지 마이그레이션 기능을 위해 두 개의 스왑 테이블 항목 예약) mbind(2) 및 migration_pages(2))을 사용하여 커널을 빌드한 경우 제한이 2(30)로 줄어듭니다. 커널 2.6.32부터 CONFIG_MEMORY_FAILURE 옵션을 사용하여 커널을 빌드한 경우 이 제한은 1씩 더 줄어듭니다.

따라서 이러한 옵션이 모두 활성화되어 있다고 가정하면(커널 구성 확인) 제한은 32 - 2 - 2 - 1 = 27입니다. 출력에 따르면 이는 사용 중인 스왑 장치의 정확한 수 lsblk( sda3+ zram0~ ) 입니다 zram25. (왜 관련된 오류가 EPERM, "Permission Denied"인지, ENFILE이나 "너무 많음"을 의미하는 다른 오류가 아닌지 모르겠습니다.)

커널을 다시 컴파일하여 이 제한을 늘릴 수 있지만 저는 방금 zram 스크립트를 수정하여 더 적은 수의 스왑 장치를 만들었습니다. 코어당 하나의 코어를 생성한다는 아이디어는 여러 코어를 동시에 교체하려는 경우 경합이 발생하지 않는다는 것입니다. 하지만... 32개의 코어가 있으면 한꺼번에 교체하려고 하면 이미 많은 문제가 있는 것처럼 들리므로 숫자를 줄이는 것은 아마도 중요하지 않을 것입니다. 물론 벤치마크를 실행할 수도 있습니다.

내가 가지고 있는 Ubuntu 시스템에서는 생성할 장치 수를 에 설정합니다. /etc/default/zramswap해당 CORES=4설정은 실제 설정 스크립트에서 읽혀지는데, 이는 다른 Linuxen에서도 유사할 수도 있고 그렇지 않을 수도 있습니다.

관련 정보