cpu性能
一、cpu啥时候才叫有瓶颈
- cpu运行的快还是慢、cpu有没有问题,cpu是不是还需要优化。这些是平常开发和运维中经常遇到的问题。那么我门到底如何去判断机器cpu运行的到底有没有异常呢。
从我排查问题来说,单看系统指标不能完全反应应用运行的状态,所以我的经验一般都是先看看机器上运行的服务到底是什么,在不了解服务是做什么的就去分析系统指标正不正常,完全是瞎扯淡。。。 举个例子我感触很深的例子:大数据cpu常年跑到90%以上,而在线业务基本都是20%以下,那这个能说大数据的cpu有异常嘛?
所以分析系统指标,一定要看上面的服务到底是个什么状态。
二、cpu硬件性能决定了cpu绝对速度的快慢
系统cpu的优化都是基于相同硬件去对比,cpu主频低的在怎么调也不会比cpu主频高的快。
从下面这个命令可以分析cpu自身硬件条件怎么样:
#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) Gold 5220R CPU @ 2.20GHz
Stepping: 7
CPU MHz: 2900.113
CPU max MHz: 4000.0000
CPU min MHz: 1000.0000
BogoMIPS: 4400.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 36608K
NUMA node0 CPU(s): 0-95
Flags: 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 syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req pku ospke avx512_vnni flush_l1d arch_capabilities
核心需要关注的:
1.cpu的主频,这个机器主频是2.20GHz,主频越高cpu计算的越快
Model name: Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz
2.cpu核心
CPU(s): 96
On-line CPU(s) list: 0-95 (2*24*2=96)
Thread(s) per core: 2 (机器支持超线程技术的话,每个核心可以虚拟出来2个线程)
Core(s) per socket: 24 (cpu核心数)
Socket(s): 2 (代表物理机cpu个数)
3.经常忽略的一点就是cpu的缓存,这个对于cpu性能也很重要(见amd/intel cpu架构分析)
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 36608K
cpu的3级缓存,L1速度最快依次类推,这个越大缓存的数据越多,速度自然会快。
intel cpu架构简图:
在 CPU Cache 的概念刚出现时,CPU 和内存之间只有一个缓存,随着芯片集成密度的提高,现代的 CPU Cache 已经普遍采用 L1/L2/L3 多级缓存的结构来改善性能。自顶向下容量逐渐增大,访问速度也逐渐降低。当缓存未命中时,缓存系统会向更底层的层次搜索。
- L1 Cache: 在 CPU 核心内部,分为指令缓存和数据缓存,分开存放 CPU 使用的指令和数据;
- L2 Cache: 在 CPU 核心内部,尺寸比 L1 更大;
- L3 Cache: 在 CPU 核心外部,所有 CPU 核心共享同一个 L3 缓存。
cpu的访问速度:
通过上面的分析可以看出来,想让cpu速度越快,就要让他尽量在一个L3内进行数据/指令计算,否则延迟会变得很高。上述这些基本已经可以确认cpu物理上的性能上限了。
- 对比以下intel和amd cpu架构的区别
yum install hwloc-libs hwloc-gui
查看L3分布
hwloc-ls
- 查看硬件内存分布
dmidecode|grep -P -A10 "Memory\s+Device"|egrep "Size|NODE"
- 生成cpu硬件架构图
lstopo --of png > server.png
intel的cpu, 可以发现intel一个物理CPU共享一个L3
AMD的cpu,可以发现amd一个物理CPU有多个L3
之前分析过跨L3越多,延迟越高,所以针对AMD架构,需要尽量让cpu少切换,尽量让他在一个L3单元完成计算。详细可以参考这个文章的分析。
三、从操作系统(软件)角度去看cpu的性能
3.1 使用cpu的几种模式
CPU动态节能技术用于降低服务器功耗,通过选择系统空闲状态不同的电源管理策略,可以实现不同程度降低服务器功耗,更低的功耗策略意味着CPU唤醒更慢对性能 影响更大。
对于对时延和性能要求高的应用,建议关闭CPU的动态调节功能,禁止 CPU休眠,并把CPU频率固定到最高。
几种模式如下:
performance: 顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
userspace:最早的cpufreq子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
powersave: 将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。
ondemand: 按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率;ondemand:userspace是内核态的检测,用户态调整,效率低。而ondemand正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。 在 ondemand governor 监测到系统负载超过 up_threshold 所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将CPU设置在最高频率上运行。但是当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时,到底应该降低到哪个频率呢? ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率