CPU优化上下文切换之线程上下文切换案例分析
对于线程上下文切换,如果同进程内就是只是线程上下文切换,如果非同进程内则是进程上下文切换。下面进行线程上下文切换场景模拟。
一、环境准备~模拟工具sysbench。
1)安装git
yum -y install git
2)下载sysbench
git clone https://github.com/akopytov/sysbench.git
3)安装依赖
yum install autoconf automake libtool -y
4)编译安装
cd sysbench/
./autogen.sh
./configure --without-mysql
make && make install
二、案例测试
第一个终端,查看空闲系统的上下文切换次数:vmstat 1 5
模拟线程上下文切换(以 10 个线程运行 5 分钟的基准测试):sysbench --threads=10 --time=300 threads run
第二个终端,查看上下文切换:vmstat 1
第三个终端通过 pidstat 来看进程的上下文切换次数:pidstat -w -u 1
实际上,通过上图输出分析:pidstat 的输出你可以发现,CPU 使用率的升高果然是 sysbench 导致的,它的 CPU 使用率已经达到了 100%以上。但上下文切换则是来自其他进程。
为什么几个命令查看的效果不一致?!因为pidstat 参数-t才能查看到线程相关的信息,执行命令pidstat -w -u -t 1 5
现在可以通过上图知道:虽然 sysbench 进程(也就是主线程)的上下文切换次数看起来并不多,但它的子线程的上下文切换次数却有很多。看来,上下文切换罪魁祸首,还是过多的 sysbench 线程。
综合上述,根据上下文切换的类型,具体分析
1. 自愿上下文切换多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题
2. 非自愿上下文切换多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈
3. 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过 /proc/interrupts 文件来分析具体的中断类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?