質問: pcieデバイスのnumaノードを決定する 最近のlinux osを想定して、デバイスが接続されているpcieスロットがどのnumaノードに属しているかを簡単に判断する方法はありますか?
回答: 受け入れられた回答は、私が見つけた限り、ネットワークカードでのみ機能します。 guillermomaの回答によれば、hwlocは判読できなくても本当の取引を提供します。 lstopoはhwlocパッケージにあります(少なくともrhel 7では):# lstopo machine (256gb) numanode l#0 (p#0 128gb) socket l#0 + l3 l#0 (20mb) l2 l#0 (256kb) + l1d l#0 (32kb) + l1i l#0 (32kb) + core l#0 + pu l#0 (p#0) l2 l#1 (256kb) + l1d l#1 (32kb) + l1i l#1 (32kb) + core l#1 + pu l#1 (p#2) l2 l#2 (256kb) + l1d l#2 (32kb) + l1i l#2 (32kb) + core l#2 + pu l#2 (p#4) l2 l#3 (256kb) + l1d l#3 (32kb) + l1i l#3 (32kb) + core l#3 + pu l#3 (p#6) l2 l#4 (256kb) + l1d l#4 (32kb) + l1i l#4 (32kb) + core l#4 + pu l#4 (p#8) l2 l#5 (256kb) + l1d l#5 (32kb) + l1i l#5 (32kb) + core l#5 + pu l#5 (p#10) l2 l#6 (256kb) + l1d l#6 (32kb) + l1i l#6 (32kb) + core l#6 + pu l#6 (p#12) l2 l#7 (256kb) + l1d l#7 (32kb) + l1i l#7 (32kb) + core l#7 + pu l#7 (p#14) hostbridge l#0 pcibridge pci 1000:005d block l#0 "sda" pcibridge pci 14e4:16a1 net l#1 "eth0" pci 14e4:16a1 net l#2 "eth1" pci 14e4:16a1 net l#3 "eth2" pci 14e4:16a1 net l#4 "eth3" pci 8086:8d62 pcibridge pcibridge pcibridge pcibridge pci 102b:0534 pci 8086:8d02 block l#5 "sr0" numanode l#1 (p#1 128gb) socket l#1 + l3 l#1 (20mb) l2 l#8 (256kb) + l1d l#8 (32kb) + l1i l#8 (32kb) + core l#8 + pu l#8 (p#1) l2 l#9 (256kb) + l1d l#9 (32kb) + l1i l#9 (32kb) + core l#9 + pu l#9 (p#3) l2 l#10 (256kb) + l1d l#10 (32kb) + l1i l#10 (32kb) + core l#10 + pu l#10 (p#5) l2 l#11 (256kb) + l1d l#11 (32kb) + l1i l#11 (32kb) + core l#11 + pu l#11 (p#7) l2 l#12 (256kb) + l1d l#12 (32kb) + l1i l#12 (32kb) + core l#12 + pu l#12 (p#9) l2 l#13 (256kb) + l1d l#13 (32kb) + l1i l#13 (32kb) + core l#13 + pu l#13 (p#11) l2 l#14 (256kb) + l1d l#14 (32kb) + l1i l#14 (32kb) + core l#14 + pu l#14 (p#13) l2 l#15 (256kb) + l1d l#15 (32kb) + l1i l#15 (32kb) + core l#15 + pu l#15 (p#15) hostbridge l#7 pcibridge pci 15b3:1003 net l#6 "eth4" net l#7 "eth5" もちろん、numanode l#0はcpu0で、numanode l#1はcpu1です。次に、上記からお気に入りのpci番号(14e4:16a1など)を取得し、それが何であるか、およびそのpciアドレスをlspciからさらに分析するために検出できます。# lspci -nn | grep 14e4:16a1 01:00.0 ethernet controller [0200]: broadcom corporation bcm57840 netxtreme ii 10 gigabit ethernet [14e4:16a1] (rev 11) 01:00.1 ethernet controller [0200]: broadcom corporation bcm57840 netxtreme ii 10 gigabit ethernet [14e4:16a1] (rev 11) 01:00.2 ethernet controller [0200]: broadcom corporation bcm57840 netxtreme ii 10 gigabit ethernet [14e4:16a1] (rev 11) 01:00.3 ethernet controller [0200]: broadcom corporation bcm57840 netxtreme ii 10 gigabit ethernet [14e4:16a1] (rev 11) 私のマシンの1つで、emulexファイバーチャネルカードがlstopo出力に表示されませんでした。私はlstopo --whole-ioを使用して、逆ルックアッププロセスを実行することで見つけました(必要に応じて右にスクロールして、grepする10dfの16進数を確認します)。# lspci -nn | grep -i emulex 03:00.0 fibre channel [0c04]: emulex corporation saturn-x: lightpulse fibre channel host adapter [10df:f100] (rev 03) 03:00.1 fibre channel [0c04]: emulex corporation saturn-x: lightpulse fibre channel host adapter [10df:f100] (rev 03) # lstopo --whole-io | grep 10df pci 10df:f100 pci 10df:f100 上記のパイプで接続されたgrepコマンドを削除し、出力を半手動でかき回して、完全なlstopo --whole-ioディスプレイでデバイスを見つけます(読者のための練習として残しました)。