限られた数のスワップファイルしか持てないのはなぜですか?

限られた数のスワップファイルしか持てないのはなぜですか?

これは理論的な質問です。

スワップファイル/パーティションを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章には、私が知りたかったよりもはるかに多くの情報があります。

関連情報