linux 高性能学习笔记2
cup上下文切换,是cup重要指标之一,它反映cup中进程竞争状态,如果频繁切换会大大的降低系统性能这节主要学习cup切换相关的内容
相关概念
- cup寄存器和程序计数器
- cup寄存器:内置在cup内部的很小的极快内存
- 程序计数器:用来存储cup正在执行指令的位置,或者下一个要执行的指令的位置
- 它们两个结合就是cup上下文
- 上下文切换:就是保存当前上下文,执行其他上下文 消耗cpu 10-100 纳秒或者微妙
- 进程上下文切换
- 线程上下文切换
- 中断上下文切换
- 进程状态
- 用户态
- 内核态
- 系统调用。open,read,write 一次系统调用要两次的上下文切换
- 进程切换:只从一个进程切换到另一个进程。比系统调用多一步:要保存虚拟内存和栈空间
- 何时触发进程切换
- 为了公平调度,cpu被平均的分成了时间段,当时间段内程序没有执行完,需要切换到其他程序执行
- 系统资源不足,比如内存不足,程序会被挂起
- 进程主动挂起,如运行了sleep
- 当有优先级高的进程进入cpu等待队列中是
- 发生硬件中断,会执行中断任务,挂起当前进程
- 线程和进程的区别:线程是调度的基本单位,进程是拥有资源的基本单位
- 对于同一cpu来讲,中断比进程有更高的优先级
场景练习
- 查看上下文切换情况命令
vmstat 5
//查看对应进程的上下文切换状态
pidstat -w 5
- 切换类型
- 自愿上下文切换:无法获取资源,如内存满了,IO等待
- 非自愿上下文切换:有大量进程争抢cup产生
- 模拟多进程争抢cpu资源的情况
//模拟1000个线程争抢cpu
sysbench --threads=1000 --max-time=300 threads run
//查看系统cpu切换情况
vmstat 1 1
//产看进程cpu使用情况
pidstat -w -u 1
//产看线程的cpu切换情况
pidstat -wt 1
//产看中断次数
watch cat /proc/interrupts