Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

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

はじめに

この実験では、Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法を学びます。カーネルのメモリ管理を調査するさまざまな方法を探索し、特にスラブアロケータに焦点を当てます。

この実験では、/proc/slabinfo を使用してスラブ統計を確認し、sysctl vm で関連する設定を検証し、dmesg の関連ログを調査する手順を案内します。これらの手順により、カーネルスラブの動作を理解し、トラブルシューティングするために必要なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558759{{"Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法"}} linux/cat -.-> lab-558759{{"Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法"}} linux/grep -.-> lab-558759{{"Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法"}} linux/env -.-> lab-558759{{"Linux で特定のカーネルスラブ設定が有効かどうかを確認する方法"}} end

cat /proc/slabinfo でスラブ統計を確認する

このステップでは、/proc/slabinfo ファイルを使用してカーネルのスラブアロケータの統計情報を調査する方法を学びます。スラブアロケータは、Linux カーネルが小さなオブジェクトを効率的に管理するために使用するメモリ管理メカニズムです。スラブの使用状況を理解することは、メモリ関連の問題を診断するのに役立ちます。

/proc ファイルシステムは、プロセスに関する情報やその他のシステム情報を提供する仮想ファイルシステムです。/proc/slabinfo には、カーネルのスラブキャッシュに関する詳細が含まれています。

/proc/slabinfo の内容を表示するには、cat コマンドを使用します。cat は、ファイルを順次読み取り、標準出力に書き出す標準的な Unix ユーティリティです。

ターミナルが開いていない場合は、開きます。デスクトップの左側にある Xfce Terminal アイコンをクリックすることで、ターミナルを開くことができます。

次に、以下のコマンドを入力して Enter キーを押します。

cat /proc/slabinfo

以下のような出力が表示されます(正確な内容はシステムのアクティビティによって異なります)。

slabinfo - version: 2.1
## name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect      0      0    128   63    1 : tunables    0    0    0 : slabdata      0      0      0
nf_conntrack      10     10    320   25    2 : tunables    0    0    0 : slabdata      1      1      0
request_sock_TCP      0      0    192   42    1 : tunables    0    0    0 : slabdata      0      0      0
... (many more lines)

出力を分解して説明します。

  • name:スラブキャッシュの名前(例:nf_conntrackrequest_sock_TCP)。
  • <active_objs>:このキャッシュで現在使用中のオブジェクトの数。
  • <num_objs>:このキャッシュで割り当てられたオブジェクトの総数。
  • :各オブジェクトのサイズ(バイト)。
  • :1 つのスラブに収まるオブジェクトの数。
  • :1 つのスラブで使用されるメモリページの数。
  • tunables:このキャッシュに対して調整可能なパラメータ。
  • slabdata:スラブ自体に関する情報。

この出力は、カーネルがさまざまな内部データ構造にメモリをどのように使用しているかのスナップショットを提供します。生の出力は膨大な場合がありますが、高度な Linux のトラブルシューティングにとって基本的な情報源です。

スラブアロケータの統計情報を正常に表示しました。Continue をクリックして次のステップに進みます。

sysctl vm でスラブ設定を検証する

このステップでは、sysctl コマンドを使用して、仮想メモリとスラブアロケータに関連するカーネルパラメータを調査します。sysctl は、実行時にカーネルパラメータを表示および変更できるユーティリティです。

カーネルパラメータは、Linux カーネルの動作に影響を与える設定オプションです。これらのパラメータの多くは /proc/sys ファイルシステムにあります。sysctl は、/proc/sys 内のファイルと直接やり取りすることなく、これらのパラメータにアクセスし管理する便利な方法を提供します。

私たちは、仮想メモリに関連するパラメータに興味があります。これらには、メモリ管理に影響を与える設定が含まれており、スラブアロケータの側面も含まれます。これらのパラメータは通常、vm サブツリーの下にグループ化されています。

仮想メモリに関連するすべてのカーネルパラメータを表示するには、vm 引数を指定して sysctl コマンドを使用します。

sysctl vm

ターミナルにこのコマンドを入力し、Enter キーを押します。次のようなパラメータとその現在の値のリストが表示されます。

vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_memory = 0
vm.compact_unevictable_percentage = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.lowmem_reserve_ratio = 256   256     32      0       0
vm.max_map_count = 65530
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 65536
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_balancing = 1
vm.numa_balancing_scan_delay_ms = 1000
vm.numa_balancing_scan_period_min_ms = 20
vm.numa_balancing_scan_period_max_ms = 10000
vm.numa_balancing_scan_size_mb = 32
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100

vm.vfs_cache_pressurevm.min_slab_ratio など、キャッシュまたはメモリ圧力に関連する可能性のあるパラメータを探します。これらのパラメータは、カーネルがスラブキャッシュを含むさまざまなタイプのキャッシュをどのように管理するかに影響を与えることができます。

また、パラメータの完全な名前を指定することで、特定のパラメータを表示することもできます。たとえば、vm.vfs_cache_pressure の値を表示するには、次のようにします。

sysctl vm.vfs_cache_pressure

このコマンドの出力は次のようになります。

vm.vfs_cache_pressure = 100

