2010年8月4日水曜日

Linux起動直後のメモリーアロケータの変遷

起動直後に使われる、いわゆるearly allocatorに変更が相次いでいるようなので、個人的な備忘録としてまとめてみた。



Linuxカーネルではメモリー確保にbuddyアロケータを使用している。しかしこれが利用できない起動直後には、段階に応じていくつかの異なる仕組みでメモリーを確保するようになっている。x86アーキテクチャでは、時間経過の順に次のようなものが使われる。


  1. extend_brk()

  2. reserve_early*()関数群

  3. bootmemアロケータ

  4. buddyアロケータ

カーネル2.6.34になって「CONFIG_NO_BOOTMEM」というオプションが用意された(LWNの記事「The NO_BOOTMEM patches」)。これを有効にすると、bootmemアロケータの代わりにreserve_early*()関数群が使われるようになり、bootmemアロケータが不要になる。デフォルトでCONFIG_NO_BOOTMEM=yとなっているので、カーネル2.6.34以降のx86環境では、(設定を変えない限り)bootmemアロケータは使用されない。


これでかなりシンプルになったが、reserve_early*()関数群はx86専用コードで、これを保守し続けるのは効率が悪い。代わりに汎用初期アロケータの「LMB(Logical Memory Block)アロケータ」 をx86でも使うようにしよう……というのが、最近の動き(LWNの記事「Moving x86 to LMB」)。カーネル2.6.35にこそ間に合わなかったものの、このまま大きな問題が出なければカーネル2.6.36でマージされるはずだ。もっともNO_BOOTMEMもなかなかバグが取れずに一悶着あったわけだから、どうなるかは分からない。


(追記)図の言葉の選択ミスを修正。「未使用」→「非使用」→「不使用」。


2 件のコメント:

るるっち さんのコメント...

「非使用」にピンと来ず(自分が使うなら「不使用」かな)、"非使用"でググってみました。
検索結果をパっと見るに技術関連の記述が多い印象ですが、技術用語でしょうかね。
もしかして訳語かな?ATOK2005(古い)デフォルトでは変換候補に出ないですね。

「非使用人」というと、「わたしが好きでご奉仕してるんだもん!」とか幼女が言ってる光景が浮かんできます(病気か)。

#文章内容と関係無くてすみません^^;

sueyasu さんのコメント...

修正したときは「非使用」の方がしっくり来たんですよね。末尾に「状態」をくっつけて「使用状態」「使用状態に非ず」という感じで…
でも確かに日本語としては「不使用」が一般的ですよねぇ……指摘されてみると。「不使用状態」でも違和感ないですしね
「非」の方がカチッと意味をON/OFFできるような気がしたんだが、気のせいだったぜ!という感じですね。技術関連で多いのもそういう雰囲気があるせいかもしれません
いずれにしても再修正しておきます。どうもです
非使用人については「病院行け」としか言えません(笑)