【知乎】主流CPU性能摸底(Intel/AMD/鯤鵬/海光/飛騰)
主流CPU性能摸底(Intel/AMD/鯤鵬/海光/飛騰)

PolarDB-X
已認證賬號
作者:蟄劍
前言
本文在Sysbench、TPCC等實踐場景下對多款CPU的性能進行對比,同時分析各款CPU的硬件指標,最后分析不同場景下的實際性能和核心參數(shù)的關系。最終會展示Intel和AMD到底誰厲害、ARM離X86還有多大的距離、國產CPU性能到底怎么樣了。
本文的姊妹篇:十年后數(shù)據庫還是不敢擁抱NUMA? 主要講述的是 同一塊CPU的不同NUMA結構配置帶來的幾倍性能差異,這些性能差異原因也可以從本文最后時延測試數(shù)據得到印證,一起閱讀效果更好。
這幾款CPU的核心參數(shù)如下表:
CPU型號Hygon 7280AMD EPYC 7H12Intel 8163鯤鵬920飛騰2500物理核數(shù)3232244864超線程222路22222NUMA Node822416L1d32K32K32K64K32KL2512K512K1024K512K2048K
性能定義
同一個平臺下(X86、ARM是兩個平臺)編譯好的程序可以認為他們的 指令 數(shù)是一樣的,那么執(zhí)行效率就是每個時鐘周期所能執(zhí)行的指令數(shù)量了。
執(zhí)行指令數(shù)量第一取決的就是CPU主頻了,但是目前主流CPU都是2.5G左右,另外就是單核下的并行度(多發(fā)射)以及多核,再就是分支預測等,這些基本歸結到了訪問內存的延時。
X86和ARM這兩不同平臺首先指令就不一樣了,然后還有上面所說的主頻、內存時延的差異
IPC的說明:
IPC: insns per cycle ?insn/cycles ?也就是每個時鐘周期能執(zhí)行的指令數(shù)量,越大程序跑的越快
程序的執(zhí)行時間 = 指令數(shù)/(主頻*IPC) //單核下,多核的話再除以核數(shù)
參與比較的幾款CPU參數(shù)
先來看看測試所用到的幾款CPU的主要指標,大家關注下主頻、各級cache大小、NUMA結構
Hygon 7280
Hygon 7280 就是AMD Zen架構,最大IPC能到5.
架構: ? ? ? ? ? ? ? ? ? ? ? ? ? x86_64
CPU 運行模式: ? ? ? ? ? ? ? ? ? 32-bit, 64-bit
字節(jié)序: ? ? ? ? ? ? ? ? ? ? ? ? Little Endian
Address sizes: ? ? ? ? ? ? ? ? ?43 bits physical, 48 bits virtual
CPU: ? ? ? ? ? ? ? ? ? ? ? ? ? ?128
在線 CPU 列表: ? ? ? ? ? ? ? ? ? 0-127
每個核的線程數(shù): ? ? ? ? ? ? ? ? ? 2
每個座的核數(shù): ? ? ? ? ? ? ? ? ? ?32
座: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2
NUMA 節(jié)點: ? ? ? ? ? ? ? ? ? ? ?8
廠商 ID: ? ? ? ? ? ? ? ? ? ? ? ?HygonGenuine
CPU 系列: ? ? ? ? ? ? ? ? ? ? ? 24
型號: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
型號名稱: ? ? ? ? ? ? ? ? ? ? ? ?Hygon C86 7280 32-core Processor
步進: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
CPU MHz: ? ? ? ? ? ? ? ? ? ? ? 2194.586
BogoMIPS: ? ? ? ? ? ? ? ? ? ? ?3999.63
虛擬化: ? ? ? ? ? ? ? ? ? ? ? ? AMD-V
L1d 緩存: ? ? ? ? ? ? ? ? ? ? ? 2 MiB ?
L1i 緩存: ? ? ? ? ? ? ? ? ? ? ? 4 MiB
L2 緩存: ? ? ? ? ? ? ? ? ? ? ? ?32 MiB
L3 緩存: ? ? ? ? ? ? ? ? ? ? ? ?128 MiB
NUMA 節(jié)點0 CPU: ? ? ? ? ? ? ? ? 0-7,64-71
NUMA 節(jié)點1 CPU: ? ? ? ? ? ? ? ? 8-15,72-79
NUMA 節(jié)點2 CPU: ? ? ? ? ? ? ? ? 16-23,80-87
NUMA 節(jié)點3 CPU: ? ? ? ? ? ? ? ? 24-31,88-95
NUMA 節(jié)點4 CPU: ? ? ? ? ? ? ? ? 32-39,96-103
NUMA 節(jié)點5 CPU: ? ? ? ? ? ? ? ? 40-47,104-111
NUMA 節(jié)點6 CPU: ? ? ? ? ? ? ? ? 48-55,112-119
NUMA 節(jié)點7 CPU: ? ? ? ? ? ? ? ? 56-63,120-127
注意L1d顯示為2MiB,實際是不可能有這么大的,L1、L2是每個core獨享,從測試看到時延在32K有個跳躍,所以這里的L1d實際為32K。這里應該是OS展示考慮不周導致的,實際我們來看下:
[root@hygon3 15:56 /sys]
#cat ./devices/system/cpu/cpu0/cache/index0/size ?--- L1d
32K
[root@hygon3 15:56 /sys]
#cat ./devices/system/cpu/cpu0/cache/index1/size ?--- L1i
64K
[root@hygon3 15:57 /sys]
#cat ./devices/system/cpu/cpu0/cache/index2/size ?--- L2
512K
[root@hygon3 15:57 /sys]
#cat ./devices/system/cpu/cpu0/cache/index3/size ?--- L3
8192K
[root@hygon3 15:57 /sys]
#cat ./devices/system/cpu/cpu0/cache/index1/type
Instruction
[root@hygon3 16:00 /sys]
#cat ./devices/system/cpu/cpu0/cache/index0/type
Data
[root@hygon3 16:00 /sys]
#cat ./devices/system/cpu/cpu0/cache/index3/shared_cpu_map
00000000,0000000f,00000000,0000000f ? ---- 4個物理core共享8M L3
[root@hygon3 16:00 /sys]
#cat devices/system/cpu/cpu0/cache/index3/shared_cpu_list
0-3,64-67
[root@hygon3 16:01 /sys]
#cat ./devices/system/cpu/cpu0/cache/index2/shared_cpu_map
00000000,00000001,00000000,00000001
AMD EPYC 7H12
AMD EPYC 7H12 64-Core(ECS,非物理機),最大IPC能到5.
# lscpu
Architecture: ? ? ? ? ?x86_64
CPU op-mode(s): ? ? ? ?32-bit, 64-bit
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?64
On-line CPU(s) list: ? 0-63
Thread(s) per core: ? ?2
Core(s) per socket: ? ?16
座: ? ? ? ? ? ? ? ? ? ?2
NUMA 節(jié)點: ? ? ? ? ? ? 2
廠商 ID: ? ? ? ? ? ? ? AuthenticAMD
CPU 系列: ? ? ? ? ? ? ?23
型號: ? ? ? ? ? ? ? ? ?49
型號名稱: ? ? ? ? ? ? ? AMD EPYC 7H12 64-Core Processor
步進: ? ? ? ? ? ? ? ? ?0
CPU MHz: ? ? ? ? ? ? ?2595.124
BogoMIPS: ? ? ? ? ? ? 5190.24
虛擬化: ? ? ? ? ? ? ? ?AMD-V
超管理器廠商: ? ? ? ? ? KVM
虛擬化類型: ? ? ? ? ? ? 完全
L1d 緩存: ? ? ? ? ? ? ?32K
L1i 緩存: ? ? ? ? ? ? ?32K
L2 緩存: ? ? ? ? ? ? ? 512K
L3 緩存: ? ? ? ? ? ? ? 16384K
NUMA 節(jié)點0 CPU: ? ? ? ?0-31
NUMA 節(jié)點1 CPU: ? ? ? ?32-63
Intel
這次對比測試用到了兩塊Intel CPU,分別是 8163、8269 。他們的信息如下,最大IPC 是4:
#lscpu
Architecture: ? ? ? ? ?x86_64
CPU op-mode(s): ? ? ? ?32-bit, 64-bit
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?96
On-line CPU(s) list: ? 0-95
Thread(s) per core: ? ?2
Core(s) per socket: ? ?24
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?1
Vendor ID: ? ? ? ? ? ? GenuineIntel
CPU family: ? ? ? ? ? ?6
Model: ? ? ? ? ? ? ? ? 85
Model name: ? ? ? ? ? ?Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
Stepping: ? ? ? ? ? ? ?4
CPU MHz: ? ? ? ? ? ? ? 2499.121
CPU max MHz: ? ? ? ? ? 3100.0000
CPU min MHz: ? ? ? ? ? 1000.0000
BogoMIPS: ? ? ? ? ? ? ?4998.90
Virtualization: ? ? ? ?VT-x
L1d cache: ? ? ? ? ? ? 32K
L1i cache: ? ? ? ? ? ? 32K
L2 cache: ? ? ? ? ? ? ?1024K
L3 cache: ? ? ? ? ? ? ?33792K
NUMA node0 CPU(s): ? ? 0-95 ?
-----8269CY
#lscpu
Architecture: ? ? ? ? ?x86_64
CPU op-mode(s): ? ? ? ?32-bit, 64-bit
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?104
On-line CPU(s) list: ? 0-103
Thread(s) per core: ? ?2
Core(s) per socket: ? ?26
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?2
Vendor ID: ? ? ? ? ? ? GenuineIntel
CPU family: ? ? ? ? ? ?6
Model: ? ? ? ? ? ? ? ? 85
Model name: ? ? ? ? ? ?Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
Stepping: ? ? ? ? ? ? ?7
CPU MHz: ? ? ? ? ? ? ? 3200.000
CPU max MHz: ? ? ? ? ? 3800.0000
CPU min MHz: ? ? ? ? ? 1200.0000
BogoMIPS: ? ? ? ? ? ? ?4998.89
Virtualization: ? ? ? ?VT-x
L1d cache: ? ? ? ? ? ? 32K
L1i cache: ? ? ? ? ? ? 32K
L2 cache: ? ? ? ? ? ? ?1024K
L3 cache: ? ? ? ? ? ? ?36608K
NUMA node0 CPU(s): ? ? 0-25,52-77
NUMA node1 CPU(s): ? ? 26-51,78-103
鯤鵬920
[root@ARM 19:15 /root/lmbench3]
#numactl -H
available: 4 nodes (0-3)
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
node 0 size: 192832 MB
node 0 free: 146830 MB
node 1 cpus: 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
node 1 size: 193533 MB
node 1 free: 175354 MB
node 2 cpus: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
node 2 size: 193533 MB
node 2 free: 175718 MB
node 3 cpus: 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
node 3 size: 193532 MB
node 3 free: 183643 MB
node distances:
node ? 0 ? 1 ? 2 ? 3
?0: ?10 ?12 ?20 ?22
?1: ?12 ?10 ?22 ?24
?2: ?20 ?22 ?10 ?12
?3: ?22 ?24 ?12 ?10
?#lscpu
Architecture: ? ? ? ? ?aarch64
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?96
On-line CPU(s) list: ? 0-95
Thread(s) per core: ? ?1
Core(s) per socket: ? ?48
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?4
Model: ? ? ? ? ? ? ? ? 0
CPU max MHz: ? ? ? ? ? 2600.0000
CPU min MHz: ? ? ? ? ? 200.0000
BogoMIPS: ? ? ? ? ? ? ?200.00
L1d cache: ? ? ? ? ? ? 64K
L1i cache: ? ? ? ? ? ? 64K
L2 cache: ? ? ? ? ? ? ?512K
L3 cache: ? ? ? ? ? ? ?24576K
NUMA node0 CPU(s): ? ? 0-23
NUMA node1 CPU(s): ? ? 24-47
NUMA node2 CPU(s): ? ? 48-71
NUMA node3 CPU(s): ? ? 72-95
Flags: ? ? ? ? ? ? ? ? fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm
飛騰2500
飛騰2500用nop去跑IPC的話,只能到1,但是跑其它代碼能到2.33,理論值據說也是4但是我沒跑到過
#lscpu
Architecture: ? ? ? ? ?aarch64
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?128
On-line CPU(s) list: ? 0-127
Thread(s) per core: ? ?1
Core(s) per socket: ? ?64
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?16
Model: ? ? ? ? ? ? ? ? 3
BogoMIPS: ? ? ? ? ? ? ?100.00
L1d cache: ? ? ? ? ? ? 32K
L1i cache: ? ? ? ? ? ? 32K
L2 cache: ? ? ? ? ? ? ?2048K
L3 cache: ? ? ? ? ? ? ?65536K
NUMA node0 CPU(s): ? ? 0-7
NUMA node1 CPU(s): ? ? 8-15
NUMA node2 CPU(s): ? ? 16-23
NUMA node3 CPU(s): ? ? 24-31
NUMA node4 CPU(s): ? ? 32-39
NUMA node5 CPU(s): ? ? 40-47
NUMA node6 CPU(s): ? ? 48-55
NUMA node7 CPU(s): ? ? 56-63
NUMA node8 CPU(s): ? ? 64-71
NUMA node9 CPU(s): ? ? 72-79
NUMA node10 CPU(s): ? ?80-87
NUMA node11 CPU(s): ? ?88-95
NUMA node12 CPU(s): ? ?96-103
NUMA node13 CPU(s): ? ?104-111
NUMA node14 CPU(s): ? ?112-119
NUMA node15 CPU(s): ? ?120-127
Flags: ? ? ? ? ? ? ? ? fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
單核以及超線程計算Prime性能比較
測試命令,這個測試命令無論在哪個CPU下,用2個物理核用時都是一個物理核的一半,所以這個計算是可以完全并行的
taskset -c 1 /usr/bin/sysbench --num-threads=1 --test=cpu --cpu-max-prime=50000 run //單核綁一個core; 2個thread就綁一對HT
測試結果為耗時,單位秒
測試項AMD EPYC 7H12 2.5G CentOS 7.9Hygon 7280 2.1GHz CentOSHygon 7280 2.1GHz 麒麟Intel 8269 2.50GIntel 8163 CPU @ 2.50GHzIntel E5-2682 v4 @ 2.50GHz單核 prime 50000 耗時59秒 IPC 0.5677秒 IPC 0.5589秒 IPC 0.56;83秒 0.41105秒 IPC 0.41109秒 IPC 0.39HT prime 50000 耗時57秒 IPC 0.3174秒 IPC 0.2987秒 IPC 0.2948秒 0.3560秒 IPC 0.3674秒 IPC 0.29
從上面的測試結果來看,簡單純計算場景下 AMD/海光 的單核能力還是比較強的,但是超線程完全不給力(數(shù)據庫場景超線程就給力了);而Intel的超線程非常給力,一對超線程能達到單物理core的1.8倍,并且從E5到8269更是好了不少。 ARM基本都沒有超線程所以沒有測試鯤鵬、飛騰。
計算Prime畢竟太簡單,讓我們來看看他們在數(shù)據庫下的真實能力吧
對比MySQL Sysbench和TPCC性能
MySQL 默認用5.7.34社區(qū)版,操作系統(tǒng)默認是centos,測試中所有mysqld都做了綁核,一樣的壓力配置盡量將CPU跑到100%, HT表示將mysqld綁定到一對HT核。
Sysbench點查
測試命令類似如下:
sysbench --test='/usr/share/doc/sysbench/tests/db/select.lua' --oltp_tables_count=1 --report-interval=1 --oltp-table-size=10000000 ?--mysql-port=3307 --mysql-db=sysbench_single --mysql-user=root --mysql-password='Bj6f9g96!@#' ?--max-requests=0 ? --oltp_skip_trx=on --oltp_auto_inc=on ?--oltp_range_size=5 ?--mysql-table-engine=innodb --rand-init=on ? --max-time=300 --mysql-host=x86.51 --num-threads=4 run
測試結果分別取QPS/IPC兩個數(shù)據(測試中的差異AMD、Hygon CPU跑在CentOS7.9, intel CPU、Kunpeng 920 跑在AliOS上, xdb表示用集團的xdb替換社區(qū)的MySQL Server, 麒麟是國產OS):
測試核數(shù)AMD EPYC 7H12 2.5GHygon 7280 2.1GHygon 7280 2.1GHz 麒麟Intel 8269 2.50GIntel 8163 2.50GIntel 8163 2.50G XDB5.7鯤鵬 920-4826 2.6G鯤鵬 920-4826 2.6G XDB8.0FT2500 alisql 8.0 本地–socket單核24674 0.5413441 0.4610236 0.3928208 0.7525474 0.8429376 0.899694 0.498301 0.463602 0.53一對HT36157 0.4221747 0.3819417 0.3736754 0.4935894 0.640601 0.65無HT無HT無HT4物理核94132 0.5249822 0.4638033 0.3790434 0.69 350%87254 0.73106472 0.8334686 0.4228407 0.3914232 0.5316物理核325409 0.48171630 0.38134980 0.34371718 0.69 1500%332967 0.72446290 0.85 //16核比4核好!116122 0.3594697 0.3359199 0.6 8core:31210 0.5932物理核542192 0.43298716 0.37255586 0.33642548 0.64 2700%588318 0.67598637 0.81 CPU 2400%228601 0.36177424 0.32114020 0.65
說明:麒麟OS下CPU很難跑滿,大致能跑到90%-95%左右,麒麟上裝的社區(qū)版MySQL-5.7.29;飛騰要特別注意mysqld所在socket,同時以上飛騰數(shù)據都是走--socket壓測鎖的,32core走網絡壓測QPS為:99496(15%的網絡損耗)
從上面的結果來看單物理核能力ARM 和 X86之間的差異還是很明顯的
TPCC 1000倉
測試結果(測試中Hygon 7280分別跑在CentOS7.9和麒麟上, 鯤鵬/intel CPU 跑在AliOS、麒麟是國產OS):
TPCC測試數(shù)據,結果為1000倉,tpmC (NewOrders) ,未標注CPU 則為跑滿了
測試核數(shù)Intel 8269 2.50GIntel 8163 2.50GHygon 7280 2.1GHz 麒麟Hygon 7280 2.1G CentOS 7.9鯤鵬 920-4826 2.6G鯤鵬 920-4826 2.6G XDB8.01物理核1239299024706701166194653一對HT1789215324895011778無HT無HT4物理核515254087719387 380%3004623959201018物理核1007928179939664 750%60086423684057216物理核160798 抖動140488 CPU抖動75013 1400%106419 1300-1550%70581 1200%7984424物理核188051164757 1600-2100%100841 1800-2000%130815 1600-2100%88204 1600%11535532物理核195292185171 2000-2500%116071 1900-2400%142746 1800-2400%102089 1900%14356748物理核19969l195730 2100-2600%128188 2100-2800%149782 2000-2700%116374 2500%206055 4500%
測試過程CPU均跑滿(未跑滿的話會標注出來),IPC跑不起來性能就必然低,超線程雖然總性能好了但是會導致IPC降低(參考前面的公式)。可以看到對本來IPC比較低的場景,啟用超線程后一般對性能會提升更大一些。
TPCC并發(fā)到一定程度后主要是鎖導致性能上不去,所以超多核意義不大,可以做可以做類PolarDB-X部署(mysql原生分布式)
比如在Hygon 7280 2.1GHz 麒麟上起兩個MySQLD實例,每個實例各綁定32物理core,性能剛好翻倍:
32核的時候對比下MySQL 社區(qū)版在Hygon7280和Intel 8163下的表現(xiàn),IPC的差異還是很明顯的,基本和TPS差異一致:
從Sysbench和TPCC測試結果來看AMD和Intel差異不大,ARM和X86差異比較大,國產CPU還有很大的進步空間。就像前面所說拋開指令集的差異,主頻差不多,內存管夠為什么還有這么大的性能差別呢?
三款CPU的性能指標
下面讓我們回到硬件本身的數(shù)據來看這個問題
先記住這個圖,描述的是CPU訪問寄存器、L1 cache、L2 cache等延時,關鍵記住他們的差異
圖中數(shù)據在不同CPU型號下會有差異,但是不會有數(shù)量級的差異。從圖中可以看到L2是L1時延的三倍,一次L2讀取相當于CPU耗時10 cycles;一次內存操作是L1時延的120倍,讀取一次內存相當于CPU耗時400個 cycles 了。也就是讀一次內存的時間如果用來做i++夠你加上400次了。 從這里可以看到訪問內存才是CPU的最大瓶頸,所以增加了一大堆Cache,Cache的成本占到了1塊CPU的50%以上
另外注意L1、L2是每個core單獨占用,L3是一個Socket下所有core共享;應用綁核的意思就是讓L1、L2盡量少失效,1%的L1 cache miss可能導致10%以上(增加了10倍以上的平均延時)的性能劣化。
不同的core訪問不同的內存,根據core和內存的距離關系(NUMA結構)性能也會有30%到200%以上的性能下降,接下來的大量測試都會測試不同的core訪問不同內存的延時。
接下來用lmbench來測試各個CPU的內存延時,stream主要用于測試帶寬,對應的時延是在帶寬跑滿情況下的帶寬;lat_mem_rd用來測試操作不同數(shù)據大小的時延。
飛騰2500
用stream測試帶寬和latency,可以看到帶寬隨著NUMA距離增加而不斷減少、同時對應的latency不斷增加,到最近的NUMA Node有10%的損耗,這個損耗和numactl給出的距離完全一致。跨Socket訪問內存latency是Node內的3倍,帶寬是三分之一,但是Socket1性能和Socket0性能完全一致。從這個延時來看如果要是跑一個32core的實例性能一定不會太好,并且抖動劇烈
time for i in $(seq 7 8 128); do echo $i; numactl -C $i -m 0 ./bin/stream -W 5 -N 5 -M 64M; done
#numactl -C 7 -m 0 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 2.84 nanoseconds
STREAM copy bandwidth: 5638.21 MB/sec
STREAM scale latency: 2.72 nanoseconds
STREAM scale bandwidth: 5885.97 MB/sec
STREAM add latency: 2.26 nanoseconds
STREAM add bandwidth: 10615.13 MB/sec
STREAM triad latency: 4.53 nanoseconds
STREAM triad bandwidth: 5297.93 MB/sec
#numactl -C 7 -m 1 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.16 nanoseconds
STREAM copy bandwidth: 5058.71 MB/sec
STREAM scale latency: 3.15 nanoseconds
STREAM scale bandwidth: 5074.78 MB/sec
STREAM add latency: 2.35 nanoseconds
STREAM add bandwidth: 10197.36 MB/sec
STREAM triad latency: 5.12 nanoseconds
STREAM triad bandwidth: 4686.37 MB/sec
#numactl -C 7 -m 2 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.85 nanoseconds
STREAM copy bandwidth: 4150.98 MB/sec
STREAM scale latency: 3.95 nanoseconds
STREAM scale bandwidth: 4054.30 MB/sec
STREAM add latency: 2.64 nanoseconds
STREAM add bandwidth: 9100.12 MB/sec
STREAM triad latency: 6.39 nanoseconds
STREAM triad bandwidth: 3757.70 MB/sec
#numactl -C 7 -m 3 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.69 nanoseconds
STREAM copy bandwidth: 4340.24 MB/sec
STREAM scale latency: 3.62 nanoseconds
STREAM scale bandwidth: 4422.18 MB/sec
STREAM add latency: 2.47 nanoseconds
STREAM add bandwidth: 9704.82 MB/sec
STREAM triad latency: 5.74 nanoseconds
STREAM triad bandwidth: 4177.85 MB/sec
[root@101a05001 /root/lmbench3]
#numactl -C 7 -m 7 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.95 nanoseconds
STREAM copy bandwidth: 4051.51 MB/sec
STREAM scale latency: 3.94 nanoseconds
STREAM scale bandwidth: 4060.63 MB/sec
STREAM add latency: 2.54 nanoseconds
STREAM add bandwidth: 9434.51 MB/sec
STREAM triad latency: 6.13 nanoseconds
STREAM triad bandwidth: 3913.36 MB/sec
[root@101a05001 /root/lmbench3]
#numactl -C 7 -m 10 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 8.80 nanoseconds
STREAM copy bandwidth: 1817.78 MB/sec
STREAM scale latency: 8.59 nanoseconds
STREAM scale bandwidth: 1861.65 MB/sec
STREAM add latency: 5.55 nanoseconds
STREAM add bandwidth: 4320.68 MB/sec
STREAM triad latency: 13.94 nanoseconds
STREAM triad bandwidth: 1721.76 MB/sec
[root@101a05001 /root/lmbench3]
#numactl -C 7 -m 11 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 9.27 nanoseconds
STREAM copy bandwidth: 1726.52 MB/sec
STREAM scale latency: 9.31 nanoseconds
STREAM scale bandwidth: 1718.10 MB/sec
STREAM add latency: 5.65 nanoseconds
STREAM add bandwidth: 4250.89 MB/sec
STREAM triad latency: 14.09 nanoseconds
STREAM triad bandwidth: 1703.66 MB/sec
//在另外一個Socket上測試本NUMA,和Node0性能完全一致
[root@101a0500 /root/lmbench3]
#numactl -C 88 -m 11 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 2.93 nanoseconds
STREAM copy bandwidth: 5454.67 MB/sec
STREAM scale latency: 2.96 nanoseconds
STREAM scale bandwidth: 5400.03 MB/sec
STREAM add latency: 2.28 nanoseconds
STREAM add bandwidth: 10543.42 MB/sec
STREAM triad latency: 4.52 nanoseconds
STREAM triad bandwidth: 5308.40 MB/sec
[root@101a0500 /root/lmbench3]
#numactl -C 7 -m 15 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 8.73 nanoseconds
STREAM copy bandwidth: 1831.77 MB/sec
STREAM scale latency: 8.81 nanoseconds
STREAM scale bandwidth: 1815.13 MB/sec
STREAM add latency: 5.63 nanoseconds
STREAM add bandwidth: 4265.21 MB/sec
STREAM triad latency: 13.09 nanoseconds
STREAM triad bandwidth: 1833.68 MB/sec
Lat_mem_rd 用 core7 訪問Node0和Node15對比結果,隨著數(shù)據的加大,延時在加大,64M時能有3倍差距,和上面測試一致
下圖 第一列 表示讀寫數(shù)據的大小(單位M),第二列表示訪問延時(單位納秒),一般可以看到在L1/L2/L3 cache大小的地方延時會有跳躍,遠超過L3大小后,延時就是內存延時了
測試命令如下
numactl -C 7 -m 0 ./bin/lat_mem_rd -W 5 -N 5 -t 64M ?//-C 7 cpu 7, -m 0 node0, -W 熱身 -t stride
同樣的機型,開 NUMA 比關 NUMA 時延降低了幾倍,同時帶寬提升了幾倍,所以一定要開NUMA
鯤鵬920
#for i in $(seq 0 15); do echo core:$i; numactl -N $i -m 7 ./bin/stream ?-W 5 -N 5 -M 64M; done
STREAM copy latency: 1.84 nanoseconds
STREAM copy bandwidth: 8700.75 MB/sec
STREAM scale latency: 1.86 nanoseconds
STREAM scale bandwidth: 8623.60 MB/sec
STREAM add latency: 2.18 nanoseconds
STREAM add bandwidth: 10987.04 MB/sec
STREAM triad latency: 3.03 nanoseconds
STREAM triad bandwidth: 7926.87 MB/sec
#numactl -C 7 -m 1 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 2.05 nanoseconds
STREAM copy bandwidth: 7802.45 MB/sec
STREAM scale latency: 2.08 nanoseconds
STREAM scale bandwidth: 7681.87 MB/sec
STREAM add latency: 2.19 nanoseconds
STREAM add bandwidth: 10954.76 MB/sec
STREAM triad latency: 3.17 nanoseconds
STREAM triad bandwidth: 7559.86 MB/sec
#numactl -C 7 -m 2 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.51 nanoseconds
STREAM copy bandwidth: 4556.86 MB/sec
STREAM scale latency: 3.58 nanoseconds
STREAM scale bandwidth: 4463.66 MB/sec
STREAM add latency: 2.71 nanoseconds
STREAM add bandwidth: 8869.79 MB/sec
STREAM triad latency: 5.92 nanoseconds
STREAM triad bandwidth: 4057.12 MB/sec
[root@ARM 19:14 /root/lmbench3]
#numactl -C 7 -m 3 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 3.94 nanoseconds
STREAM copy bandwidth: 4064.25 MB/sec
STREAM scale latency: 3.82 nanoseconds
STREAM scale bandwidth: 4188.67 MB/sec
STREAM add latency: 2.86 nanoseconds
STREAM add bandwidth: 8390.70 MB/sec
STREAM triad latency: 4.78 nanoseconds
STREAM triad bandwidth: 5024.25 MB/sec
#numactl -C 24 -m 3 ./bin/stream ?-W 5 -N 5 -M 64M
STREAM copy latency: 4.10 nanoseconds
STREAM copy bandwidth: 3904.63 MB/sec
STREAM scale latency: 4.03 nanoseconds
STREAM scale bandwidth: 3969.41 MB/sec
STREAM add latency: 3.07 nanoseconds
STREAM add bandwidth: 7816.08 MB/sec
STREAM triad latency: 5.06 nanoseconds
STREAM triad bandwidth: 4738.66 MB/sec
海光7280
可以看到跨NUMA(這里設置的一個Socket為一個NUMA Node,等同于跨Socket)RT從1.5上升到2.5,這個數(shù)據比鯤鵬920要好很多。 這里還會測試同一塊CPU設置不同數(shù)量的NUMA Node對性能的影響,所以接下來的測試會列出NUMA Node數(shù)量
[root@hygon8 14:32 /root/lmbench-master]
#lscpu
架構: ? ? ? ? ? ? ? ? ? ? ? ? ? x86_64
CPU 運行模式: ? ? ? ? ? ? ? ? ? 32-bit, 64-bit
字節(jié)序: ? ? ? ? ? ? ? ? ? ? ? ? Little Endian
Address sizes: ? ? ? ? ? ? ? ? ? 43 bits physical, 48 bits virtual
CPU: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 128
在線 CPU 列表: ? ? ? ? ? ? ? ? ?0-127
每個核的線程數(shù): ? ? ? ? ? ? ? ? 2
每個座的核數(shù): ? ? ? ? ? ? ? ? ? 32
座: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2
NUMA 節(jié)點: ? ? ? ? ? ? ? ? ? ? ?8
廠商 ID: ? ? ? ? ? ? ? ? ? ? ? ?HygonGenuine
CPU 系列: ? ? ? ? ? ? ? ? ? ? ? 24
型號: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
型號名稱: ? ? ? ? ? ? ? ? ? ? ? Hygon C86 7280 32-core Processor
步進: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
CPU MHz: ? ? ? ? ? ? ? ? ? ? ? ?2194.586
BogoMIPS: ? ? ? ? ? ? ? ? ? ? ? 3999.63
虛擬化: ? ? ? ? ? ? ? ? ? ? ? ? AMD-V
L1d 緩存: ? ? ? ? ? ? ? ? ? ? ? 2 MiB
L1i 緩存: ? ? ? ? ? ? ? ? ? ? ? 4 MiB
L2 緩存: ? ? ? ? ? ? ? ? ? ? ? ?32 MiB
L3 緩存: ? ? ? ? ? ? ? ? ? ? ? ?128 MiB
NUMA 節(jié)點0 CPU: ? ? ? ? ? ? ? ? 0-7,64-71
NUMA 節(jié)點1 CPU: ? ? ? ? ? ? ? ? 8-15,72-79
NUMA 節(jié)點2 CPU: ? ? ? ? ? ? ? ? 16-23,80-87
NUMA 節(jié)點3 CPU: ? ? ? ? ? ? ? ? 24-31,88-95
NUMA 節(jié)點4 CPU: ? ? ? ? ? ? ? ? 32-39,96-103
NUMA 節(jié)點5 CPU: ? ? ? ? ? ? ? ? 40-47,104-111
NUMA 節(jié)點6 CPU: ? ? ? ? ? ? ? ? 48-55,112-119
NUMA 節(jié)點7 CPU: ? ? ? ? ? ? ? ? 56-63,120-127
//可以看到7號core比15、23、31號core明顯要快,因為就近訪問Node 0的內存,沒有跨NUMA Node(跨Die)
[root@hygon8 14:32 /root/lmbench-master]
#time for i in $(seq 7 8 64); do echo $i; numactl -C $i -m 0 ./bin/stream -W 5 -N 5 -M 64M; done
7
STREAM copy latency: 1.38 nanoseconds ? ?
STREAM copy bandwidth: 11559.53 MB/sec
STREAM scale latency: 1.16 nanoseconds
STREAM scale bandwidth: 13815.87 MB/sec
STREAM add latency: 1.40 nanoseconds
STREAM add bandwidth: 17145.85 MB/sec
STREAM triad latency: 1.44 nanoseconds
STREAM triad bandwidth: 16637.18 MB/sec
15
STREAM copy latency: 1.67 nanoseconds
STREAM copy bandwidth: 9591.77 MB/sec
STREAM scale latency: 1.56 nanoseconds
STREAM scale bandwidth: 10242.50 MB/sec
STREAM add latency: 1.45 nanoseconds
STREAM add bandwidth: 16581.00 MB/sec
STREAM triad latency: 2.00 nanoseconds
STREAM triad bandwidth: 12028.83 MB/sec
23
STREAM copy latency: 1.65 nanoseconds
STREAM copy bandwidth: 9701.49 MB/sec
STREAM scale latency: 1.53 nanoseconds
STREAM scale bandwidth: 10427.98 MB/sec
STREAM add latency: 1.42 nanoseconds
STREAM add bandwidth: 16846.10 MB/sec
STREAM triad latency: 1.97 nanoseconds
STREAM triad bandwidth: 12189.72 MB/sec
31
STREAM copy latency: 1.64 nanoseconds
STREAM copy bandwidth: 9742.86 MB/sec
STREAM scale latency: 1.52 nanoseconds
STREAM scale bandwidth: 10510.80 MB/sec
STREAM add latency: 1.45 nanoseconds
STREAM add bandwidth: 16559.86 MB/sec
STREAM triad latency: 1.92 nanoseconds
STREAM triad bandwidth: 12490.01 MB/sec
39
STREAM copy latency: 2.55 nanoseconds
STREAM copy bandwidth: 6286.25 MB/sec
STREAM scale latency: 2.51 nanoseconds
STREAM scale bandwidth: 6383.11 MB/sec
STREAM add latency: 1.76 nanoseconds
STREAM add bandwidth: 13660.83 MB/sec
STREAM triad latency: 3.68 nanoseconds
STREAM triad bandwidth: 6523.02 MB/sec
如果這塊芯片在BIOS里設置Die interleaving,那么4塊Die當成一個NUMA Node吐出來給OS
#lscpu
架構: ? ? ? ? ? ? ? ? ? ? ? ? ? x86_64
CPU 運行模式: ? ? ? ? ? ? ? ? ? 32-bit, 64-bit
字節(jié)序: ? ? ? ? ? ? ? ? ? ? ? ? Little Endian
Address sizes: ? ? ? ? ? ? ? ? ? 43 bits physical, 48 bits virtual
CPU: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 128
在線 CPU 列表: ? ? ? ? ? ? ? ? ?0-127
每個核的線程數(shù): ? ? ? ? ? ? ? ? 2
每個座的核數(shù): ? ? ? ? ? ? ? ? ? 32
座: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2
NUMA 節(jié)點: ? ? ? ? ? ? ? ? ? ? ?2
廠商 ID: ? ? ? ? ? ? ? ? ? ? ? ?HygonGenuine
CPU 系列: ? ? ? ? ? ? ? ? ? ? ? 24
型號: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
型號名稱: ? ? ? ? ? ? ? ? ? ? ? Hygon C86 7280 32-core Processor
步進: ? ? ? ? ? ? ? ? ? ? ? ? ? 1
CPU MHz: ? ? ? ? ? ? ? ? ? ? ? ?2108.234
BogoMIPS: ? ? ? ? ? ? ? ? ? ? ? 3999.45
虛擬化: ? ? ? ? ? ? ? ? ? ? ? ? AMD-V
L1d 緩存: ? ? ? ? ? ? ? ? ? ? ? 2 MiB
L1i 緩存: ? ? ? ? ? ? ? ? ? ? ? 4 MiB
L2 緩存: ? ? ? ? ? ? ? ? ? ? ? ?32 MiB
L3 緩存: ? ? ? ? ? ? ? ? ? ? ? ?128 MiB
//注意這里bios配置了Die Interleaving Enable
//表示每路內多個Die內存交織分配,這樣整個一個socket就是一個大Die
NUMA 節(jié)點0 CPU: ? ? ? ? ? ? ? ? 0-31,64-95 ?
NUMA 節(jié)點1 CPU: ? ? ? ? ? ? ? ? 32-63,96-127
//enable Die interleaving 后繼續(xù)streaming測試
//最終測試結果表現(xiàn)就是7/15/23/31 core性能一致,因為他們屬于同一個NUMA Node,內存交織分配
//可以看到同一路下的四個Die內存交織訪問,所以4個Node內存延時一樣了(被平均),都不如8Node就近快
[root@hygon3 16:09 /root/lmbench-master]
#time for i in $(seq 7 8 64); do echo $i; numactl -C $i -m 0 ./bin/stream -W 5 -N 5 -M 64M; done
7
STREAM copy latency: 1.48 nanoseconds
STREAM copy bandwidth: 10782.58 MB/sec
STREAM scale latency: 1.20 nanoseconds
STREAM scale bandwidth: 13364.38 MB/sec
STREAM add latency: 1.46 nanoseconds
STREAM add bandwidth: 16408.32 MB/sec
STREAM triad latency: 1.53 nanoseconds
STREAM triad bandwidth: 15696.00 MB/sec
15
STREAM copy latency: 1.51 nanoseconds
STREAM copy bandwidth: 10601.25 MB/sec
STREAM scale latency: 1.24 nanoseconds
STREAM scale bandwidth: 12855.87 MB/sec
STREAM add latency: 1.46 nanoseconds
STREAM add bandwidth: 16382.42 MB/sec
STREAM triad latency: 1.53 nanoseconds
STREAM triad bandwidth: 15691.48 MB/sec
23
STREAM copy latency: 1.50 nanoseconds
STREAM copy bandwidth: 10700.61 MB/sec
STREAM scale latency: 1.27 nanoseconds
STREAM scale bandwidth: 12634.63 MB/sec
STREAM add latency: 1.47 nanoseconds
STREAM add bandwidth: 16370.67 MB/sec
STREAM triad latency: 1.55 nanoseconds
STREAM triad bandwidth: 15455.75 MB/sec
31
STREAM copy latency: 1.50 nanoseconds
STREAM copy bandwidth: 10637.39 MB/sec
STREAM scale latency: 1.25 nanoseconds
STREAM scale bandwidth: 12778.99 MB/sec
STREAM add latency: 1.46 nanoseconds
STREAM add bandwidth: 16420.65 MB/sec
STREAM triad latency: 1.61 nanoseconds
STREAM triad bandwidth: 14946.80 MB/sec
39
STREAM copy latency: 2.35 nanoseconds
STREAM copy bandwidth: 6807.09 MB/sec
STREAM scale latency: 2.32 nanoseconds
STREAM scale bandwidth: 6906.93 MB/sec
STREAM add latency: 1.63 nanoseconds
STREAM add bandwidth: 14729.23 MB/sec
STREAM triad latency: 3.36 nanoseconds
STREAM triad bandwidth: 7151.67 MB/sec
47
STREAM copy latency: 2.31 nanoseconds
STREAM copy bandwidth: 6938.47 MB/sec
intel 8269CY
lscpu
Architecture: ? ? ? ? ?x86_64
CPU op-mode(s): ? ? ? ?32-bit, 64-bit
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?104
On-line CPU(s) list: ? 0-103
Thread(s) per core: ? ?2
Core(s) per socket: ? ?26
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?2
Vendor ID: ? ? ? ? ? ? GenuineIntel
CPU family: ? ? ? ? ? ?6
Model: ? ? ? ? ? ? ? ? 85
Model name: ? ? ? ? ? ?Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
Stepping: ? ? ? ? ? ? ?7
CPU MHz: ? ? ? ? ? ? ? 3200.000
CPU max MHz: ? ? ? ? ? 3800.0000
CPU min MHz: ? ? ? ? ? 1200.0000
BogoMIPS: ? ? ? ? ? ? ?4998.89
Virtualization: ? ? ? ?VT-x
L1d cache: ? ? ? ? ? ? 32K
L1i cache: ? ? ? ? ? ? 32K
L2 cache: ? ? ? ? ? ? ?1024K
L3 cache: ? ? ? ? ? ? ?36608K
NUMA node0 CPU(s): ? ? 0-25,52-77
NUMA node1 CPU(s): ? ? 26-51,78-103
[root@numaopen /home/ren/lmbench3]
#time for i in $(seq 0 8 51); do echo $i; numactl -C $i -m 0 ./bin/stream -W 5 -N 5 -M 64M; done
0
STREAM copy latency: 1.15 nanoseconds
STREAM copy bandwidth: 13941.80 MB/sec
STREAM scale latency: 1.16 nanoseconds
STREAM scale bandwidth: 13799.89 MB/sec
STREAM add latency: 1.31 nanoseconds
STREAM add bandwidth: 18318.23 MB/sec
STREAM triad latency: 1.56 nanoseconds
STREAM triad bandwidth: 15356.72 MB/sec
16
STREAM copy latency: 1.12 nanoseconds
STREAM copy bandwidth: 14293.68 MB/sec
STREAM scale latency: 1.13 nanoseconds
STREAM scale bandwidth: 14162.47 MB/sec
STREAM add latency: 1.31 nanoseconds
STREAM add bandwidth: 18293.27 MB/sec
STREAM triad latency: 1.53 nanoseconds
STREAM triad bandwidth: 15692.47 MB/sec
32
STREAM copy latency: 1.52 nanoseconds
STREAM copy bandwidth: 10551.71 MB/sec
STREAM scale latency: 1.52 nanoseconds
STREAM scale bandwidth: 10508.33 MB/sec
STREAM add latency: 1.38 nanoseconds
STREAM add bandwidth: 17363.22 MB/sec
STREAM triad latency: 2.00 nanoseconds
STREAM triad bandwidth: 12024.52 MB/sec
40
STREAM copy latency: 1.49 nanoseconds
STREAM copy bandwidth: 10758.50 MB/sec
STREAM scale latency: 1.50 nanoseconds
STREAM scale bandwidth: 10680.17 MB/sec
STREAM add latency: 1.34 nanoseconds
STREAM add bandwidth: 17948.34 MB/sec
STREAM triad latency: 1.98 nanoseconds
STREAM triad bandwidth: 12133.22 MB/sec
48
STREAM copy latency: 1.49 nanoseconds
STREAM copy bandwidth: 10736.56 MB/sec
STREAM scale latency: 1.50 nanoseconds
STREAM scale bandwidth: 10692.93 MB/sec
STREAM add latency: 1.34 nanoseconds
STREAM add bandwidth: 17902.85 MB/sec
STREAM triad latency: 1.96 nanoseconds
STREAM triad bandwidth: 12239.44 MB/sec
Intel(R) Xeon(R) CPU E5-2682 v4
#time for i in $(seq 0 8 51); do echo $i; numactl -C $i -m 0 ./bin/stream -W 5 -N 5 -M 64M; done
0
STREAM copy latency: 1.59 nanoseconds
STREAM copy bandwidth: 10092.31 MB/sec
STREAM scale latency: 1.57 nanoseconds
STREAM scale bandwidth: 10169.16 MB/sec
STREAM add latency: 1.31 nanoseconds
STREAM add bandwidth: 18360.83 MB/sec
STREAM triad latency: 2.28 nanoseconds
STREAM triad bandwidth: 10503.81 MB/sec
8
STREAM copy latency: 1.55 nanoseconds
STREAM copy bandwidth: 10312.14 MB/sec
STREAM scale latency: 1.56 nanoseconds
STREAM scale bandwidth: 10283.70 MB/sec
STREAM add latency: 1.30 nanoseconds
STREAM add bandwidth: 18416.26 MB/sec
STREAM triad latency: 2.23 nanoseconds
STREAM triad bandwidth: 10777.08 MB/sec
16
STREAM copy latency: 2.02 nanoseconds
STREAM copy bandwidth: 7914.25 MB/sec
STREAM scale latency: 2.02 nanoseconds
STREAM scale bandwidth: 7919.85 MB/sec
STREAM add latency: 1.39 nanoseconds
STREAM add bandwidth: 17276.06 MB/sec
STREAM triad latency: 2.92 nanoseconds
STREAM triad bandwidth: 8231.18 MB/sec
24
STREAM copy latency: 1.99 nanoseconds
STREAM copy bandwidth: 8032.18 MB/sec
STREAM scale latency: 1.98 nanoseconds
STREAM scale bandwidth: 8061.12 MB/sec
STREAM add latency: 1.39 nanoseconds
STREAM add bandwidth: 17313.94 MB/sec
STREAM triad latency: 2.88 nanoseconds
STREAM triad bandwidth: 8318.93 MB/sec
#lscpu
Architecture: ? ? ? ? ?x86_64
CPU op-mode(s): ? ? ? ?32-bit, 64-bit
Byte Order: ? ? ? ? ? ?Little Endian
CPU(s): ? ? ? ? ? ? ? ?64
On-line CPU(s) list: ? 0-63
Thread(s) per core: ? ?2
Core(s) per socket: ? ?16
Socket(s): ? ? ? ? ? ? 2
NUMA node(s): ? ? ? ? ?2
Vendor ID: ? ? ? ? ? ? GenuineIntel
CPU family: ? ? ? ? ? ?6
Model: ? ? ? ? ? ? ? ? 79
Model name: ? ? ? ? ? ?Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
Stepping: ? ? ? ? ? ? ?1
CPU MHz: ? ? ? ? ? ? ? 2500.000
CPU max MHz: ? ? ? ? ? 3000.0000
CPU min MHz: ? ? ? ? ? 1200.0000
BogoMIPS: ? ? ? ? ? ? ?5000.06
Virtualization: ? ? ? ?VT-x
L1d cache: ? ? ? ? ? ? 32K
L1i cache: ? ? ? ? ? ? 32K
L2 cache: ? ? ? ? ? ? ?256K
L3 cache: ? ? ? ? ? ? ?40960K
NUMA node0 CPU(s): ? ? 0-15,32-47
NUMA node1 CPU(s): ? ? 16-31,48-63
stream對比數(shù)據
總結下幾個CPU用stream測試訪問內存的RT以及抖動和帶寬對比數(shù)據
最小RT最大RT最大copy bandwidth最小copy bandwidth申威3231(2NUMA Node)7.098.752256.59 MB/sec1827.88 MB/sec飛騰2500(16 NUMA Node)2.8410.345638.21 MB/sec1546.68 MB/sec鯤鵬920(4 NUMA Node)1.843.878700.75 MB/sec4131.81 MB/sec海光7280(8 NUMA Node)1.382.5811591.48 MB/sec6206.99 MB/sec海光5280(4 NUMA Node)1.222.5213166.34 MB/sec6357.71 MB/secIntel8269CY(2 NUMA Node)1.121.5214293.68 MB/sec10551.71 MB/secIntel E5-2682(2 NUMA Node)1.582.0210092.31 MB/sec7914.25 MB/sec
從以上數(shù)據可以看出這5款CPU性能一款比一款好,飛騰2500慢的core上延時快到intel 8269的10倍了,平均延時5倍以上了。延時數(shù)據基本和單核上測試Sysbench TPS一致。
lat_mem_rd對比數(shù)據
用不同的NUMA Node上的core 跑lat_mem_rd測試訪問Node0內存的RT,只取最大64M的時延,時延和Node距離完全一致,這里就不再列出測試原始數(shù)據了。
RT變化飛騰2500(16 NUMA Node)core:0 149.976
core:8 168.805
core:16 191.415
core:24 178.283
core:32 170.814
core:40 185.699
core:48 212.281
core:56 202.479
core:64 426.176
core:72 444.367
core:80 465.894
core:88 452.245
core:96 448.352
core:104 460.603
core:112 485.989
core:120 490.402鯤鵬920(4 NUMA Node)core:0 117.323
core:24 135.337
core:48 197.782
core:72 219.416海光7280(8 NUMA Node 和 2 NUMA Node)core0 106.839
core8 168.583
core16 163.925
core24 163.690
core32 289.628
core40 288.632
core48 236.615
core56 291.880
分割行
enabled Die interleaving
core:0 153.005
core:16 152.458
core:32 272.057
core:48 269.441海光5280(4 NUMA Node)core:0 102.574
core:8 160.989
core:16 286.850
core:24 231.197Intel 8269CY(2 NUMA Node)core:0 69.792
core:26 93.107申威3231(2 NUMA Node)core:0 215.146
core:32 282.443
測試命令:
for i in $(seq 0 8 127); do echo core:$i; numactl -C $i -m 0 ./bin/lat_mem_rd -W 5 -N 5 -t 64M; done >lat.log 2>&1
測試結果和numactl -H 看到的Node distance完全一致,芯片廠家應該就是這樣測試然后把這個延遲當做距離寫進去了
最后用一張實際測試Intel E5 的L1 、L2、L3 cache延時圖來加深印象,可以看到在每級cache大小附近時延有個跳躍:

