服务器CPU知识手册

📌 基本概念与功能

定义与作用

服务器CPU负责处理和执行系统指令,与普通CPU相比,服务器CPU需满足:高并发处理能力,高稳定性,长时间运行可靠性,更多核心与线程,更强扩展性;CPU包括运算逻辑部件,寄存器部件和控制器等

目前CPU内部已经整合了内存控制器DMI,pci链接通信QPI(Intel)

核心组成

  • 控制单元:负责指令提取与解码
  • 算术逻辑单元(ALU):执行各种运算操作
  • 寄存器:临时存储数据的高速存储单元
  • 各类寄存器类型:
    • 累加寄存器
    • 标志寄存器
    • 程序计数器
    • 基址寄存器
    • 变址寄存器
    • 通用寄存器
    • 指令寄存器
    • 栈寄存器

指令执行流程

  1. 取指:从内存中提取指令
  2. 解码:控制单元解析指令
  3. 执行:ALU执行运算
  4. 访存:必要时访问内存
  5. 写回:将结果写回寄存器或内存

关键性能参数

  • 主频:CPU时钟频率,决定单核处理速度

    • 计算公式:主频 = 外频 × 倍频
    • 3.0GHz主频,一秒钟可以产生30亿个脉冲信号
    • 基频:CPU内存时钟频率
    • 倍频:CPU通常就是在内部设计有一个锁相环频率发生器,对于输入的时钟信号进行分频处理,按照一定比例提高输入的外频频率,从而得到CPU的实际工作频率,这个比例就称之为倍频系数(简称倍频)
    • 外频:除cpu外部的一些设备工作的频率,一般工作在较低的频率下
    • 睿频:intel推出的自动提升处理器频率的技术,需要在BIOS下做一些性能相关的预制设置关掉节能相关项
  • 核心数:物理核心数量,决定并行处理能力

  • 线程数:通过超线程技术(如Intel的Hyper-Threading,AMD的SMT),单核可虚拟为多逻辑核

  • 缓存:CPU缓存是芯片上的小型高速内存(基于SRAM),临时存储CPU需要快速【预取】的数据

    • L1缓存:最快容量最小,范围128KB到2MB之间
    • L2缓存:响应速度和容量居中,可以每个核心独有,也可以共享,范围256KB到32MB之间
    • L3缓存:响应速度最慢容量最大,通常都是共享的,范围1MB到128MB之间
  • 架构:Intel和AMD的x86架构的复杂指令集CISC,IBM是PowerPC架构和ARM公司的ARM架构的精简指令集RISC,目前还有 RISC-V开源免费的架构

    • ARM架构:进阶精简指令集,国产的飞腾,鲲鹏
    • x86_64架构:主要就是Intel,AMD,国产海光(amd授权架构)
    • MIPS架构:精简指令集,07年中科院计算机研究所获得处理器IP的全部专利和总线,指令集授权,2021年信息技术应用创新主论坛发布龙芯自主指令系统架构(LoongArch),主要用于国防科技、交换机、路由器等,在性能上和ARM还有一定差距
    • RISC-V架构:新兴的架构,开源免费,不需要授权费,近几年受关注,前景巨大?
  • 制程工艺:指制造CPU的集成电路的精细度,14nm,10nm,7nm等

  • 内存通道数:CPU能够同时与内存进行数据交互的独立通道的最大数量

  • 功耗TDP:CPU满载处理器芯片散发出来的热量需要通过散热解决方案散发出来的平均功率值单位为瓦(W)

  • NUMA:Non-Uniform Memory Access非统一内存访问,是为了优化多处理器系统中内存访问性能的重要架构设计,将系统中的内存划分为多个本地内存区域,每个区域与特定的一组处理器核心相对应,形成一个个相对独立的NUMA节点,numa简介

  • SNC:Sub NUMA Clustering子非统一内存访问集群,一种与计算机系统内存架构和处理器性能优化技术,在NUMA架构下进一步优化CPU访问内存的性能

  • PCU:CPU内Power Control Unit功耗控制单元,PCU以1ms速度实时检测核心的温度、电流及功耗等参数

  • 可扩展性:双路(一个主板装两个CPU),四路(一个主板装四个CPU)

  • 虚拟化:intel的VT-x

  • PCIe总线:cpu支持的pcie速率和通道数

  • UPI,CXL2.0,CPU封装(LGA,PGA和BGA)和接口

