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