[〜#〜] numa [〜#〜] マシン上の特定のNUMAノード/ソケットに関連付けられたメモリへのアクセスを無効にする方法はありますか?
HP DL560マシンについて、ベンダーとの間で少し論争があります。販売タイプのテクニカルサポート担当者は、DL560を使用できなかったが、ソケットの数が少ないため新しいDL360を購入しなければならないことを伝えました。彼らの懸念は、ソケット間メモリへのアクセス速度にあると思います。彼らは、私がDL560を維持することを主張した場合、2つのソケットを空のままにしておくことを推奨しました。私はそれらが間違っている(別名クレイジー)と思いますが、私がしっかりした立場にあることを実証するテストが必要です。
私の構成:
マシンには4つのソケットがあり、それぞれに22個のハイパースレッド物理コアがあり、合計176個の見かけのコアで合計1.5 Tのメモリがあります。オペレーティングシステムは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
物理的なハードウェアにアクセスできた場合、2つのソケットからプロセッサを引き出して自分の要点を証明することを検討しますが、私にはアクセス権がなく、いずれにしてもハードウェアを使い回す許可がありません。
次善の策は、オペレーティングシステムを使用してソケットを仮想的に無効にすることです。私はこれを読みます リンク プロセッサをサービスから外すことができます
echo 0 > /sys/devices/system/cpu/cpu3/online
そして、確かに、プロセッサは使用できなくなりますが、メモリについては何も言えません。
私はソケット#3のすべてのプロセッサをオフにしました(lscpuを使用してSocket#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 | grep N3
最初はレコードを返しませんが、長時間メモリを消費した後、Node 3。
numactl
を使用してプログラムを実行し、ノード0、1、2にバインドしてみましたが、期待どおりに動作します...ただし、ベンダーのソフトウェアを制御できず、Linuxに別のソフトウェアを設定するためのプロビジョニングがありませんnumactl
で使用されるset_mempolicy
サービスで行われるプロセス。
物理的にプロセッサを取り外すのではなく、問題を強制する方法はありますか?
彼らの懸念は、ソケット間メモリへのアクセス速度にあると思います。彼らは、私がDL560を維持することを主張した場合、2つのソケットを空のままにしておくことを推奨しました。
これは、QPIの数、またはUPIリンクと、nCPUは4S、S4S、S8Sのいずれかです。ただし、4つのソケットがあるという事実は、RAMに適切な速度でどこからでもアクセスできる必要があることを意味します(S4Sはより高速です) 4Sよりも)、しかしこのレベルで最悪の場合、ディスクや他の種類のPCIeストレージにアクセスするよりも桁違いに速くなります。
クワッドソケットシステムのCPU 0、1、2、または3の特定のコアで実行されている特定のプロセスの場合、最速のRAMアクセスはRAMチップがその特定のCPUのメモリコントローラーにぶら下がっています。QPI/ UPIリンクを介して他のCPUにホップする必要がある場合は、そのRAMに到達しますslowerではなくoptimalですが、十分に共有されていないことを考慮してください= RAMそもそも。
はい、問題を強制する方法があり、それは
cpuset-プロセスをプロセッサとメモリノードのサブセットに制限します
Cpusetファイルシステムは、カーネルのcpusetメカニズムへの疑似ファイルシステムインターフェイスであり、プロセスのプロセッサ配置とメモリ配置を制御するために使用されます。通常は/ dev/cpusetにマウントされます。