CPU研发阶段样品

  • Engineering Sample(ES) - 工程样品阶段
  • Qualification Sample(QS) - 验证样品阶段
  • Commercial Sample(CS) - 商业样品阶段

多核与多处理器技术

  • 片内互联:

    • Intel的Mesh架构:二维网格布局
    • AMD的Infinity Fabric:优化多核间通信效率
  • 片间互联:

    • UPI (Ultra Path Interconnect)
    • QPI (QuickPath Interconnect)
    • 提升多处理器服务器扩展性

服务器CPU型号解析

  • Intel Xeon系列:

    • 型号示例:Platinum 8260
    • 首位数字代表代际(8为第二代可扩展处理器)
    • 后缀标识特性(N为网络优化,T为功耗优化)
  • AMD EPYC系列:

    • 采用Chiplet设计
    • 通过高带宽互联整合多计算单元
  • Intel和AMD服务器CPU速查表

业务选型考量因素

  • 计算密集型:优先考虑高核心数、高主频
  • 内存密集型:优先考虑内存通道数和内存容量
  • I/O密集型:优先考虑PCIe通道数和带宽
  • 虚拟化环境:考虑虚拟化扩展指令集支持
  • 高性能计算:考虑向量计算能力和专用指令集

Intel和AMD服务器CPU命名规则

Intel的UPI和AMD的xGMI的CPU互联带宽

服务器CPU数量超过一颗时都需要采用互联技术实现多颗CPU之间的通信

Intel的CPU互联技术QPI或UPI

ADM的CPU互联技术xGMI

Intel CPU开机时序解析

系统会在不同的电源状态Power States间转换:

  • G3 (机械关机/深度睡眠): 完全断电(除了RTC)。
  • S5 (软关机): 系统关闭,但电源仍可由按钮或网络唤醒,主板有部分待机电压。
  • S4 (休眠): 内存内容保存到硬盘,系统深度休眠。
  • S3 (睡眠/挂起到内存): CPU停止工作,但内存保持供电以维持内容。
  • S0 (工作状态): 系统完全运行。
  • S0ix (现代待机低功耗空闲): S0状态下的低功耗模式。
  • C10: 处理器深度封装 C-state。
  • Pseudo-G3 (pG3 - 伪G3): 平台特定的低功耗状态,可能只有 VCCRTC 和最少的唤醒逻辑供电。

核心组件,处理器(Processor/CPU/Soc):核心计算单元,发出许多控制信号;平台逻辑(Platform Login)通常由嵌入式控制器(EC - Embedded Controller)管理,负责协调电源时序,服务器上CPLD;电压调节器(VR - Voltage Regulator)提供各种所需的电压轨。

