通过实战理解CPU上下文切换

💡 原文中文,约4200字,阅读约需10分钟。
📝

内容提要

Linux是一个多任务操作系统,通过CPU上下文切换实现任务的并发执行。进程上下文切换涉及用户态和内核态的切换,而线程上下文切换只涉及私有数据和寄存器的切换。中断上下文切换是为了响应硬件事件。过多的上下文切换会降低系统性能。

🎯

关键要点

  • Linux是一个多任务操作系统,通过CPU上下文切换实现任务的并发执行。
  • CPU上下文切换分为进程上下文切换、线程上下文切换和中断上下文切换。
  • 进程上下文切换涉及用户态和内核态的切换,需通过系统调用实现。
  • 系统调用过程中发生两次CPU上下文切换,进程上下文切换比系统调用更复杂。
  • 进程上下文切换的时间消耗在几十纳秒到数微秒之间,频繁切换会影响系统性能。
  • 线程上下文切换分为同进程和不同进程的情况,同进程切换消耗更少资源。
  • 中断上下文切换用于快速响应硬件事件,不涉及用户态资源的保存和恢复。
  • 过多的上下文切换会消耗CPU时间,导致系统性能下降。
  • 可以使用vmstat工具查看系统的上下文切换情况,关注cs和in指标。
  • 自愿上下文切换和非自愿上下文切换的区别在于资源获取和时间片耗尽。
  • 使用sysbench工具模拟多线程调度切换,观察上下文切换的情况。
  • 上下文切换次数的正常范围取决于系统性能,超过一万次可能出现性能问题。

延伸问答

CPU上下文切换的类型有哪些?

CPU上下文切换分为进程上下文切换、线程上下文切换和中断上下文切换。

进程上下文切换与系统调用有什么关系?

进程上下文切换在系统调用过程中发生,系统调用需要两次上下文切换,涉及用户态和内核态的切换。

如何查看系统的上下文切换情况?

可以使用vmstat工具查看系统的上下文切换情况,关注cs和in指标。

频繁的上下文切换会带来什么影响?

过多的上下文切换会消耗CPU时间,导致系统性能下降。

自愿上下文切换和非自愿上下文切换有什么区别?

自愿上下文切换是由于资源不足导致的,而非自愿上下文切换是由于时间片耗尽等原因被系统强制调度。

如何使用sysbench工具模拟多线程调度切换?

可以运行命令'sysbench --threads=10 --max-time=300 threads run'来模拟多线程调度切换。

➡️

继续阅读