- What is CPU?
- What does a CPU do in a computer?
- CPU Components
- CPU History
- What makes a CPU good?
- Clock Speed
- Cores
- Hyper-Threading
- Cache
- Clock speed vs. Cores
- How to check Key CPU Metrics
- CPU Usage
- CPU Load Average
- CPU Clock Speed
- CPU Core Count
- CPU Thread Count
- CPU Scaling Governor
- Summary
- Reference
最近遇到一件怪事,用服务器环境编译的速度竟然比在本地环境编译还慢(总体速度是快的,有些模块编译时间慢)。服务器的 CPU 性能是远远大于本地环境,当然编译速度不仅和 CPU 性能有关,也包含以下因素,
- 磁盘速度:编译需要读取和写入大量的文件和数据,包括源代码文件、库文件和中间生成文件等。较快的磁盘速度可以减少文件读写时间,从而加快编译速度。
- 内存大小:编译器在编译过程中需要加载和处理大量的代码和数据。较大的内存容量可以避免频繁的内存交换和磁盘读写,从而提高编译速度。
- 并行编译:编译是否支持并行,是否能够充分利用多核。
- 缓存和缓存命中率:CPU内部的缓存对于编译速度也很重要。编译器的数据和指令访问模式会影响缓存命中率,较高的缓存命中率可以减少内存访问的延迟,提高编译性能。
先抛开其他因素不谈吧,趁着这个机会总结一下 CPU 基础知识。
What is CPU?
CPU(Central Processing Unit) 中央处理器经常被称为是计算机的大脑,可以这样理解,与身体器官类比很形象的描述了 CPU 在众多计算机组件的重要性。但这仅是初步的理解,CPU 并不能生成指令,而是一些软件生成指令后,CPU 再去处理执行,让软件能在系统上完美融洽的运行。计算机的处理速度和响应时间在很大程度上取决于 CPU。除此之外,也会受到内存、核心处理能力和其他因素的影响。有时我们会遇到以下问题:
- 程序运行很慢
- 系统卡顿死机
- 视频图形渲染卡顿
- 软件运行很慢
让我们一起定位是不是 CPU 的性能问题,有什么方法进行调优,首先看下 CPU 到底在计算机中做了哪些工作。
What does a CPU do in a computer?
- 执行程序:从内存中读取指令,并执行。通过时间分片技术,可实现多任务同时执行。
- 数据处理:处理各种数据,包括数字、字符、图像、音频等。通过执行数学运算、逻辑判断、数据转换等操作,以实现对数据的处理和分析。
- 控制硬件设备:控制计算机系统中的各种硬件设备,如硬盘驱动器、显示器、键盘、鼠标等。接收设备信号,发送控制信号,从而实现用户与计算机的交互。
- 网络通信:处理网络数据包,进行数据传输和接收。
- 数据存储管理:管理内存和缓存,包括数据的读取、写入、分配和回收等。将数据从内存中读取到寄存器或缓存中进行处理,并将结果写回内存。
总的来说,CPU是计算机系统的核心处理器,它执行程序指令、处理数据、控制硬件设备,以及支持各种应用和任务的执行。
CPU Components
- 控制单元(Control Unit):负责协调和控制CPU内部的各个部件以执行指令。它包括指令寄存器、程序计数器和指令解码器等。
- 算术逻辑单元(Arithmetic Logic Unit,简称ALU):ALU是CPU的关键组成部分,负责执行算术和逻辑运算,如加法、减法、乘法、逻辑与、逻辑或等。ALU通常包含运算器和状态寄存器。
- 寄存器(Registers):寄存器是CPU内部的高速存储器,用于存储指令、数据和中间结果。CPU包含多个寄存器,包括通用寄存器、程序计数器、指令寄存器等。寄存器具有非常快的访问速度,用于加快指令的执行和数据的传输。
- 数据通路(Data Path):数据通路是连接CPU内部各个部件的路径,用于传输数据和控制信号。它包括数据总线、地址总线和控制总线等。数据通路起到了连接各个部件的作用,使得数据可以在CPU内部进行传输和处理。
- 缓存(Cache):缓存是CPU内部的高速存储器,用于临时存储频繁访问的数据和指令。缓存分为多级,包括一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)。缓存的存在可以提高CPU对数据的访问速度,减少对主存的访问次数。
- 总线(Bus):总线是连接CPU和其他计算机组件的通信通道。它包括数据总线、地址总线和控制总线,用于传输数据、地址和控制信号。总线起到了连接CPU与其他硬件设备的作用,使得CPU可以与内存、输入输出设备等进行数据交互。
CPU History
CPU的发展轨迹可以追溯到计算机的起源,并经历了多个阶段和重要的技术进步。以下是CPU发展的一些关键阶段和里程碑:
- 早期计算机:在早期计算机时代,CPU是基于真空管和继电器等电子元件构建的。这些计算机的处理速度非常慢,体积庞大,并且耗电量很高。
- 集成电路:20世纪60年代,随着集成电路的发展,CPU开始采用集成电路芯片的形式。这使得CPU的体积减小、功耗降低,并且性能得到了提升。
- 微处理器的出现:1971年,英特尔公司推出了第一款商用微处理器Intel 4004。微处理器是一种将CPU的功能集成到单个芯片上的技术,它标志着个人计算机时代的开始。
- 摩尔定律:摩尔定律是指每18至24个月,集成电路上可容纳的晶体管数量会翻倍,价格保持不变。这一定律促进了CPU的快速发展,使得晶体管密度和性能不断提高。
- 多核处理器:为了进一步提高性能,CPU开始采用多核设计,即将多个独立的处理核心集成到单个芯片上。多核处理器可以同时执行多个任务,提高多线程应用的效率。
- 架构优化和指令集:随着时间的推移,CPU的架构得到不断优化和改进,以提高指令执行效率和功耗控制。同时,新的指令集和技术(如SIMD指令集、超线程技术等)的引入也进一步提高了CPU的性能和多任务处理能力。
- 高性能计算:为了满足高性能计算需求,出现了专用的处理器架构,如图形处理器(GPU)、向量处理器(Vector Processor)和协处理器等。这些处理器在特定领域或任务上具有出色的性能和并行计算能力。
总的来说,CPU经历了从早期的简单电子元件到现代复杂的微处理器的演化过程。随着技术的不断进步,CPU在性能、功耗、集成度和并行处理能力等方面取得了巨大的发展,推动了计算机和信息技术的飞速进步。
What makes a CPU good?
Clock Speed
Clock Speed 决定了 CPU 在一个周期内可以执行多少指令,它代表了执行指令的速度。通常以赫兹(Hz)为单位表示,如2.4 GHz(即每秒钟执行24亿个时钟周期)。然而,由于较高的速度会产出额外的热量和更高的功耗,导致时钟速度的进步开始停滞不前。
Cores
Cores 是指独立的处理单元数量。多核心设计使得CPU能够同时处理多个任务和线程,提高处理器的并行计算能力。每个核心在逻辑上独立,拥有自己的寄存器、缓存和执行单元,可以独立执行指令和处理数据。多核的 CPU 对于多线程应用程序、多任务处理和并行计算任务非常有用,然而,对于单线程程序无法充分利用多核并行能力,因此不会带来明显的性能提升。
Hyper-Threading
多线程技术允许在一个CPU核心上同时执行多个线程。通过在一个核心上切换执行不同的线程,CPU可以实现并行处理和提高系统的整体性能。Hyper-Threading 的可用性取决于CPU型号和制造商。
Cache
Cach 用于临时存储频繁使用的数据和指令,以加速访问数据。cache 大会提高缓存命中率,减少内存访问延迟,但过大会带来更高成本和功耗,以及延迟和访问时间过长的问题。
Clock speed vs. Cores
可将 Clock speed 视为跑车,Cores 视为卡车。在选择CPU时,取决于具体的使用场景和需求:
- 单线程性能:如果主要进行单线程任务,例如游戏、单线程应用程序或单个任务的运行,较高的 Clock speed 可能更重要,因为它能够提供更快的执行速度。
- 多线程性能:如果经常进行多线程任务,例如视频编辑、渲染、编码或同时运行多个任务,较多的核心可以提供更好的多线程性能,因为它们可以同时处理多个任务。
How to check Key CPU Metrics
CPU Usage
用于衡量 CPU 忙于执行任务的时间百分比。表示 CPU 上的工作负载,高 CPU 使用率表示工作负载过重。可以使用 top
进行查看:
CPU usage: 3.41% user, 4.43% sys, 92.15% idle
以上表示:
- 用户使用率(user):3.41%,表示CPU用于执行用户进程的时间百分比。
- 系统使用率(sys):4.43%,表示CPU用于执行系统内核进程的时间百分比。
- 空闲使用率(idle):92.15%,表示CPU处于空闲状态的时间百分比。
CPU Load Average
表示在特定时间段内 CPU 的平均工作量。CPU 负载平均值的计算方法是定期对 CPU 使用情况进行采样,然后在指定的时间段内对这些值求平均值。时间段通常定义为过去 1、5 和 15 分钟,分别表示短期、中期和长期负载平均值。可使用 top
查看:
Load average: 0.50 (1 minute), 0.75 (5 minutes), 0.90 (15 minutes)
在此示例中,1 分钟间隔的平均负载为 0.50,这意味着 CPU 在过去一分钟内平均仅以 50% 的容量使用。5 分钟 75% 的使用率, 15 分钟 90% 的使用率。
通常,平均负载低于 1.00 表明 CPU 具有空闲时间,可以有效地处理额外的工作负载。平均负载高于 1.00 表示 CPU 正在充分利用,并且可能对处理任务有更高的需求。负载平均值高于 2.00 表示 CPU 工作负载相对较高,表明 CPU 正在接近或以最大容量运行。
CPU Clock Speed
执行以下命令可以查看每个CPU核心的当前时钟频率:
watch -n 1 "cat /proc/cpuinfo | grep MHz"
CPU Core Count
运行 lscpu
命令,它将显示有关 CPU 的详细信息,包括核心数量、线程数量等。 CPU(s)
或 Core(s) per socket
字段,表示系统中的CPU核心数量。
CPU Thread Count
运行 lscpu
命令, Thread(s) per core
字段,表示每个CPU核心的线程数量。通过将此值乘以核心数量,可以得到CPU的线程总数。
CPU Scaling Governor
CPU Scaling Governor(CPU频率调节器)是用于管理和调整CPU频率的软件模块。控制着CPU在不同工作负载下的运行频率,以平衡性能和功耗之间的关系。不同的CPU scaling governor算法可以根据需求调整CPU频率,以实现最佳的性能和能耗平衡。默认的CPU scaling governor通常是 ondemand 或 powersave 。
查看当前的 CPU scaling governor:在终端中执行以下命令:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Summary
本文介绍了 CPU 的定义和组成,以及 CPU 的发展历程和性能指标。其中,Clock Speed、Cores、Cache 和 Hyper-Threading 是影响CPU性能的关键指标。此外,本文还介绍了如何检查 CPU 的关键指标,如 CPU 使用率、CPU 负载平均值、CPU 时钟频率、CPU 核心数量、CPU 线程数量和 CPU Scaling Governor 等。
Reference
- https://www.malwarebytes.com/cybersecurity/computer/what-is-a-cpu
- https://blog.gitnux.com/cpu-metrics/