信号类型

  • 电源轨 (Power Rails): 提供电压,如 VCCRTC, VCCPRIM_*, VDD2, VCCCORE
  • 电源就绪信号 (Power Good Signals): 表明某个或某组电源轨已稳定,如 RSMRST_PWRGD, ALL_SYS_PWRGD, IMVP_VR_READY
  • 控制信号 (Control Signals): 启用/禁用 VR 或指示状态转换,如 SLP_S*, PRIM_VR_EN, PLT_PWROK, SYS_PWROK
  • 复位信号 (Reset Signals): 在电源稳定前将组件保持在复位状态,如 RTCRST#, RSMRST#, PLTRST#, ESPI_RESET#
  • 睡眠信号 (Sleep Signals - SLP_*): 处理器输出,指示期望的睡眠状态 (SLP_S5#, SLP_S4#, SLP_S3#, SLP_A#, SLP_SO#)。平台使用这些信号控制电源平面。
  • eSPI 虚拟线 (eSPI Virtual Wires): 许多传统的硬件信号(如 SLP_S*, PRIMPWRDNACK, PRIMACK#)可以通过 eSPI 总线在处理器和 EC 之间传输,这可能改变相对于硬连线信号的时序。

参考链接:服务器完整上电时序解读


📌 国产CPU

国产CPU主要包括以下几类:兆芯,海光,飞腾,鲲鹏,龙芯,申威

详细规格可参考:国产6大CPU最新规格概述

2018年10月,海光CPU正式获得微软公司WindowsServer2019的认证支持,2019年2月,海光CPU正式获得VMWare公司ESXI7.0的认证支持,2019年3月,海光CPU正式获得Redhat、SUSE等公司LinuxOS的认证支持,2021年8月,海光CPU完成了与阿里云的兼容性互认证。海光CPU产品得到了业界主流操作系统和云计算厂商的认证认可。


📌 性能测试方法

常见的CPU性能测试工具,speccpu最常使用,Cinebench,3DMark,PCMark,Sysbench,CPU-Z,AIDA64,SuperPI,Prime95(P95)

speccpu测试

SPEC CPU 是由 SPEC(Standard Performance Evaluation Corporation,标准性能评估公司)推出的一系列用于对 CPU 进行基准测试的工具集,用于精准评估 CPU 性能的权威测试工具,历经了多个版本的迭代更新speccpu2000,speccpu2006,speccpu2017

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
# [下载speccpu2017的镜像文件](https://pan.baidu.com/s/1kMoMJ5Ufg5oZql4HjyacAg#list/path=%2F)提取码5thr
# 安装相关依赖包
yum install -y libnsl.x86_64, gcc, gcc-c++, libxml2.x86_64, libgfortran, libnsl, libnsl2, gcc-gfortran, g++, libaio-devel
# 挂载镜像文件
mount -t iso9660 cpu2017-1.0.2.iso /mnt && cd /mnt
# 安装
./install.sh -d /root/cpu2017 -f
# 安装报错
# specperl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory
# 解决办法
yum install -y libnsl.so
find / -name libnsl.so
ln -s /lib64/libnsl.so.3.0.0 /lib64/libnsl.so.1
# 修改软件配置文件gcc路径
# 设置睿频模式
cpupower frequency-set -g performance
cpupower -c all frequency-set -g performance
# 查看频率
watch -n1 “cat /proc/cpuinfo | grep "cpu MHz"
# BIOS下打开performce模式,关闭虚拟化,开启turbo,numa,关节能cstate和mwait
# 测试占用内存太大,需要放开限制
ulimit -s unlimited
# 测试指令
./runcpu -c …/config/Example-gcc-linux-aarch64.cfg intrate
# 重跑清缓存数据:speccpu清除缓存:rm -fr benchspec/CPU/<em>/run/</em>

原文链接:https://blog.csdn.net/qq_41897488/article/details/143367894

UnixBench测试(用于测量单核和多核性能):

1
2
3
4
5
6
7
8
9
10
<em>#下载并安装</em>
wget https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz
tar -zxvf v5.1.3.tar.gz
cd byte-unixbench-5.1.3/UnixBench
make
<em># 单核测试</em>
./Run -c 1
<em># 多核测试(先获取CPU线程数)</em>cat /proc/cpuinfo | grep "processor" | wc -l
./Run -c {core}
<em># 测试结束后参考INDEX数值评估性能</em>

SuperPI计算(测试通过计算π值测试CPU计算能力):

1
2
3
4
5
6
7
8
<em>#下载并编译</em>
git clone https://github.com/Fibonacci43/SuperPI.git
cd ./SuperPI
gcc -O -funroll-loops -fomit-frame-pointer pi_fftcs.c fftsg_h.c -lm -o pi_css5

<em># 计算精度为1<<22=4194304的π值</em>
./pi_css5 $((1<<22))
<em># 计算时间越短表示计算能力越强# 可用于计算圆周率小数点后的3200万位数</em>

stress-ng压测cpu,内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 下载附件  stress-ng.zip
#上传到linux系统中并解压,root权限执行
chmod +x stress-ng
#常规压测命令有以下三个:
#内存压测:
./stress-ng --vm 128 --vm-bytes 96% -t 2m
cpu压测:
./stress-ng -c 0 --cpu-method all -t 2m
#指定cpu核心压测:
taskset -c 41-63 stress-ng --cpu 23 --cpu-method all –t 2m
#参数解释:
# --vm 128 指的是启动128个线程给内存压力,根据实际cpu线程数指定。
# --vm-bytes 96% 指的是最多使用96%的内存,根据内存容量指定。
# -t 2m 指的是压测2分钟,根据实际需求指定。
# -c 0 指的是压测所有cpu核心。
# --cpu-method all 指的是让cpu是用多种计算方法或算力进行计算,模拟cpu使用负载。
# taskset -c 41-63指的是指定压测41-63核心。
#--cpu 23指定使用多少个cpu核心来压测,与上一个指定压测的核心数量相同。
# 命令组合:
watch -n 20 [压测命令]
# 每次压测命令执行完毕后等待20秒,开始下一轮压测,模拟压力起伏。
nohup watch -n 20 [压测命令] &
#把压测放入后台运行,不影响前台操作。通过ssh登录退出后不影响后台任务(注:通过终端工具如xshell等,ssh到linu系统的,必须使用 exit 指令退出,直接关闭端口会停止后台任务。)

性能调优

BIOS性能项设置

打开performance模式,关闭虚拟化相关设置,开turbo,numa,关节能Cstate和mwait

OS配置

对于4k页表的操作系统,在跑int整型时建议配置大页内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# OS页表大小查询命令:
getconf PAGESIZE
#在配置前需要先安装大页库文件:
yum -y install libhuge
echo 100000 > /proc/sys/vm/nr_hugepages
export HUGETLB_MORECORE=yes
export LD_PRELOAD=/usr/lib64/libhugetlbfs.so
# 系统下睿频设置:系统下使用命令设置
cpupower frequency-set -g performance
cpupower -c all frequency-set -g performance
# 或者写进/etc/default配置文件锁频
cd /etc/default
vim grub
# 在GRUB_CMDLINE_LINUX这一行中的quiet后面增加 processor.max_cstate=0 intel_idle.max_cstate=0 idle=poll,保存后退出vim
sed -i ‘s/GRUB_CMDLINE_LINUX=“crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet”/GRUB_CMDLINE_LINUX=“crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet processor.max_cstate=0 intel_idle.max_cstate=0 idle=poll”/g’ /etc/default/grub
# 使新增加的参数生效,重新生成grub.cfg
find / -name grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg #-o 后接 grub.cfg文件在本机路径
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#重启服务器
reboot
#进入系统后,若失效,则执行
cpupower -c all frequency-set -g performance设置cpu的所有核为性能模式
#使用命令turbostat 1检查cpu的所有核的实际运行频率

升级gcc和glibc版本,系统自带的gcc版本一般较低

绑核设置

1
2
3
4
5
6
7
8
9
# 在配置文件中修改copies和thread以及相应的绑核
# 通过taskset numactl做绑核设置,单核不做绑核会一直换核心
# 测试指令前加taskset -c CPU核心数:
taskset -c 5 runcpu --config=test.cfg --tune=base --iterations=1 --threads=1 600.perlbench_s 602.gcc_s 605.mcf_s 620.omnetpp_s 623.xalancbmk_s 625.x264_s 631.deepsjeng_s 641.leela_s 648.exchange2_s 657.xz_s
# numactl -C:用于指定要绑定的 CPU 核心编号: 测试指令前加numactl -c CPU核心数
yum install numactl -y
dmesg | grep -i numa
# 查看输出结果: 如果输出结果为: No NUMA configuration found 说明numa为disable,如果不是上面的内容说明numa为enable
# 测试指令前加numactl -c CPU核心数:

编译参数优化

如下为SPECcpu2017 Rate FP的优化参数: OPTIMIZE = -Ofast -g -pipe -mcpu=cortex-a72+crypto+crc -march=armv8-a+crypto+crc -funroll-loops Int和fp的编译参数不一样,具体参考cfg附件内相关部分内容

透明大页

1
2
3
4
5
6
# 进行SpeedFp的时候需要设置以下3个变量,关闭THP透传大页后再运行,以优化性能
export OMP_STACKSIZE=1G
export OMP_WAIT_POLICY=active
export OMP_PROC_BIND=true
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

国内外CPU技术发展趋势


📚 参考资料