时钟(clock
)是驱动所有CPU
处理器逻辑的数字信号。
CPU
的速率可以用时钟周期(clock cycle
)来衡量。举个例子,5 GHz CPU
每秒可以产生50
亿的时钟周期。每条CPU
指令的执行都会占用一个或多个时钟周期。
CPU
的速率是衡量CPU
性能的一个重要参数。但是更快的CPU
速率并不一定能带来性能的改善,而是要看这些CPU
时钟周期都用在做什么。举个例子,如果都用在等待访问内存的结果,那么提高CPU
的速率就不会带来真正性能的提升。
时钟(clock
)是驱动所有CPU
处理器逻辑的数字信号。
CPU
的速率可以用时钟周期(clock cycle
)来衡量。举个例子,5 GHz CPU
每秒可以产生50
亿的时钟周期。每条CPU
指令的执行都会占用一个或多个时钟周期。
CPU
的速率是衡量CPU
性能的一个重要参数。但是更快的CPU
速率并不一定能带来性能的改善,而是要看这些CPU
时钟周期都用在做什么。举个例子,如果都用在等待访问内存的结果,那么提高CPU
的速率就不会带来真正性能的提升。
这个文章系列来自于Brendan Gregg
所著《Systems Performance: Enterprise and the Cloud
》一书第六章《CPU
》的读书笔记。
系统板卡上的CPU
插槽称之为socket
,一颗物理CPU
芯片可以称之为processor
。现在CPU
早已经进入多核时代,一颗CPU processor
可以包含多个core
,而一个core
又可以包含多个hardware thread
。每个hardware thread
在操作系统看来,就是一个logic CPU
,即一个可以被调度的CPU
实例(instance
)。举个例子,如果一颗CPU processor
包含4
个core
,而每个core
又包含2
个hardware thread
,则从操作系统角度看来,一共有8
个可以使用的“CPU
”(1*4*2 = 8
)。
以lscpu
输出为例:
[root@linux ~]# lscpu
......
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 120
On-line CPU(s) list: 0-119
Thread(s) per core: 2
Core(s) per socket: 15
Socket(s): 4
......
120 = 2 * 15 * 4
, 即CPU(s)
= Thread(s) per core
* Core(s) per socket
* Socket(s)
。
为了改善内存访问性能,CPU processor
提供了寄存器3
级cache
。整个存储模型如下所示(从上往下,容量越小,CPU
访问越快):
* register
(寄存器)
* L1 cache
* L2 cache
* L3 cache
* Main memory
(主存储器)
* Storage Device
(外接存储器)