はじめに
この実験では、Linux で Non-Uniform Memory Access (NUMA) 設定が適用されているかどうかを確認する方法を学びます。NUMA を理解することは、マルチプロセッサシステムのパフォーマンスを最適化するために重要です。
一連の実践的な手順を通じて、numactl や lscpu などの重要な Linux コマンドを使用し、/proc/numa ファイルシステムを探索して、システムの NUMA 設定を検証および調査します。この実験では、NUMA ノード、関連する CPU、およびメモリを特定する実践的なスキルを身につけ、システムの NUMA 設定を効果的に評価できるようになります。
numactl --hardware で NUMA の状態を確認する
このステップでは、システムの Non-Uniform Memory Access (NUMA) アーキテクチャの探索を始めます。NUMA はマルチプロセッシングで使用されるコンピュータメモリ設計で、メモリアクセス時間はプロセッサに対するメモリの位置に依存します。NUMA を理解することは、特定のアプリケーションのパフォーマンスを最適化する上で重要です。
numactl コマンドを使用して NUMA の状態を確認します。numactl コマンドは、プロセスの NUMA ポリシーを制御したり、特定の NUMA ポリシーでプログラムを実行したりするために使用されます。
まず、システムに numactl コマンドが利用可能かどうかを確認しましょう。ターミナルに以下のコマンドを入力し、Enter キーを押します。
which numactl
numactl がインストールされている場合、実行ファイルのパスが表示されます。例えば以下のようになります。
/usr/bin/numactl
インストールされていない場合、出力は空になるか、エラーメッセージが表示されます。インストールされていない場合は、apt を使用してインストールできます。パスワードなしで sudo 権限を持っているので、以下のコマンドを実行できます。
sudo apt update
sudo apt install numactl -y
これで numactl が利用可能になったので、--hardware オプションを使用して、システムの NUMA ノードに関する情報を表示しましょう。以下のコマンドを入力し、Enter キーを押します。
numactl --hardware
以下のような出力が表示され、利用可能な NUMA ノードとそれに関連付けられた CPU およびメモリが一覧表示されます。
available: 1 nodes (0)
node 0 cpus: 0 1
node 0 size: 1999 MB
node 0 free: 1800 MB
この出力は、システムに 1 つの NUMA ノード(ノード 0)があることを示しています。また、このノードに属する CPU と、それに利用可能な総メモリと空きメモリも表示されます。正確な出力は、仮想マシンの設定によって異なる場合があります。
この出力を理解することは、NUMA システムを扱う上での最初のステップです。次のステップでは、NUMA 設定を調査するさらなる方法を探索します。
続行 をクリックして次のステップに進みます。
/proc/numa で NUMA ノードを確認する
このステップでは、/proc ファイルシステムを探索して、NUMA ノードに関する情報を取得します。/proc ファイルシステムは、プロセスやその他のシステム情報を提供する仮想ファイルシステムです。Linux システムの設定や状態に関する詳細を見つけるのに最適な場所です。
具体的には、/proc/numa ディレクトリを見ていきます。このディレクトリには、NUMA 設定に関する詳細を提供するファイルが含まれています。
まず、ls コマンドを使用して /proc/numa ディレクトリの内容を一覧表示しましょう。ターミナルに以下のコマンドを入力し、Enter キーを押します。
ls /proc/numa
以下のような出力が表示されるはずです。
distance nodes
これは、/proc 内で NUMA に関連する 2 つの主要なファイルまたはディレクトリが distance と nodes であることを示しています。
次に、/proc/numa/nodes ファイルの内容を調べましょう。このファイルには、利用可能な NUMA ノードが一覧表示されているはずです。cat コマンドを使用してこのファイルの内容を表示できます。以下のコマンドを入力し、Enter キーを押します。
cat /proc/numa/nodes
以下のような出力が表示されるはずです。
0
この出力は、システムに少なくとも 1 つの NUMA ノード(ノード 0)があることを確認しています。システムに複数の NUMA ノードがある場合、ここにノード番号のリストが表示されます(例:0 1)。
次に、/proc/numa/distance ファイルを見てみましょう。このファイルは、NUMA ノード間の距離を示しており、異なるノードのメモリにアクセスするコストを表しています。単一ノードのシステムでは、自身への距離は通常 10 です。以下のコマンドを入力し、Enter キーを押します。
cat /proc/numa/distance
以下のような出力が表示されるはずです。
0: 10
この出力は距離行列を示しています。この場合、0: 10 はノード 0 からノード 0 への距離が 10 であることを意味します。複数の NUMA ノードを持つシステムでは、すべてのノードペア間の距離を示す行列が表示されます。
/proc ファイルシステムを探索することは、Linux でシステム情報を収集する一般的な方法です。これで、システムで検出された NUMA ノードを確認するためにこれをどのように使用するかがわかりました。
続行 をクリックして次のステップに進みます。
lscpu で NUMA の詳細を調べる
この最後のステップでは、lscpu コマンドを使用して、NUMA 設定を含む CPU アーキテクチャに関する詳細情報を取得します。lscpu コマンドは、システム内の CPU に関する情報を表示し、システムのハードウェアを理解するのに非常に役立ちます。
ターミナルに以下のコマンドを入力し、Enter キーを押します。
lscpu
CPU に関する包括的な出力が表示されます。「NUMA」と記載された行を探してください。出力はシステムによって異なりますが、以下のようなものが表示されるはずです。
Architecture: x86_64
...
NUMA node(s): 1
NUMA node0 CPU(s): 0,1
出力の関連部分を分解してみましょう。
NUMA node(s): 1:この行は、システムで検出された NUMA ノードの総数を示しています。この場合、1 つであり、numactlを使用した結果や/proc/numaを確認した結果と一致しています。NUMA node0 CPU(s): 0,1:この行は、NUMA ノード 0 に属する CPU コアを示しています。ここでは、CPU 0 と 1 がノード 0 の一部であることを示しています。
lscpu コマンドは、コア数、スレッド数、キャッシュサイズ、サポートされている機能など、CPU に関する他の多くの有用な情報を提供します。出力をスクロールして、他にどのような詳細があるかを確認してください。
これで、3 つの異なる方法(numactl --hardware、/proc/numa、および lscpu)を使用して、システムの NUMA 設定を調べることに成功しました。これらのツールを理解することは、マルチプロセッサシステムでのパフォーマンス問題の診断やアプリケーションの最適化に不可欠です。
続行 をクリックしてこの実験を完了し、進捗状況を確認します。
まとめ
この実験では、Linux で NUMA 設定が適用されているかどうかを確認する方法を学びました。まず、numactl --hardware コマンドを使用して、関連する CPU やメモリを含む利用可能な NUMA ノードに関する情報を表示しました。これにより、システム上の NUMA アーキテクチャについての基本的な理解が得られました。
次に、NUMA 設定を検証するための代替方法を探索しました。これには、NUMA ノードとそのメモリ統計に関する詳細情報を提供する /proc/numa ファイルシステムの調査が含まれていました。最後に、lscpu コマンドを利用して、NUMA に関連する詳細を含む CPU アーキテクチャの包括的な概要を取得し、システムの NUMA 設定をさらに確認しました。