縱坐標是訪問延時 納秒,橫坐標是cache大小 M,為什么上圖沒放內存延時,因為延時太大,放出來就把L1、L2的跳躍臺階壓平了
結論
X86比ARM性能要好
AMD和Intel單核基本差別不大,Intel適合核多的大實例,AMD適合云上拆分售賣
國產CPU還有比較大的進步空間
性能上的差異在數(shù)據庫場景下歸因下來主要在CPU訪問內存的時延上
跨NUMA Node時延差異很大,一定要開 NUMA 讓CPU就近訪問內存,尤其是國產CPU
數(shù)據庫場景下大實例因為鎖導致CPU很難跑滿,建議搞多個mysqld實例
如果你一定要知道一塊CPU性能的話先看 內存延時 而不是 主頻,各種CPU自家打榜一般都是簡單計算場景,內存訪問不多,但是實際業(yè)務中大部分時候又是高頻訪問內存的。
參考資料
十年后數(shù)據庫還是不敢擁抱NUMA?
Intel PAUSE指令變化是如何影響自旋鎖以及MySQL的性能的
lmbench測試要考慮cache等
CPU的制造和概念
CPU 性能和Cache Line
Perf IPC以及CPU性能 CPU性能和CACHE
編輯于 2022-11-14 15:43?IP 屬地浙江
中央處理器 (CPU)
數(shù)據庫
NUMA

