最近看同事给大家介绍了amd最新技术,整理一下CPU的基础知识,还差内存了,哈哈哈哈
1.什么是CPU?
CPU(*处理单元)是计算机的大脑,负责处理和执行指令,CPU包括运算逻辑部件、寄存器部件和控制部件等,英文Logic components;运算逻辑部件,可以执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。该芯片位于设备内部主电路板(主板或主板)上的特殊座(插槽)中。实物如下图,左为散热器一面,右为主板一面
CPU指令执行过程:CPU到底是怎么一条条的执行指令的呢?几乎全部的冯·诺伊曼型计算机的CPU,工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数、结果写回。
安装CPU要注意均匀涂抹散热膏(硅脂)在散热器与CPU之间,CPU上主板上散热器上的小三角标志要一致,安装螺丝按照标识顺序拧,否则可能导致CPU受压力损坏,注意主板上针脚部分不要碰到很脆弱容易弯折,如果针脚弯了可以尝试拿镊子轻轻挑回,修复不好的话可能整个主板都报废了
2.CPU参数
CPU的几个重要参数:主频、核心、线程、缓存、架构
主频 :3.0GHz、3.7GHz等就是CPU的主频,CPU的运算速度,一秒钟可以产生30亿个脉冲信号,
核心core:Core(s) per socket: 144就是144核心的CPU,为了提高性能,cpu 厂商开始在单个物理 cpu 上增加核心(实实在在的硬件存在),也就出现多核心 cpu(multiple cores)
物理 cpu 数:主板上实际插入的 cpu 硬件个数(socket)
总的逻辑 cpu 数 = 物理 cpu 数 * 每颗物理 cpu 的核心数 * 每个核心的超线程数
线程:CPU(s): 288 一般一个核心对应了一个线程,而intel开发出了超线程技术,1个核心能够做到2个线程计算,而6个核心则能够做到12个线程,超线程技术的好处就是无需增加物理核心就可以明显的进步CPU多线程功能,
缓存:CPU 缓存是位于 CPU 芯片上的小型高速内存(基于 SRAM),它的主要作用是临时存储 CPU 可能需要快速访问的「预取」数据。这样做的目的是为了避免因为 RAM 的限制而造成 CPU 的性能瓶颈。缓存也决定着CPU的性能,由于服务器CPU对运算性能要求高,所以服务器CPU往往应用了最先进的工艺和技术,并且配备了一二三级缓存L1 缓存:最快但容量最小,通常为每个核心分配,容量范围在 128 KB 到 2 MB 之间。
L2 缓存:响应速度和容量居中,可以为每个核心独有,也可以是共享的,容量量范围在 256 KB 到 32 MB 之间。
L3 缓存:响应速度最慢但容量最大,通常是共享的,容量范围在 1 MB 到 128 MB 之间。
架构:同一系列CPU的一个规范,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。Intel、AMD的CPU是X86架构的,而IBM公司的CPU是PowerPC架构,ARM公司是ARM架构。指令集是CPU执行的基本命令集合,CPU是负责运算的,但是它需要在什么时候运算,具体做哪些运算,得听操作系统指令。系统程序发出的各种指令,在被执行前,需要翻译成CPU能听懂的语言。这个翻译官,就是指令集(英文缩写ISA)
指令集分为复杂指令集(CISC)和精简指令集(RISC)两种主要类型。
复杂指令集(CISC):指令集中的一条指令可以完成一个复杂的动作
特点:包含大量指令,可处理复杂操作。
目的:减少程序中指令的数量,提高效率。
示例:Intel的X86架构。
精简指令集(RISC):要完成一个动作,需要很多条指令集里面的指令才能完成
特点:指令数量较少,每条指令执行时间较短。
目的:简化处理器设计,提高性能。
示例:ARM架构。
ARM架构:进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),像国产的飞腾鲲鹏都是ARM架构的CPU
x86_64架构:x86架构是重要地可变指令长度的CISC(复杂指令集电脑,Complex Instruction Set Computer)。intel AMD 的CPU都是X86架构
MIPS架构:(Microprocessor without interlocked piped stages)是世界上很流行的一种RISC处理器。采用精简指令系统计算结构(RISC)来设计芯片。RISC具有设计更简单、设计周期更短等优点,2007年8月16日-MIPS科技宣布,中科院计算机研究所的龙芯*处理器获得其处理器IP的全部专利和总线、指令集授权。2021年信息技术应用创新主论坛发布龙芯自主指令系统架构(LoongArch),主要用于国防科技、交换机、路由器等,在性能上和ARM还有一定差距
RISC-V架构:特点:一个新兴的架构,开源免费,不需要授权费。应用:近几年开始受到关注,前景巨大。
微架构是指 CPU 内部的具体设计和组织方式,用于执行指令集规定的操作。需要注意的是,即便采用相同指令集,不同 CPU 厂商也可能采用各自独特的微架构。
厂商:英特尔与AMD
IntelCPU命名规则:英特尔处理器的代码名代号:服务器 CPU 的代际发展和 PC 家用 CPU 的过程基本上是一致的,但在命名方式上有所不一样。服务器 CPU 的代际从 2017 的 Skylake 开始,命名为了第一代可扩展处理器。接下来的代际命名都是在这个基础之上更新。
制程工艺:制程工艺是指制造CPU时的集成电路精细度,如28nm、14nm、10nm、7nm(纳米),一般来说这个数字越小代表制造精度越好
至强6还在史上首次兵分两路:
一是代号Sierra Forest、E核设计的至强6000E系列,包括6700E/6900E;
二是代号Granite Rapids、P核设计的至强6000P系列,包括6900P/6700P/6500P/6300P。
至强6没有采用消费级酷睿P核+E核的异构架构设计,而是分成了两个不同的体系,原因在于服务器、数据中心、网络、边缘等领域的需求是截然不同的。
P核架构(性能核心)的Granite Ridge一如传统至强,针对计算密集型应用、AI负载等需要尽可能高性能的应用做优化。
E核架构(效能核心)的Sierra Forest则面向高密度、可扩展负载等非常在意高能效的应用做优化。
同时,二者在硬件平台、软件开发堆栈上彼此共享,可以说是分工不分家。
异构计算方面,至强6处理器作为英特尔首代支持CXL 2.0规范的处理器
AMD:AMD来说,其最受人欢迎的地方,就是它良好的超频性能和超级性价比的价格,这是它目前占有处理器市场份额的根本原因,也是它对比老牌英特尔的最大优势
CPU研发阶段样品
Engineering Sample(ES) - 工程样品阶段
Qualification Sample(QS) - 验证样品阶段
Commercial Sample(CS) - 商业样品阶段
完成 CS 阶段的测试后,就可以进入大规模生产阶段
基频:默认频率标注是4GHz,意味着它内部时钟频率为4GHz就是基频
倍频:CPU通常就是在内部设计有一个锁相环频率发生器,对于输入的时钟信号进行分频处理,按照一定比例提高输入的外频频率,从而得到CPU的实际工作频率,这个比例就称之为倍频系数(简称倍频)
外频:Intel提出了倍频的概念(下面讲述),并且提出了影响至今的一个CPU主频计算公式:主频=外频 X 倍频,外频的提出可以让主板外部的设备工作在较低的频率下,并且还能正确地CPU进行交流。
睿频 全核睿频和最大睿频:睿频是英特尔推出的一种自动提升处理器频率的技术。当处理器检测到当前工作负载需要更高的性能时,会自动提高处理器的时钟频率,使其在短时间内运行在高于默认频率的状态下。全核睿频是处理器的所有核心都处于工作状态时,能够稳定运行的最高频率。最大睿频是处理器单个核心能够达到的最高频率。
睿频设置需要在BIOS下做一下性能相关的预置设置关掉节能相关项,
内存最大通道:内存最大通道数是指 CPU 能够同时与内存进行数据交互的独立通道的最大数量,一个通道最多可以装2根内存会发生降频,还要看 CPU 的前端总线频率最高支持到多大频率
功耗TDP:TDP 是指在处理器处于特定工作负载下(满载),处理器芯片散发出来的热量需要通过散热解决方案散发出去的平均功率值单位为瓦(W)
x86:泛指一系列基于 Intel 8086 且向后兼容的*处理器指令集架构。
x86-64:又称 x64,即英文词 64-bit extended,64 位拓展 的简写,是 x86 架构的 64 位拓展,向后兼容于 16 位及 32 位的 x86 架构。
同时多线程技术(simultaneous multithreading)和 超线程技术(hyper–threading/HT):本质一样,是为了提高单个 core 同一时刻能够执行的多线程数的技术(充分利用单个 core 的计算能力,尽量让其“一刻也不得闲”)。simultaneous multithreading 缩写是 SMT,AMD 和其他 cpu 厂商的称呼。 hyper–threading 是 Intel 的称呼,可以认为 hyper–threading 是 SMT 的一种具体技术实现。
Numa:NUMA(Non-Uniform Memory Access,非统一内存访问)技术是一种为了优化多处理器系统中内存访问性能的重要架构设计,NUMA 技术则打破了传统处理器对所有内存模块的访问时间是相同的,就好像所有内存都处于同等 “距离” 位置供处理器访问模式,它将系统中的内存划分为多个本地内存区域,每个区域与特定的一组处理器核心相对应,形成一个个相对独立的 NUMA 节点
SNC(Sub NUMA Clustering):子非统一内存访问集群,是一种与计算机系统内存架构和处理器性能优化相关的技术,具有多个处理器或多核处理器的计算机系统中,存在非统一内存访问(NUMA)架构的情况较为常见。NUMA 架构下,不同的处理器核心对本地内存(靠近自身的内存)的访问速度通常比访问远程内存(距离自身较远的内存)要快。
Sub NUMA Clustering 则是在此基础上进一步细分和优化这种内存访问关系的一种方式。它将系统中的处理器核心、内存等资源按照一定规则划分成不同的集群,每个集群内部有相对独立的 NUMA 特性,并且在集群之间也存在特定的内存访问和交互规则,以此来提升系统整体的性能和资源利用效率。
睿频 Turbo Boost技术:拥有Turbo Boost技术的CPU每一个核心都有自己的PLL(Phase Locked Loop,锁相环)电路,这样每个核心的电压和频率都可以独立控制,为此Intel专门在CPU内部设计了PCU(Power Control Unit,功耗控制)单元,PCU会以1ms(每秒1000次)的速度实时监测这四个核心的温度、电流及功耗等参数,因此又有Turbo Boost频率可以根据负载需要调整CPU的频率。同时由于参与到运算的核心数越多,控制起来就更为复杂,所以一般核心数目越多,能达到最高频率越低。
英特尔® Speed Select 技术 - Performance Profile(英特尔® SST-PP):通过BISO配置项可设置使用全部核心或部分核心
可扩展性: 2S双路(Two Sockets)一台服务器机箱内最多安装两颗 CPU
机箱2U 4U:“U” 是一种表示机箱高度的单位,1U 等于 44.45 毫米,
1P 2P:“CPU 1P” 和 “CPU 2P” 主要区别在于服务器机箱内实际安装的 CPU 数量
英特尔虚拟化技术 (VT-x) :将计算机的物理资源(如 CPU、内存、硬盘、网络等)进行抽象化处理,使得多个虚拟机(VM)可以共享这些物理资源
PCIe总线:一种高速串行计算机扩展总线标准
UPI总线:英特尔公司推出的一种高速、低延迟的片内互联总线技术,主要用于连接多个处理器核心以及处理器与其他相关组件(如高速缓存等)
CXL 2.0 : CXL 2.0 是 Compute Express Link(CXL)协议的一个重要版本,具有多方面的特性和改进,CXL 2.0 是在 PCIe 5.0 的基础上发展而来,利用了 PCIe 5.0 的物理层和电气接口,保持了与 PCIe 设备的兼容性,扩展更多内存资源
CPU封装和接口:目前CPU封装有三种,分别是LGA、PGA以及BGA,intel和AMD采用的封装方式不同,所以两者无法兼容,说白点就是intel CPU无法使用AMD的主板,AMD CPU无法使用intel的主板,就算是相同的封装方式,接口不同也无法兼容
3.CPU性能测试的工具
常见的CPU性能测试工具有很多speccpu是最常用的一个,Cinebench,3DMark,PCMark,Sysbench,CPU-Z,AIDA64,SuperPI,Prime95(P95)
3.1speccpu介绍
Speccpu: SPEC CPU 是由 SPEC(Standard Performance Evaluation Corporation,标准性能评估公司)推出的一系列用于对 CPU 进行基准测试的工具集,用于精准评估 CPU 性能的权威测试工具,历经了多个版本的迭代更新speccpu2000,speccpu2006,speccpu2017
SPECrate:用于衡量 CPU 在多线程处理情况下的整体性能
SPECint:主要关注 CPU 的整数运算性能。
SPECfp:侧重于 CPU 的浮点运算性能。
3.2speccpu2017测试操作
-
载测试工具:在进行speccpu2017的安装时,需要先下载speccpu2017的镜像文件,可通过以下网盘链接获得。
https://pan.baidu.com/s/1kMoMJ5Ufg5oZql4HjyacAg#list/path=%2F
提取码:5thr -
拷贝测试工具到测试机本地
-
安装相关依赖包:
yum install -y libnsl.x86_64
yum install -y gcc
yum install -y gcc-c++
yum install -y libxml2.x86_64
yum install -y libgfortran
yum install -y libnsl
yum install -y libnsl2
yum install -y gcc-gfortran
yum install -y g++
yum install -y libaio-devel -
挂载镜像文件:mount -t iso9660 cpu2017-1.0.2.iso /mnt && cd /mnt
-
安装:./install.sh -d /root/cpu2017/ -f (安装目录:/root/cpu2017)
如果安装失败报错
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 -
配置环境变量
vim /etc/profile,之后在文件内最后一行写上export PATH=”/root/cpu2017/bin:$PATH”,保存
source /etc/profile
source shrc -
修改配置文件
进入/root/cpu2017进行下一步:
cd config && cp Example-gcc-linux-x86.cfg test.cfg
查看gcc安装路径
vim test.cfg进入test.cfg配置文件,修改第115行的/SW/compilers/GCC/Linux/x86_64/gcc-6.3.0为’ /usr/local’
如果gcc路径在/usr/bin则设置为/usr
- 设置睿频模式cpupower frequency-set -g performance
cpupower -c all frequency-set -g performance
报错则按装一下设置工具 yum install -y cpu-freq
或者apt install tuned
tuned-adm active
tuned-adm profile latency-performance
查看频率:watch -n1 “cat /proc/cpuinfo | grep “1pu MHz””
turbostat确认Bzy值是全核睿频值(当前cpu跑在的性能频率)
BIOS 下打开performance模式,关闭虚拟化相关设置,开turbo,numa,关节能Cstate和mwait
测试占用内存太大了,需要执行上面这条命令放开限制:ulimit -s unlimited
9. 测试指令
./runcpu -c …/config/Example-gcc-linux-aarch64.cfg intrate
- 测试结果存于/cpu2017/result中
日志里int base分数值是上边各项加权平均值
重跑清缓存数据:speccpu清除缓存:rm -fr benchspec/CPU//run/
3.3性能调优
- BIOS性能项设置:打开performance模式,关闭虚拟化相关设置,开turbo,numa,关节能Cstate和mwait
- OS配置:对于4k页表的操作系统,在跑int整型时建议配置大页内存;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版本一般较低,相邻版本一般性能差距不大,版本相差的多的跑分差距较大
查看gcc版本 gcc -v
gcc下载地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/
安装:tar -xvf gcc-12.2.0.tar.gz &&cd gcc-12.2.0/ &&./configure --disable-multilib && make -j 96 && make install
- 绑核设置
在配置文件中修改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附件内相关部分内容 -
透明大页
进行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
-
c ↩︎