web-dev-qa-db-ja.com

デフォルトのスワップサイズは?

インストーラーは、作成するスワップパーティションのサイズをどのように計算しますか?おそらく、インストールされているRAMサイズに基づいていますが、それはRAMの量に依存しますか?

16
Seret

実際、デフォルトのUbuntuインストールCDにはdphys-swapfileプログラムはなく、swapサイズの計算には使用されません。

起こるのは、ubiquityインストーラーがpartman-autoスクリプトと構成ファイル(recipesと呼ばれる)を使用してすべてのサイズを決定することですパーティション。それはこのように動作します:

  • Partmanは、コンピューターのタイプとユーザーが選択したオプションに応じて適切なレシピファイルを見つけます。
  • そこで、パーティションの最小サイズと最大サイズ、およびその優先順位を見つけます。 swapの場合、96(最小-MB)512(優先)300%(最大)になります。
  • 次に、RAMサイズを取得します(/proc/meminfo経由)。
  • 独自のアルゴリズムを使用してサイズを計算します。

詳細:

recipeファイルは次のようになります。

1 1 1 free
    $iflabel{ gpt }
    method{ biosgrub } .

500 10000 -1 $default_filesystem
    $lvmok{ }
    method{ format }
    format{ }
    mountpoint{ / } .

96 512 300% linux-swap
    $lvmok{ }
    method{ swap }
    format{ } .

サイズを計算するアルゴリズム:

for(i=1;i<=N;i++) {
   factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
   minsum = min[1] + min[2] + ... + min[N];
   factsum = factor[1] + factor[2] + ... + factor[N];
   ready = TRUE;
   for(i=1;i<=N;i++) {
      x = min[i] + (free_space - minsum) * factor[i] / factsum;
      if (x > max[i])
         x = max[i];
      if (x != min[i]) {
         ready = FALSE;
         min[i] = x;
      }
   }
}

詳しくは:

5
arrange

これはかなり技術的になりますが、見つけるのは楽しかったので、ここに行きます...

  • パッケージdphys-swapfileを見つけました。これは ソースコード です。オプションsetupを使用して設定します。
setup-dphys-swapfileに最適なスワップファイルサイズを計算し、
(再)フィッティングスワップファイルを生成するよう指示します。デフォルトで2倍RAMサイズ。
これはブート時に呼び出すことができるため、ファイルは常に現在のRAMに対して
正しいサイズのままであるか、RAMサイズが
に変更されました。
  • 内部dphys-swapfileは、事前定義されたサイズの設定conf_swapsizeです(Nattyではこれは空です):
強制したいサイズ、デフォルト(空)は2 * RAM 
 CONF_SWAPSIZE =を提供します

およびswapfactor...の設定.

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • 実際のサイズはさらに少し計算されます:

    if ["$ {CONF_SWAPSIZE}" = ""]; then 
    #自動最適サイズの計算
     echo -n "computing size、" 
    #これは物理的なRAMサイズに最も近いようで、約60k不足
     KCORESIZE = "` ls -l/proc/kcore | awk '{print $ 5}' `" 
    #切り捨てられたMBytesがちょうど1つ少なすぎるため、1 [.____を追加します。] MEMSIZE = "` expr "$ {KCORESIZE}"/1048576 + 1` "
    #デフォルト、設定ファイルの上書きなし、swap = 2 * RAM 
     CONF_SWAPSIZE =" `expr" $ { MEMSIZE} "'*'" $ {SWAPFACTOR} "` "
     fi

このパッケージでの計算方法は、/proc/kcoreのサイズに依存し、1048576で除算され、+ 1で切り上げられてから、swapfactorで乗算されます。私のマシンから:

enter image description here

したがって、このシステムのデフォルトは1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytesです。

19
Rinzwind