Linux で特定のカーネルメモリアロケータが使用されているかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux で特定のカーネルメモリアロケータが使用されているかどうかを確認する方法を探ります。これを実現するために、アロケータの統計情報、カーネル設定、およびシステムログを調べます。

まず、cat /proc/slabinfo を使用してカーネルのスラブアロケータの統計情報を表示し、メモリ管理に関する洞察を得ます。次に、zcat /proc/config.gz を使用してカーネル設定ファイルを調べることで、使用中のアロケータを確認します。最後に、dmesg のアロケータログを調べて関連情報を取得します。これらの手順により、使用中のカーネルメモリアロケータを識別および確認する方法を理解するのに役立ちます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558906{{"Linux で特定のカーネルメモリアロケータが使用されているかどうかを確認する方法"}} linux/less -.-> lab-558906{{"Linux で特定のカーネルメモリアロケータが使用されているかどうかを確認する方法"}} linux/grep -.-> lab-558906{{"Linux で特定のカーネルメモリアロケータが使用されているかどうかを確認する方法"}} end

cat /proc/slabinfo でアロケータの統計情報を確認する

このステップでは、cat /proc/slabinfo コマンドを使用してアロケータの統計情報を確認する方法を探ります。このコマンドは、メモリを効率的に管理するカーネルのスラブアロケータの詳細な情報を提供します。この情報を理解することは、メモリ関連の問題をデバッグし、システムパフォーマンスを最適化するのに役立ちます。

まず、コマンドを実行しましょう。

cat /proc/slabinfo

このコマンドは、スラブキャッシュのリストとそれに関連する統計情報を表示します。最初は出力が多くて圧倒的に感じるかもしれませんが、分解して説明します。

以下は、表示される内容の例です。

slabinfo - version: 2.1
kmem_cache            48     72    192    19    1    1
...
kmalloc-192           48     72    192    19    1    1
...

各行はスラブキャッシュを表しています。列には、キャッシュに関する情報が提供されています。例えば、

  • name:スラブキャッシュの名前。
  • <active_objs>:キャッシュ内のアクティブなオブジェクトの数。
  • <num_objs>:キャッシュ内のオブジェクトの総数。
  • <objsize>:各オブジェクトのサイズ(バイト)。
  • <objperslab>:スラブあたりのオブジェクトの数。
  • <pagesperslab>:スラブあたりのページの数。
  • <flags>:キャッシュに関連付けられたフラグ。

kmem_cache は汎用キャッシュで、kmalloc-192 はサイズが 192 バイトのオブジェクト用のキャッシュです。

出力をより読みやすくするには、less コマンドを使用できます。

cat /proc/slabinfo | less

これにより、出力をページごとにスクロールできます。q を押すと less を終了します。

また、grep を使用して出力をフィルタリングし、特定のスラブキャッシュに焦点を当てることもできます。例えば、kmalloc-192 キャッシュに関する情報を見つけるには、次のコマンドを使用できます。

cat /proc/slabinfo | grep kmalloc-192

これにより、「kmalloc-192」を含む行のみが表示されます。

cat /proc/slabinfo の出力を調べることで、カーネルがメモリをどのように管理しているかを理解し、最適化の潜在的な領域を特定することができます。

zcat /proc/config.gz でアロケータを確認する

このステップでは、通常圧縮されて /proc/config.gz にあるカーネル設定ファイルを調べることで、アロケータの設定を確認します。このファイルには、メモリ割り当てに関連するものを含む、カーネルをビルドするために使用される設定オプションが含まれています。

まず、zcat コマンドを使用して設定ファイルの内容を解凍して表示しましょう。

zcat /proc/config.gz

zcat コマンドは cat に似ていますが、gzip 形式で圧縮されたファイルを自動的に解凍します。出力は、カーネル設定オプションの長いリストになります。

アロケータ関連のオプションを見つけるには、grep を使用して出力をフィルタリングできます。例えば、スラブアロケータに関連するオプションを見つけるには、次のコマンドを使用できます。

zcat /proc/config.gz | grep SLAB

これにより、「SLAB」を含む行が表示されます。次のような内容が表示されるかもしれません。

CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set

これらのオプションは、カーネルでどのスラブアロケータが有効になっているかを示しています。CONFIG_SLAB=y は、元のスラブアロケータが有効になっていることを示し、CONFIG_SLUB=y は、SLUB アロケータが有効になっていることを示します。これらのうちの 1 つだけが有効になっているはずです。CONFIG_SLOB は、組み込みシステム用の簡易アロケータです。

また、ページアロケータやバディシステムに関連するオプションなど、他のアロケータ関連のオプションを検索することもできます。例えば:

zcat /proc/config.gz | grep PAGE_ALLOC

これにより、ページ割り当てに関連するオプションが表示されます。

カーネル設定ファイルを調べることで、どのアロケータが使用されているか、およびどのオプションが有効になっているかを確認できます。これは、システムのメモリ管理動作を理解するのに役立ちます。

dmesg でアロケータのログを調査する

このステップでは、dmesg コマンドを使用してカーネルのメッセージバッファを調査し、メモリアロケータに関連するログを探します。dmesg コマンドは、カーネルのリングバッファからメッセージを表示します。このバッファには、メモリの割り当てや解放を含むシステムイベントに関する貴重な情報が含まれていることがあります。

カーネルメッセージを表示するには、次のように入力します。

dmesg

これにより大量のテキストが出力されます。出力をフィルタリングしてアロケータ関連のメッセージに焦点を当てるには、grep を使用できます。例えば、スラブアロケータに関連するメッセージを見つけるには、次のコマンドを使用します。

dmesg | grep slab

次のような出力が表示されることがあります。

[    0.000000] SLUB: HWalign slab flags
[    1.234567] kmem_cache_create: slab created at <memory_address>

これらのメッセージは、スラブキャッシュの作成、破棄、その他のイベントに関する情報を提供することができます。

また、メモリ割り当て失敗に関連するメッセージを検索することもできます。

dmesg | grep alloc

あるいは、メモリ不足 (OOM) 状況に関連するメッセージを検索することもできます。

dmesg | grep OOM

これらのメッセージは、メモリ関連の問題を診断するのに役立ちます。

出力をより管理しやすくするために、less を使用してメッセージをスクロールすることができます。

dmesg | less

q を押すと less を終了します。

dmesg の出力を調べることで、メモリアロケータの動作を理解し、潜在的な問題を特定することができます。

まとめ

この実験では、cat /proc/slabinfo コマンドを使用してカーネルのメモリアロケータの統計情報を確認する方法を調べました。このコマンドは、カーネルのスラブアロケータの詳細な情報を提供し、スラブキャッシュのリストとそれに関連する統計情報を表示します。これには、キャッシュ名、アクティブなオブジェクトと総オブジェクトの数、オブジェクトのサイズ、スラブあたりのオブジェクト数、スラブあたりのページ数、およびフラグが含まれます。

また、出力をより読みやすくするために less を使用する方法と、特定のスラブキャッシュ(例えば kmalloc - 192)に焦点を当てるために grep を使用して出力をフィルタリングする方法も学びました。出力を調べることで、カーネルがメモリをどのように管理しているかを理解することができます。