菜鸟学Linux 第110篇笔记 CPU
内容总览
cpu
进程
查看和调整linux 进程优先级
计算机原理
PAE (physical address extention)
cpu
32bit 支持内存寻址空间 2^32=4G
64bit 支持内存寻址空间 4G*4G
寄存器
一级缓存 cpu每个核独有
二级缓存 cpu每个核独有
三级缓存 核心共有
write through 通写
write back 回写 只有当缓存的数据要被替换时,才会将缓存的数据回写到RAM
interrupt controller 中断控制器 用来将外部的设备紧急信息通知给cpu使其停止正在做的事情
来处理外部设备所发来的信息,分为两步,一步是cpu指挥将数据读到内存,另一步
是查看其所发来的信息是否需要紧急处理,如紧急则需要立即处理
AGP 显卡 与cpu交互比较频繁
PCI-E 高速总线接口
IO port 65535个 硬件在开机时所分配的端口,cpu用来区分其不同的硬件 数据交互
单进程最大寻址为3G 剩下1G给内核
临界区 容易发生资源争用的地方
DMA direct memory access 直接内存访问
process 一个独立运行单位
系统资源: cpu时间 存储空间
OS VM 虚拟机
虚拟cpu 时间,切片 将cpu的运行时间切片
缓存:当前程序数据
内存: 线性地址 --> 物理地址 空间映射
进程切换:保存现场、恢复现场
linux 操作系统
进程
进程描述符 (元数据)
双向链表
context switch 上下文切换(进程切换)
linux 支持进程抢占CPU运行
系统时钟:时钟tick
时间解析度 100Hz 1000Hz 时钟中断即每一次tick便可抢占cpu
linux进程类别
交互式进程(I/O) 时间片长,优先级低
批处理进程(CPU) 时间片短,优先级高
实时进程(Real-time)
linux 优先级 priority
实时优先级:1-99 数字越小,优先级越低
静态优先级:100-139 数字越小,优先级越高
nice值调整静态优先级-20~19 用户空间进程一般为120 所以当nice为-20 其优先级为100
实时优先级比静态优先级高
动态优先级 是内核用来临时性的调整一些用户空间进程的优先级,当某些用户空间进程长时
间未得到cpu运行时间片时,来将其调高,使其在cpu上运行一次,或某些进程
得到的cpu运行时间片太多,来调低其优先级,使其降低得到的cpu运行时间片
或运行时长
dynamic priority = max (100, min ( static priority - bonus + 5), 139)
bonus: 0-10
查看linux 进程优先级
# ps -e -o class,rtprio,pri,nice,cmd
cmd显示为加中括号表示是内核线程
手动调整优先级
100-139: nice|renice 调整用户空间进程
nice (run a program with modified scheduling priority)
# nice N COMMAND (针对未启用的)
renice (alter priority of running processes)
# renice -n # PID (针对已经运行的进程)
chrt -p [prio] COMMAND
1-99: chrt (manipulate real-time attributes of a process) 调整实时优先级
chrt [options] prio command [arg]... (未启动的)
chrt [options] -p [prio] pid (启动的进程)
-f, --fifo
set scheduling policy to SCHED_FIFO
-r, --rr
set scheduling policy to SCHED_RR (the default)
-p, --pid
operate on an existing PID and do not launch a new task
# chrt -f -p [prio] PID
# chrt -r -p [prio] PID
# chrt -f <prio> COMMAND
linux 内核调度类别
实时进程
SCHED_FIFO FIFO(first in first out) 先到先运行
SCHED_RR RR(round robin) 轮调,轮到该进程,则运行该运行
SCHED_Other 用户调度用户空间进程100-139
SCHED_BATCH
SCHED_IDLE
linux 调度进程在cpu上运行的算法O(1)和CFS(Complete Fair Scheduler)
O(1)算法 用来实现静态和实时优先级的进程在cpu运行时间片上分配公平,不能让优先级高
的进程一直在占用cpu,而导致优先级低的进程因为无法得到cpu运行时间片而饿死呵呵。
原理:它是将多个优先级的每个优先级分为两个队列,一个为即将调度的另一个为当
即将高度的进程在cpu运行完后将其放到此队列里(过时队列),内核在决定下一个要来
cpu运行的进程时,扫描顺序99~1,100~139如当优先级高的即将运行队列里有则会将其
队列里的每一个都运行,运行时间片完成后如果后续还需要再运行的则将其放到过时队
列里,然后再扫描优先级比其低的队列,如果有和上述运行规则相同,当一轮运行结束
后,即运行到最后一个优先级队列里,并且将所有的即将运行的进程运行完成后,内核
会将过时队列切换为即将即行队列,而刚刚为即将运行的队列切换为过时队列,这样内
核便会再次扫描运行队列里的进程,执行的顺序和上相同,不再重述。
CFS调度算法 也是一个进程合理公平化的使每个进程都能得到cpu运行时间片的一个调度机制
CPU
rhel 6.4 tick less 无滴答
interrupt-driven
硬中断
软中断
深度睡眠
一级缓存 I1 (Instruct 1)1级指令缓存 D1(data 1)1级数据缓存
smp 对称多处理器 一块主板有多个cpu 插槽(socket)
cpu访问内存至少需要三个时间周期
1.向内存控制器寻求内存地址(寻址)
2.找到内存地址并施加一些请求机制(锁机制)
3.对内存进行访问(读写操作)
numa 每个cpu都有自己的内存访问区域,非一致性内存访问
CPU affinity cpu姻亲关系
将某程序直接绑定到某颗cpu或某个核心上,让其只在此核心上运行,从而不会交叉内存访问
命令numa实现绑定进程至某cpu上
numactl (临时调整cpu绑定进程)
numad (永久调整cpu)
numastat
taskset 绑定进程至某cpu上
# taskset -p mask pid
# taskset -p 0x00000003 101
# taskset -c 1,2 101
将中断请求绑定在非隔离的cpu上,从而避免那些隔离的cpu处理中断程序
echo CPU_MASK > /proc/irq/<irq number/smp_affinity
sysstat 工具包
dstat 工具包
查看cpu 负载状态Load average
sar -q
top
w
uptime
vmstat 1 5
查看cpu使用率 utilization
mpstat 1 2
sar -P ALL 1 2
iostat -c 1 2
/proc/stat
dstat
--top-cpu
--top-mem
--top-io