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


16

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


RAMの量に依存するデフォルト値はありません。
ウリヘレラ

1
はい、そうですが、「依存する」よりも少し詳細を探していました。常にRAMサイズの倍数に設定されていますか、それともRAMの量に依存しますか?たとえば、大きなRAMサイズでは休止状態を有効にするのに十分なサイズを必要とすることはありませんが、非常に小さなRAMサイズでは1:1よりもかなり大きいスワップの恩恵を受けることができます。
Seret

回答:


5

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

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

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

詳細:

レシピファイルには、次のようになります。

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;
      }
   }
}

詳しくは:


興味深い議論:奇妙なdebianウェブサイトよりも良いリファレンスですか?
-enzotib

まあ、私はそれを検索したときにもそれを見つけましたが、パッケージには「警告:このパッケージはdebian-installerイメージの構築のみを目的としています。通常のUbuntuシステムにはインストールしないでください。」これは使用されていないと思ったので、検索してdphys-swapfile>:-Dのコードを見つけました。
-Rinzwind

@enzotib:なぜ奇妙なのですか?
手配

@arrange:奇妙なのは、公式のubuntuサイトではなく、debianサイトとしても公式サイトではないようです。
-enzotib

スワップサイズDの計算でさらに2つの方法を見つけました。この方法はgrep ^ Memを使用します。 300%)アーキテクチャごとに最小。mipsel-sb1-bcm91250aは固定512を使用します。i386-efiは200%を使用します。
-Rinzwind

19

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

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

との設定swapfactor...

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

    if ["$ {CONF_SWAPSIZE}" = ""]; それから
      #自動最適サイズを計算
      echo -n "計算サイズ"
      #これは物理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/kcore1048576で除算され、+ 1で切り上げられてから、swapfactorで乗算されます。私のマシンから:

ここに画像の説明を入力してください

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.