SLUBアロケータ(するぶあろけーた)
最終更新:2026/4/28
SLUBアロケータは、Linuxカーネルで使用されるメモリ割り当て機構であり、スラブ割り当てを効率的に行うことを目的とした。
ポイント
SLUBは、従来のBuddyシステムやSlabアロケータの課題を克服し、メモリ断片化の抑制と高速な割り当て・解放を実現する。
SLUBアロケータとは
SLUB (Simple List Unbuffered) アロケータは、Linuxカーネルにおけるメモリ管理の中核を担う機構の一つです。これは、カーネル内の様々なオブジェクトを動的に割り当てる際に使用され、システムのパフォーマンスと安定性に大きく影響します。
従来のメモリ割り当て機構の課題
Linuxカーネルでは、以前はBuddyシステムやSlabアロケータといったメモリ割り当て機構が使用されていました。Buddyシステムは、メモリを2の累乗サイズのブロックに分割して管理するため、メモリ断片化が発生しやすいという問題がありました。Slabアロケータは、特定のサイズのオブジェクトをまとめて割り当てることで断片化を抑制しましたが、オブジェクトの種類ごとにキャッシュを管理する必要があり、管理 overhead が大きいという課題がありました。
SLUBアロケータの特徴
SLUBアロケータは、これらの課題を克服するために設計されました。主な特徴は以下の通りです。
- スラブ割り当て: 特定のサイズのオブジェクトをまとめて割り当てることで、メモリ断片化を抑制します。
- リストベースの管理: 割り当て可能なオブジェクトをリストとして管理することで、高速な割り当て・解放を実現します。
- キャッシュの統合: オブジェクトの種類ごとにキャッシュを管理するのではなく、複数のキャッシュを統合することで、管理 overhead を削減します。
- ノンブロッキング: 割り当て・解放処理がノンブロッキングであるため、リアルタイム性の高いシステムに適しています。
SLUBアロケータの動作原理
SLUBアロケータは、メモリを「スラブ」と呼ばれる単位で管理します。スラブは、同じサイズのオブジェクトをまとめて割り当てるための領域です。各スラブは、割り当て可能なオブジェクトのリストを保持しており、オブジェクトの割り当て要求があった場合、リストからオブジェクトを取り出して割り当てます。オブジェクトが解放された場合、解放されたオブジェクトはリストに追加されます。
SLUBアロケータの利点
SLUBアロケータは、従来のメモリ割り当て機構と比較して、以下の利点があります。
- 高いパフォーマンス: 高速な割り当て・解放処理により、システムのパフォーマンスを向上させます。
- 低いメモリ断片化: スラブ割り当てにより、メモリ断片化を抑制します。
- 低い管理 overhead: キャッシュの統合により、管理 overhead を削減します。
- 高いスケーラビリティ: マルチプロセッサ環境でのスケーラビリティに優れています。
SLUBアロケータの利用状況
SLUBアロケータは、Linuxカーネルのバージョン2.6.16以降でデフォルトのメモリ割り当て機構として採用されています。