E5-2673v4品鉴记录

一次偶然的机会,我在并夕夕刷到了E5-2673v4——只要70出头!想想在2023年,我给我服务器配180块钱一颗的E5-2686v4,而当时E5-2673v4还要三四百,而现在E5-2686v4还能出120块钱,而E5-2673v4已经跌穿地板。这不得买一颗回来品鉴一下?
虽然我的机架式服务器是开不起来了,但是还是有一个垃圾寨板可以品鉴的嘛~
很快啊,我就下单了,买了两个,后续方便给我的SA5212M4当CPU插槽防尘塞(bushi)

基础信息介绍

E5-2673v4这个CPU的规格,在70块钱的价格下,是相当炸裂的:

  • 架构:Broadwell
  • 核心数:20
  • 线程数:40
  • 基础频率:2.3GHz
  • 最大睿频:3.6GHz(这里比较有趣,淘宝的店家都是标3.3GHz,我实测日常使用是可以冲到3.6GHz的)
  • TDP:135W
  • L1 缓存640 KiB(20个核心 × 32 KiB 数据 + 20个核心 × 32 KiB 指令)
  • L2 缓存5 MiB(20个核心 × 256 KiB)
  • L3 缓存50 MiB(所有核心共享)

50MB的大三缓,实测确实可以提高游戏的帧数,在一定程度上弥补主频的劣势。但是因为E5v4的高核心数型号是双环的总线结构,跨环会导致调度的延迟,在游戏内表现就是莫名其妙的掉帧,所以用这个CPU打游戏的话需要一定的使用技巧。
lscpu相关信息:

[chocola@Neko-X99 ~]$ lscpu
架构:                       x86_64
  CPU 运行模式:             32-bit, 64-bit
  Address sizes:             46 bits physical, 48 bits virtual
  字节序:                   Little Endian
CPU:                         40
  在线 CPU 列表:            0-39
厂商 ID:                    GenuineIntel
  型号名称:                 Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
    CPU 系列:               6
    型号:                   79
    每个核的线程数:         2
    每个座的核数:           20
    座:                     1
    步进:                   1
    CPU(s) scaling MHz:      36%
    CPU 最大 MHz:           3600.0000
    CPU 最小 MHz:           1200.0000
    BogoMIPS:               4601.65
    标记:                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe sys
                             call nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmu
                             lqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_dea
                             dline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 pti intel_ppin ssbd ibrs ibpb
                              stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdsee
                             d adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts vnmi md_clear flush_
                             l1d ibpb_exit_to_user
Virtualization features:     
  虚拟化:                   VT-x
Caches (sum of all):         
  L1d:                       640 KiB (20 instances)
  L1i:                       640 KiB (20 instances)
  L2:                        5 MiB (20 instances)
  L3:                        50 MiB (1 instance)
NUMA:                        
  NUMA 节点:                1
  NUMA 节点0 CPU:           0-39
Vulnerabilities:             
  Gather data sampling:      Not affected
  Indirect target selection: Not affected
  Itlb multihit:             KVM: Mitigation: VMX disabled
  L1tf:                      Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
  Mds:                       Mitigation; Clear CPU buffers; SMT vulnerable
  Meltdown:                  Mitigation; PTI
  Mmio stale data:           Mitigation; Clear CPU buffers; SMT vulnerable
  Reg file data sampling:    Not affected
  Retbleed:                  Not affected
  Spec rstack overflow:      Not affected
  Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:                Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP conditional; RSB filling; PBRSB-eIBRS Not affected; BHI Not affect
                             ed
  Srbds:                     Not affected
  Tsa:                       Not affected
  Tsx async abort:           Mitigation; Clear CPU buffers; SMT vulnerable
  Vmscape:                   Mitigation; IBPB before exit to userspace

附上两张CPU的照片:
01.jpg
02.jpg

负载睿频测试

出于好奇,我详细测试了这个CPU的睿频表现。

全核睿频

这个测试就比较有意思了,我测得了两个差别较大的全核睿频:一个是2.6GHz,另一个是2.4GHz,这似乎是和负载类型有关。如果是使用sysbench进行压力测试,例如

sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run

03.png
则全核可以稳定跑在2.6GHz。
使用stress-ng进行压力测试:

stress-ng -c $(nproc) -t 600 

平均频率大概在2.5-2.6GHz之间波动,不太稳定,可能是我寨板供电不行。
04.png
但是,如果是在Blender中进行渲染测试,则全核心睿频就只能跑到2.4GHz了。
05.png
我个人感觉可能和AVX指令集的调用有关,毕竟这个指令集导致CPU功耗爆炸是出了名的。

