02 全面发展 - CPU 及其多维评价体系
静态指标与动态指标
- 静态指标:衡量的是 CPU 的硬件规格和性能参数,一般可从数据手册中获知
- CPU 的时钟频率、核心数量、缓存大小等
- 用于比较不同型号的 CPU 之间的性能差异
- 评估处理器的理论性能
- 现实生活中的静态指标:
- 于个人 => 身高、体重、学历、样貌等
- 于公司 => 市值、员工数量、主营业务
- 是一些容易获知的参数
- 动态指标:衡量的是 CPU 在实际使用中的性能表现,需要借助各类型 BenchMark
- 程序的执行时间、响应速度、能耗等
- 更能反映 CPU 在实际使用中的性能表现
- 现实生活中的动态指标:
- 于个人 => 性格、谈吐、人品、能力等
- 于公司 => 公司理念,团队文化,创新精神
- 需要在交流接触过程中感受
CPU 的静态指标
通常包括:
- 核心数(物理核/逻辑核)
- 基频频率
- 睿频频率
- Cache 大小
- 制程
- 典型功率
- ……
Intel Xeon Gold 6226 CPU 静态指标
| CPU Specifications | |
|---|---|
| Total Cores 物理核 | 12 |
| Total Threads 逻辑核 | 24 |
| Max Turbo Frequency 最大睿频频率 | 3.70 GHz |
| Processor Base Frequency 处理器基础频率 | 2.70 GHz |
| Cache Cache 大小 | 19.25 MB |
| Max # of UPI Links UPI 数量 | 3 |
| TDP 典型功率 | 125W |
SPEC CPU
- SPEC,英文全称为 Standard Performance Evaluation Corporation,译为标准性能评估组织,一个非营利性组织,制定了一系列基准测试标准
- SPEC CPU 测试通常是计算机硬件评测中的重要参考标准之一,其主要测试场景包括:
- 整数计算 (lnteger)
- 浮点计算(Floating-point)
- 访存 (Memory)
- 控制流 (Control flow)
- 压缩解压 (Compression/Decompression)
- 加密解密 (Encryption/Decryption)
- 图像处理 (lmage processing)
- 非盈利组织 ≠ 软件免费使用

其他常用 BenchMark
- Oracle:数据库,常用 tps/tpm 进行性能衡量;
- MySQL:开源数据库,常用 tps/tpm 进行性能衡量;
- Nginx:常用于网络性能测试,常用 99%latency 进行性能衡量;
- SPECJbb:JAVA 性能测试工具,对内存敏感;
- ……
自定义 BenchMark
通过在不同的处理器上,安装相同的操作系统,利用相同的编译器编译出相同计算任务(如计算 100W 以内的素数等)二进制文件并执行,比较两者的计算时间,可粗略评估不同处理器的计算性能。
说明
在某一特定计算任务中性能表现好,并不表明该处理器综合性能更优!
bash
sudo yum search time
sudo yum install time -ybash
➜ linux_demo /usr/bin/time ./is_prime > /tmp/is_prime.log
0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 3456maxresident)k
0inputs+8outputs (0major+135minor)pagefaults 0swaps
➜ linux_demo /usr/bin/time -v ./is_prime > /tmp/is_prime.log
Command being timed: "./is_prime"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3456
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 136
Voluntary context switches: 0
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 8
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0bash
➜ linux_demo /usr/bin/time ./quicksort 128 > /tmp/quicksort.log
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3456maxresident)k
0inputs+8outputs (0major+138minor)pagefaults 0swaps
➜ linux_demo /usr/bin/time -v ./quicksort 128 > /tmp/quicksort.log
Command being timed: "./quicksort 128"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 100%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3456
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 136
Voluntary context switches: 0
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 8
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0