LinuxシステムでNUMAノードメモリを無効にする方法

LinuxシステムでNUMAノードメモリを無効にする方法

特定のNUMAノード/ソケットに関連付けられているメモリへのアクセスを無効にする方法はありますか?マシン?

私たちは、HP DL560システムに関してデータベースベンダーといくつかの紛争を経験しています。 DBセールス技術サポート担当者は、DL560が利用できず、スロットが少ないため、新しいDL360を購入する必要があることに喜んでいました。私は彼らがソケット間のメモリアクセス速度に興味があると思います。彼らは私がDL560を維持するために2つのスロットを空にしなければならないと提案しました。私は彼らが間違っていると思いますが(別名狂った)、私の立場がしっかりしていることを証明するためにテストが必要です。

私の構成:
マシンには4つのソケットがあり、各ソケットには22のハイパースレッド物理コア、合計176の見かけのコア、合計1.5Tのメモリがあります。オペレーティングシステムはRed Hat Enterprise Linux Serverバージョン7.4です。

lscpuは次の内容(部分)を表示します。

$ lscpu | egrep 'NUMA|ore'
Thread(s) per core:    2
Core(s) per socket:    22
NUMA node(s):          4
NUMA node0 CPU(s):     0-21,88-109
NUMA node1 CPU(s):     22-43,110-131
NUMA node2 CPU(s):     44-65,132-153
NUMA node3 CPU(s):     66-87,154-175

物理ハードウェアにアクセスできる場合は、ポイントを証明するために両方のソケットからプロセッサを取り出すことを検討できますが、ハードウェアにアクセスする権限や権限はありません。

次善策は、オペレーティングシステムを使用してソケットを仮想的に無効にすることです。私はこれを読んだ協会これを使用してプロセッササービスを停止できます。

echo 0 > /sys/devices/system/cpu/cpu3/online

プロセッサが動作を停止したという事実は、メモリに関して何の意味もない。

私はソケット#3のすべてのプロセッサを閉じました。 lscpuを使用してソケット#3のプロセッサを見つけます。

for num in {66..87} {154..175}
do
    echo 0 > /sys/devices/system/cpu/cpu${num}/online
    cat /sys/devices/system/cpu/cpu${num}/online
done

そして得る:

$ grep N3 /proc/$$/numa_maps
7fe5daa79000 default file=/usr/lib64/libm-2.17.so mapped=16 mapmax=19 N3=16 kernelpagesize_kB=4

この記事を正しく読んでいる場合は、現在のプロセスがソケット#3のメモリを使用していることを示します。プロセッサーをシャットダウンする以外は、シェルはすでに実行中です。

新しいプロセスを開始すると、メモリをキャッチしようとして最善を尽くします。

$ cat / proc / 18824 / numa_mapsクエリN3 |

最初はレコードは返されませんが、長い間メモリを消費した後、ノード3でメモリの使用を開始します。

ノード0,1,2を使用してプログラムを実行し、ノード0,1,2にバインドしようとしましたが、期待どおりにnumactl機能しました.ベンダーのソフトウェアを制御できず、Linuxでゼロを使用する規制がないことを除いて、1,2はこれを実行して他のプロセスset_mempolicyで使用されるサービスを設定しますnumactl

プロセッサを物理的に取り外す以外に、この問題を強制する方法はありますか?

ベストアンサー1

私は彼らがソケット間のメモリアクセス速度に興味があると思います。彼らは私がDL560を維持するために2つのスロットを空にしなければならないと提案しました。

これはQPIまたはUPIリンクの数とIntelのスケーラビリティに関連しています(Xeonに言及しているため)。NCPUが4S、S4S、S8Sかどうか。しかし、スロットが4つあるという事実は、合理的な速度(S4Sが4Sより速い)でどこからでもRAMにアクセスできることを意味しますが、このレベルで最悪の場合はディスクまたはディスクサイズの順序にアクセスするよりも数倍高速です。他のタイプのPCIeストレージ。

4ソケットシステムのCPU 0、1、2、または3の特定のコアで実行される特定のプロセスの場合、最速のRAMアクセスは、そのCPUのメモリコントローラ内のRAMチッププールへのものです。そのRAMにアクセスする前に別のCPUへのQPI / UPIリンクをスキップする必要がある場合は、次のようにします。ゆっくりまさか最高。ただし、まず共有RAMが不足していることを考慮して、これらすべてを評価する必要があります。

はい、この問題を強制的に解決する方法があります。

中央処理ユニット- プロセスをプロセッサとメモリノードのサブセットに制限します。

cpusetファイルシステムは、プロセスのプロセッサ配置とメモリ配置を制御するために使用されるカーネルcpusetメカニズムへの擬似ファイルシステムインタフェースです。通常は/dev/cpusetにインストールされます。

おすすめ記事