제한된 수의 스왑 파일만 가질 수 있는 이유는 무엇입니까?

제한된 수의 스왑 파일만 가질 수 있는 이유는 무엇입니까?

이것은 이론적인 질문입니다.

스왑 파일/파티션을 29개만 가질 수 있는 이유는 무엇입니까?

10,000개의 1MB 스왑 파일을 생성하고 스왑하려는 경우 swapon: /tmp/swap29: swapon failed: Operation not allowed를 사용하여 30개의 스왑 파일에서 실패합니다.

이를 달성하기 위한 스크립트

#!/bin/bash
i=0
SWAP=/tmp/swap

while [ "$i" -lt 10000 ];do
    dd if=/dev/urandom of=$SWAP$i bs=1M count=1
    mkswap "${SWAP}${i}"
    swapon "${SWAP}${i}"
    i=$((i+1))
done

누군가 이것을 설명할 수 있나요?

답변1

일반 영어로:

커널은 스왑 파일/파티션을 추적해야 하며 이를 테이블에서 수행합니다. 각 항목은 미리 할당된 소량의 메모리를 차지합니다. 따라서 합리적인 한도를 초과하는 기본 한도(최대 스왑 테이블 크기)가 선택됩니다.

정말로 더 많은 기능이 필요한 사람은 누구나 커널을 수정하고 다시 컴파일할 수 있습니다.

답변2

대답은 여기에서 찾을 수 있습니다:https://www.kernel.org/doc/gorman/html/understand/understand014.html

"...MAX_SWAPFILES를 포함하는 swap_info라는 선언된 배열은 32개의 항목을 갖도록 정적으로 정의됩니다. 이는 실행 중인 시스템에 최대 32개의 스왑 영역이 존재할 수 있음을 의미합니다."

이 링크의 11.2장에는 제가 알고 싶었던 것보다 훨씬 더 많은 정보가 있습니다.

관련 정보