单核睿频测试

这个测试就比较迷了,因为无论是用stress-ng,还是sysbench,跑单核心,单个核心频率仍未2.6GHz!而不是设想中的全速睿频3.6GHz!
06.png
这非常的奇怪,甚至你仔细观察截图的话,还有非任务负载的核心,居然睿频到3.6GHz了,这是搞的什么鬼?!
而且我平时使用的时候,3.6GHz的睿频也是只会出现一会,马上就掉回去了。这就是这个U比较奇怪的地方。当然,也有可能是我主板的锅,但是不应该吧?单核都跑不上去?另外还有一个说法是这批E5-2673v4在机房高强度工作,加上睿频比较高,给干缩缸了。虽然我感觉可能性不大,因为牙膏厂的U大面积爆雷缩缸的是13代和14代,但是CPU超频超狠了会缩缸这个,确实是有事实依据的。只能是也存在这个可能性吧,但是我无法验证。如果你也有这个U我倒是想看看你的实际使用情况。
后续增加核心数量也测了,就是2.6GHz雷打不动,那看来锁核升频应该是不太可能了。

CPU跑分测试

这部分因为我用的是Linux系统,所以只能测试兼容Linux系统的测试工具了。这里我使用的是Sysbench,结果如下:

[chocola@Neko-X99 ~]$ sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run   
sysbench 1.0.20 (using system LuaJIT 2.1.1720049189)

Running the test with following options:
Number of threads: 40
Initializing random number generator from current time


Prime numbers limit: 20000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:  9626.61

General statistics:
    total time:                          10.0035s
    total number of events:              96321

Latency (ms):
         min:                                    3.46
         avg:                                    4.15
         max:                                   70.42
         95th percentile:                        4.18
         sum:                               400040.83

Threads fairness:
    events (avg/stddev):           2408.0250/9.92
    execution time (avg/stddev):   10.0010/0.00

似乎比我的笔记本R7 5800H还好一点?但是打游戏肯定是拼不过的。

高核打游戏指南

因为前面说了,E5v4的高核型号,是双环的总线结构,跨环会导致严重的Low帧,为了保证帧数的稳定,需要利用taskset让游戏绑定在同一个环的核心进行运行,例如:

taskset -c 0-9 %command%

那如何判断应该绑定那些逻辑处理器呢,我们需要查看lscpu --extended的信息,例如:

[chocola@Neko-X99 ~]$ lscpu --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ    MINMHZ       MHZ
  0    0      0    0 0:0:0:0           是 3600.0000 1200.0000 1200.0100
  1    0      0    1 1:1:1:0           是 3600.0000 1200.0000 1197.8640
  2    0      0    2 2:2:2:0           是 3600.0000 1200.0000 1200.0000
  3    0      0    3 3:3:3:0           是 3600.0000 1200.0000 1200.0000
  4    0      0    4 4:4:4:0           是 3600.0000 1200.0000 1200.0000
  5    0      0    5 8:8:8:0           是 3600.0000 1200.0000 1200.1560
  6    0      0    6 9:9:9:0           是 3600.0000 1200.0000 1600.0000
  7    0      0    7 10:10:10:0        是 3600.0000 1200.0000 1200.0000
  8    0      0    8 11:11:11:0        是 3600.0000 1200.0000 1200.0000
  9    0      0    9 12:12:12:0        是 3600.0000 1200.0000 1200.0000
 10    0      0   10 16:16:16:0        是 3600.0000 1200.0000 1200.0000
 11    0      0   11 17:17:17:0        是 3600.0000 1200.0000 1199.6689
 12    0      0   12 18:18:18:0        是 3600.0000 1200.0000 2300.0330
 13    0      0   13 19:19:19:0        是 3600.0000 1200.0000 1200.0000
 14    0      0   14 20:20:20:0        是 3600.0000 1200.0000 1200.0000
 15    0      0   15 24:24:24:0        是 3600.0000 1200.0000 3600.0000
 16    0      0   16 25:25:25:0        是 3600.0000 1200.0000 1199.9800
 17    0      0   17 26:26:26:0        是 3600.0000 1200.0000 1199.9160
 18    0      0   18 27:27:27:0        是 3600.0000 1200.0000 1200.5140
 19    0      0   19 28:28:28:0        是 3600.0000 1200.0000 1200.0000
 20    0      0    0 0:0:0:0           是 3600.0000 1200.0000 2066.6050
 21    0      0    1 1:1:1:0           是 3600.0000 1200.0000 1199.9760
 22    0      0    2 2:2:2:0           是 3600.0000 1200.0000 1200.0000
 23    0      0    3 3:3:3:0           是 3600.0000 1200.0000 1200.0000
 24    0      0    4 4:4:4:0           是 3600.0000 1200.0000 1200.0000
 25    0      0    5 8:8:8:0           是 3600.0000 1200.0000 1200.0000
 26    0      0    6 9:9:9:0           是 3600.0000 1200.0000 1200.0000
 27    0      0    7 10:10:10:0        是 3600.0000 1200.0000 1200.0129
 28    0      0    8 11:11:11:0        是 3600.0000 1200.0000 1200.0000
 29    0      0    9 12:12:12:0        是 3600.0000 1200.0000 1200.0000
 30    0      0   10 16:16:16:0        是 3600.0000 1200.0000 1200.0000
 31    0      0   11 17:17:17:0        是 3600.0000 1200.0000 1200.0000
 32    0      0   12 18:18:18:0        是 3600.0000 1200.0000 1200.0000
 33    0      0   13 19:19:19:0        是 3600.0000 1200.0000 1200.0000
 34    0      0   14 20:20:20:0        是 3600.0000 1200.0000 1200.0000
 35    0      0   15 24:24:24:0        是 3600.0000 1200.0000 2300.2490
 36    0      0   16 25:25:25:0        是 3600.0000 1200.0000 1200.0000
 37    0      0   17 26:26:26:0        是 3600.0000 1200.0000 1200.0000
 38    0      0   18 27:27:27:0        是 3600.0000 1200.0000 1200.0000
 39    0      0   19 28:28:28:0        是 3600.0000 1200.0000 1200.0000

