Linuxカーネルのメモリアロケータの選択を決定するのに役立つ要因は何ですか?
現在のLinuxカーネルでは、SLAB、SLUB、またはSLOBを選択するオプションがあります。フットプリントの小さいカーネルにSLOBが使用されていることを読みました。しかし、スラブアロケーターとスラブアロケーターのどちらを選ぶかを決めるのに役立つ要因を知りたいです。
Linuxカーネルのメモリアロケータの選択を決定するのに役立つ要因は何ですか?
現在のLinuxカーネルでは、SLAB、SLUB、またはSLOBを選択するオプションがあります。フットプリントの小さいカーネルにSLOBが使用されていることを読みました。しかし、スラブアロケーターとスラブアロケーターのどちらを選ぶかを決めるのに役立つ要因を知りたいです。
答えを求めて、私は Quora に同じ質問を投稿し、Robert Love がそれに答えました。
システムのユーザー、またはおそらく特定の製品のカーネルを構築している誰かの観点からこれを尋ねていると思います。カーネル開発者として、どの「スラブ」アロケーターが使用されているかは気にしません。API は同じです。
まず、「スラブ」は、カーネル オブジェクトの効率的な割り当てと解放を可能にする、オブジェクト キャッシュを使用するメモリ割り当て戦略を指す一般的な名前になりました。Sun のエンジニア Jeff Bonwick 1によって最初に文書化され、Solaris 2.4 カーネルに実装されました。
Linux は現在、「スラブ」アロケーターに 3 つの選択肢を提供しています。
Slab はオリジナルで、Bonwick の影響力のある論文に基づいており、Linux カーネル バージョン 2.2 以降で利用できます。これは、Bonwick の提案を忠実に実装したものであり、Bonwick のフォローアップ ペーパー2で説明されているマルチプロセッサの変更によって強化されています。
Slub は次世代の代替メモリ アロケータであり、2.6.23 以降の Linux カーネルのデフォルトです。基本的な「スラブ」モデルを引き続き採用していますが、特に多数のプロセッサを搭載したシステムの周りで、スラブの設計のいくつかの欠陥が修正されています。Slab は Slab より単純です。
SLOB (Simple List Of Blocks) は、メモリが非常に少ない (メガバイト単位) 組み込みシステム向けに最適化されたメモリ アロケータです。これは、古い K&R スタイルのヒープ アロケーターとは異なり、ブロックのリストに非常に単純なファースト フィット アルゴリズムを適用します。SLOB は、メモリ アロケータからほぼすべてのオーバーヘッドを排除する点で、極端なメモリ制約下にあるシステムに適していますが、1で説明した利点がまったくなく、異常な断片化が発生する可能性があります。
何を使うべきですか?メモリが限られている組み込みデバイス用のカーネルを構築している場合を除き、スラブ。その場合、Slob と SLOB のベンチマークを行い、ワークロードに最適なものを確認します。Slab を使用する理由はありません。将来の Linux カーネル リリースから削除される可能性があります。
元の応答については、このリンクを参照してください。