cpu知识
逻辑CPU的数量就是Socket
*
Core*
ThreadLinux下top按1后 查看的CPU也是逻辑CPU个数
一开始,每个物理 cpu 上只有一个核心(a single core),对操作系统而言,也就是同一时刻只能运行一个进程/线程。 为了提高性能,cpu 厂商开始在单个物理 cpu 上增加核心(实实在在的硬件存在),也就出现了双核心 cpu(dual-core cpu)以及多核心 cpu(multiple cores),这样一个双核心 cpu 就是同一时刻能够运行两个进程/线程的。
-
物理CPU
-
实际服务器中插槽上的CPU个数 是指物理上,也就是硬件上存在着几颗物理cpu,指的是真实存在是cpu处理器的个数,1个代表一颗,2个代表2颗cpu处理器。 物理cpu数量,可以数不重复的 physical id 有几个,一个不重复的physical代表是一个物理cpu
-
拥有相同 physical id 的所有逻辑处理器共享同一个物理插座,每个 physical id 代表一个唯一的物理封装。
-
-
逻辑CPU
-
Linux下top按1后 查看的CPU也是逻辑CPU个数
cpuinfo文件里的信息内容分别列出了processor 0 – n 的规格,这表示的也是逻辑cpu的个数
-
lscpu
# Socket(s):主板上面的物理 CPU 插槽。物理cpu个数
# Thread(s) per core:每个核对应的超线程数
# Core(s) per socket:Core就是平时说的核,双核、四核等,就是每个CPU上的核数
# 逻辑CPU的数量就是Socket*Core*Thread
[root@test01 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l # 查看物理cpu个数
[root@test01 ~]# cat /proc/cpuinfo |grep "processor"|wc -l # 查看逻辑cpu个数
# 如18.127的逻辑核数是28c,但实际只有7个cpu物理核数,每个cpu是4核;所以查到的就是28C
root@localhost:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
# CPU(s): 28
On-line CPU(s) list: 0-27
Thread(s) per core: 1
# Core(s) per socket: 4
Socket(s): 7
[root@test01 ~]# cat /proc/cpuinfo |grep "cores"|uniq # 查看cpu核数
cpu切换调度
# cpu切换的时候(切换以后也要保存上次执行的状态),分两种情况
# 1、当一个程序遇到I/O操作的时候,操作系统会剥夺该程序cpu的执行权限
# 2、当一个程序长时间占用cpu的时候,操作系统也会剥夺该程序cpu的执行全权限(如调度分配的时间片用完了)
# 如一个程序需要cpu调度不停调度30分钟,这时候如果有其它程序在就绪态排队的话,此时就会阻塞掉,先调度其它需要调度时间片比较小的程序
# 进程的三状态:就绪、运行、阻塞,处于运行状态的进程用完一个时间片后,它的状态会变为就绪状态等待下一次处理器调度。
import time # 就绪态
a = 1
# 运行态
b = a + 1
c = input('>>') # 阻塞态
# 就绪态
c = int(c) # 运行态
time.slepp(5) # 阻塞态
# 就绪态
d = b +c # 运行态
# 终止
cpu上下文切换
# 上面说的cpu切换运行任务调度时,将上一任务的上下文保存下来,并将即将运行的任务的上下文加载到CPU寄存器上的这一动作,被称为CPU上下文切换。
# cpu上下文属于进程上下文的一部分,进程上下文是由以下两部分组成
# 1、用户级上下文:包含进程的运行时堆栈、数据块、代码块等信息。
# 2、系统级上下文:包含进程标识信息、进程现场信息(CPU上下文)、进程控制信息等信息。
cpu缓存
cpu是与内存直接交互的,内存是与磁盘进行交互的
/*
CPU缓存是CPU重要的参数,缓存是介于内存与CPU之间的存储器,容量虽小,但是速度比内存更快,用于缓解CPU的运算速度与内存条读写速度不匹配的矛盾,因此缓存越高越好。缓存的原理是,
如果CPU需要读取一个数据,首先会从缓存中查找,如果找到会立即读取并发送给CPU进行处理,大大减少了CPU访问内存的时间。
如果CPU没有在缓存中找到这个数据,就需要从较慢速度的内存中读取并发送给CPU,同时也会将这个数据调入高速缓存中,以便CPU再次读取这个数据,可以直接从缓存中读取,无需从内存调用。
CPU缓存细分为一级缓存,二级缓存,三级缓存,CPU在实际数据读取中重要的却是一级缓存,因为一级缓存速度最快,二级缓存其次,三级缓存属于最慢的,但是三级缓存的容量最大,CPU读取缓存时会先从一级缓存开始,然是二级缓存,而读取二级缓存有时会出现数据未命中的情况,这时候就需要从三级缓存读取。
*/