在这个输出中,最核心的秘密藏在 CPU(逻辑线程)和 CORE(物理核心编号)这两列的对应关系里。要正确进行绑核,我们需要分三步来解析这份检测信息:

第一步:看懂物理核心(CORE)的“断层”与双环分布
你会发现 CORE 这一列的数字并不是连续的。它是 0-4、接着跳到 8-12、再跳到 16-20、最后是 24-28。这就是典型的原厂 24 核(HCC 晶圆)被物理屏蔽掉 4 个核心后,切出来的 20 核产品。
根据 Broadwell-EP 的对称双环架构设计,主板在扫描时是按顺序分配的,这 20 个物理核心被对半分在了两个环上:

  • 左环(10个物理核): 对应前面一半,即 CPU 编号的 0 到 9
  • 右环(10个物理核): 对应后面一半,即 CPU 编号的 10 到 19

第二步:找准超线程(Hyper-Threading)的影子
接着往下看 CPU 编号 20 到 39 的部分。对照后方,你会发现它们的 CORE 编号跟上半部分完全一致(0-4, 8-12...)。这说明 20-39 并不是独立的物理核心,而是 0-19 对应的虚拟超线程

  • 例如:CPU 0CPU 20,其实都在同一个物理核心(CORE 0)上运行。它们同属左环。

第三步:正确的绑核实战(拒绝跨环!)
如果我们要让游戏跑在“同一个环”里,绝对不能简单粗暴地绑定 0-150-19,因为这会直接横跨左右两个环,导致灾难性的跨环惩罚!正确的做法是把游戏框死在“左环”或“右环”内。

  • 方案 A(满血单环,物理核+超线程): 将游戏绑定在左环的所有 10 个物理核,以及它们一一对应的超线程上。

    taskset -c 0-9,20-29 %command%
  • 方案 B(极致低延迟,纯物理核): 很多吃单核性能的游戏(如 CS:GO、PUBG)对超线程并不感冒,超线程反而可能增加内部调度延迟。我们可以只取左环的前 8 个纯物理核心,彻底避开超线程和右环。

    taskset -c 0-7 %command%

通过这种精准的“外科手术式”绑核,Linux 调度器就被戴上了“紧箍咒”,游戏的所有线程、内存寻址、L3 缓存命中,都会被牢牢锁在同一个物理环路内,从而彻底告别跨环带来的严重卡顿和 1% Low 帧跳水问题。

实测对于CS2,绑定0-7核心后,帧数更加稳定,严重的Low帧得到缓解,有趣的是,绑定0-9核心的帧数反而比绑定0-7核心要低一些。
但是对于其他一些游戏,限制核心运行反而会是负收益,例如赛博朋克2077,在不限制的情况下Low帧问题本来就不严重,限制核心运行反而造成了帧数下降。
所以具体要不要这样子操作去绑定核心运行游戏,还是要看具体游戏的具体情况来处理。
不过总的来说,70块钱的20核的E5,我只能说这个价格还要什么自行车!