評論千萬條,友善第一條
20 條評論
默認
最新

卡拉克西
前兩個我沒啥意見,后三個有臉說是主流?
2022-07-13 · IP 屬地云南

小子
這樣樹新風才能顯出你的能耐
2022-09-15 · IP 屬地貴州

Bill
美國一年大概20萬畢業(yè)生,中國一年有420萬,是人家的20多倍,這也是美國人膽寒的。再給兩年時間,情況就不一樣了。再給五年時間,就會變天。
04-06 · IP 屬地上海

Bill
補充一下,這里的畢業(yè)生是指工科,工程師。
04-06 · IP 屬地上海

Zeratulll

信創(chuàng)市場里后三個確實也是主流。
2022-07-19 · IP 屬地浙江

texttime vage

Intel 8163 IPC是0.67,和我在PostgreSQL下測得數(shù)據基本一致。Oracle可以達到更高的IPC。從8163的perf結果中,看不出來訪存在總周期中的占比??梢蕴砑訋讉€cycle_activity.cycles_l1d_miss、cycle_activity.stalls_mem_any,看看訪存耗用的周期占比。
2022-07-12 · IP 屬地浙江

龔佶敏
感謝分享。特別是這一條:“跨NUMA Node時延差異很大,一定要開 NUMA 讓CPU就近訪問內存,尤其是國產CPU”貌似我們遇到的某些性能問題跟這個有一定的關系。跟廠商客服說NUMA問題他們好像聽不懂,轉發(fā)此文后,他們就比較認真了。
2022-11-17 · IP 屬地北京
趙欣
7h12是64物理核吧
昨天 10:31 · IP 屬地浙江
swordholder
沒測試龍芯嗎
2022-09-22 · IP 屬地廣東
plantegg
點贊超過200就加入龍芯,好像up主都喜歡這么說
2022-11-07 · IP 屬地北京
未設置
龍芯最新的服務器CPU(3C5000、3D5000)給個人一直很少,除非和龍芯的大銷售關系很好能幫你搞……普通人想買到很麻煩的
02-08 · IP 屬地山東
羽生扶蘇
問一下現(xiàn)在鯤鵬怎么樣
2022-09-14 · IP 屬地江西
常成
期待倚天710的測試結果
2022-07-24 · IP 屬地湖南
南昌之星售票系統(tǒng)
請問一些 NUMA-Aware 的調度能減小這個訪問內存速度的影響嗎?
2022-07-23 · IP 屬地浙江
plantegg
南昌之星售票系統(tǒng)
morsel-driver 說的是:15721.courses.cs.cmu.edu 這篇論文吧,morsel-driver 其實不依賴 numa-aware, 這很像協(xié)程,盡量按CPU core數(shù)來設置任務線程數(shù),一個core一個線程,盡量不切換,實際效果上導致了更高的cache命中率和更少的下文切換。這個工作放到 numa-interleave 下一樣對性能提升很大,只是 numa-aware 效果更好了。反過來沒有morsel-driver/協(xié)程,numa-aware也比numa-interleave好。你說的論文很有意思
,好像生產上還沒有用過?
2022-07-27 · IP 屬地北京
南昌之星售票系統(tǒng)
plantegg
哦哦哦,俺是說morsel這種用戶/上層的調度。俺懂你意思了,感謝
2022-07-26 · IP 屬地浙江
plantegg
不能,再去讀下: PolarDB-X:十年后數(shù)據庫還是不敢擁抱NUMA?
2022-07-26 · IP 屬地北京
南昌之星售票系統(tǒng)
plantegg
俺不是說減小訪問速度,是說增加緩存命中率,減小它帶來的影響
2022-07-26 · IP 屬地浙江
plantegg
南昌之星售票系統(tǒng)
numa-aware 改變的是訪問內存,cache命中率在core內部,我理解是不可以的。兩者沒關系,cache命中率基本靠綁核
2022-07-26 · IP 屬地北京

sstack
主流?
2022-07-13 · IP 屬地廣東