linux性能優化——關於NUMA的配置
檢查NUMA配置
numa是為了應對多處理器系統共享同一個總線導致的總線負載過大問題。本質上將M個處理器分為N組,每組處理器之間用IMC BUS總線進行連接,每一組叫做一個Node,其結構類似於一個小的UMA(Uniform Memory Access),每個Node中有一個集成的內存控制器IMC,Intergrated Memory Controller。組內CPU用IMCBUS總線連接,Node之間用QPI總線連接,QPI延遲明顯高於IMCBUS。
如果numa的available nodes數量大於1,則表明NUMA已開啟。
NUMA的基本信息可以通過檢查cpu狀態,即使用lscpu指令來看到。執行如下指令:
lscpu | grep -i numa
得到如下格式結果:
NUMA node(s): 2
NUMA node0 CPU(s): 0-27,56-83
NUMA node1 CPU(s): 28-55,84-111
結果顯示NUMA有2個node, 如果大於1個node,說明NUMA開啟。此外對新手要注意:pcie上並沒有NUMA信息,因為pcie上的信息都是硬件設備,NUMA並不是硬件,而只是一種內存技術,該技術和CPU的支持分不開,所以,用lscpu指令可以看到NUMA信息。
如果要看NUMA詳細的信息,可以用numactl和numastat指令。
numactl --hareward
#numactl -H
得到如下信息:
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
node 0 size: 128445 MB
node 0 free: 96356 MB
node 1 cpus: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
node 1 size: 128982 MB
node 1 free: 97986 MB
node distances:
node 0 1
0: 10 20
1: 20 10
此外還要檢查pcie上的設備是否和對應的NUMA節點對應。
例如,某一個pcie地址段是和NUMA的Node0綁定的,則該地址段上的設備應綁定Node0。如果本應是綁定Node0的設備綁定了Node1, 則必然導致該設備運行的性能下降。
注:通過實驗得出,00-7f的bus上,所有設備均應綁定Node0,80-ff的bus上,所有設備均應綁定Node1。
7f對應十進制是127,ff對應十進制是255,正好是256位長度,說名pcie位寬是256位。前半部分屬於Node0,后半部分屬於Node1。
以網卡為例,通過lspci找到了某一張網卡的pcie地址號0000:4b:00.01,bus為4b,小於80,故應綁定Node0。通過以下指令查詢該網卡是否綁定Node0:
cat /sys/bus/pci/devices/0000\:4b\:00.1/numa_node
如果返回的值為0,說明該網卡綁定NUMA正確。
另外,如果僅僅是查看某一個網卡綁定的numa_node,可以通過以下指令而不需要通過pcie查找:
cat /sys/class/net/enp129s0f0/device/numa_node
該指令的值會返回所屬的Node號,如果返回0,便代表該網卡綁定在Node0上。
這兩個指令共同點都是在sys文件系統中查找。
如何配置NUMA
NUMA的配置對於性能至關重要。