vm.vfs_cache_pressure パラメータは、カーネルがディレクトリとイノードオブジェクトのキャッシュに使用されるメモリを回収する傾向を制御します。値が高いほど、カーネルはこのメモリを積極的に回収します。

これらのパラメータを理解することで、システムのメモリ動作を調整するのに役立ちます。

Continue をクリックして次のステップに進みます。

dmesg でスラブログを調査する

この最後のステップでは、dmesg コマンドを使用して、カーネルメッセージバッファからスラブアロケータに関連するメッセージをチェックする方法を学びます。カーネルメッセージバッファは、起動時および実行時にカーネルが生成したメッセージを格納します。これらのメッセージには、ハードウェア、デバイスドライバ、およびスラブアロケータなどのカーネルサブシステムに関する情報が含まれることがあります。

dmesg コマンドは、カーネルリングバッファを表示または制御するために使用されます。このバッファにはカーネルからのメッセージが含まれており、デバッグやトラブルシューティングに役立つことが多いです。

カーネルメッセージバッファ全体を表示するには、単に dmesg を実行するだけです。

dmesg

ただし、出力は非常に長くなることがあります。スラブアロケータに特に関連するメッセージを見つけるには、dmesg の出力を grep コマンドにパイプし、「slab」または「SLUB」(SLUB は最新のスラブアロケータの実装です)などのキーワードを検索することができます。

ターミナルに次のコマンドを入力し、Enter キーを押します。

dmesg | grep -i "slab\|slub"

このコマンドを分解して説明します。

  • dmesg:カーネルメッセージバッファを表示します。
  • |:これはパイプで、左側のコマンドの出力を右側のコマンドの入力として送ります。
  • grep:正規表現に一致する行をプレーンテキストデータセットから検索するコマンドラインユーティリティです。
  • -i:このオプションは検索を大文字小文字を区別しないようにします。したがって、「slab」、「SLAB」、「slub」、「SLUB」などに一致します。
  • "slab\|slub":これは検索パターンです。slab は「slab」という単語を検索し、\| は OR 演算子として機能し、slub は「slub」という単語を検索します。

出力には、カーネルメッセージバッファ内の「slab」または「slub」(大文字小文字を区別しない)を含むすべての行が表示されます。起動時のスラブアロケータの初期化に関するメッセージや、問題がある場合の潜在的な警告やエラーが表示されることがあります。

[    0.000000] kmem_cache_init
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] SLUB: TotalObjects=0, ObjectsPerSpan=0, SpansPerChunk=0
[    0.000000] SLUB: min_objects.limit=0, min_objects.batchcount=0
[    0.000000] SLUB: tunables.limit=0, tunables.batchcount=0, tunables.sharedfactor=0
[    0.000000] SLUB: Not setting slab_nomerge.
[    0.000000] SLUB: Not setting slab_debug.
[    0.000000] SLUB: Not setting slab_max_order.
[    0.000000] SLUB: Not setting slab_alias_debug.
[    0.000000] SLUB: Not setting slab_pad.
[    0.000000] SLUB: Not setting slab_red_zone.
[    0.000000] SLUB: Not setting slab_poison.
[    0.000000] SLUB: Not setting slab_freelist_debug.
[    0.000000] SLUB: Not setting slab_freelist_random.
[    0.000000] SLUB: Not setting slab_freelist_hardened.
[    0.000000] SLUB: Not setting slab_trace.
[    0.000000] SLUB: Not setting slab_reclaim_account.
[    0.000000] SLUB: Not setting slab_way.
[    0.000000] SLUB: Not setting slab_sizes.
[    0.000000] SLUB: Not setting slab_caches.
[    0.000000] SLUB: Not setting slab_test.
[    0.000000] SLUB: Not setting slab_order.
[    0.000000] SLUB: Not setting slab_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_memcg.

このコマンドは、カーネルメッセージをフィルタリングし、特定のカーネルサブシステムのトラブルシューティングに関連する情報を見つける強力な方法です。

これで、スラブ統計を調査し、関連するカーネルパラメータを検証し、スラブ関連のメッセージをカーネルログでチェックする方法を学びました。これらは、Linux でのメモリ使用を理解し診断するための基本的なスキルです。

Continue をクリックしてこの実験を完了します。

まとめ

この実験では、Linux でカーネルのスラブ設定をチェックする方法を学びました。まず、/proc/slabinfo ファイルを使用してカーネルのスラブアロケータの統計情報を調査しました。このファイルは、さまざまなスラブキャッシュに関するアクティブなオブジェクト、総オブジェクト、オブジェクトサイズ、およびその他の関連情報の詳細を提供します。このステップでは、重要なメモリ管理データを表示するために cat コマンドを使用する方法を示しました。

次に、sysctl vm コマンドを使用してスラブ設定を検証しました。このコマンドを使用すると、仮想メモリに関連するカーネルパラメータ(スラブ固有の調整可能なパラメータを含む)を調べたり変更したりすることができます。最後に、カーネルメッセージバッファである dmesg 内のスラブ関連のログを調査し、スラブアロケータに関連するエラーや警告を特定する方法を学びました。これらのステップをまとめることで、カーネルのスラブ動作を理解しトラブルシューティングするための包括的なアプローチが提供されます。