[D9打卡]
======================================
问题:怎么理解软中断?
我的理解比较简单粗暴, 硬中断是硬件产生的,比如键盘、鼠标的输入,硬盘的写入读取、网卡有数据了;软中断是软件产生的,比如程序内的定时器、[文中提到的RCU锁]。
再加上今天的上半部下半部,更好的理解了网卡的处理实际是有硬中断和软中断的。
======================================
问题:有没有碰到过因为软中断出现的性能问题?
有,且是血淋淋的教训。
之前的c程序用到了别人写的动态库[如:lib.a],在物理机上,进程的cpu利用率在0%;而切换到了云服务器,即使空载,单进程的cpu利用率都有30%+。
以前没经验嘛,各种自查,无结果,但是自己的进程cpu利用率又那么高,总是不安心.
后来才通过vmstat 检测到系统的软中断每秒有100W+次.
最后各自百度,找人,才发现是那个动态库在处理网络收发消息时,使用了usleep(1)来休息,每次休息1纳秒,单次中断的耗时都不止1纳秒.
--------------------------------------
如果是现在,我会如下分析:
1.检测是哪个线程占用了cpu: top -H -p XX 1 / pidstat -wut -p XX 1
2.在进程中打印各线程号. 找到是哪个线程.[ 此过程也可以省略 但可以快速定位线程]
3.第一步应该可以判断出来中断数过高. 再使用 cat /proc/softirqs 查看是哪种类型的中断数过高.
4.不知道perf report -g -p XX 是否可以定位到具体的系统调用函数.
5.最终还是要查看源码,定位具体的位置,并加以验证.
--------------------------------------
感觉现在随便怎么分析都可以快速定位到是动态库的锅.
想当初可是好几个月都无能为力啊, 最后还是几个人各种查,搞了一周多才定位到原因.
最后再吐槽下,没有root权限的普通账户真是不方便啊,有些工具只能安装在自己的目录下, 还有些好用的工具根本无权限运行,哎...
展开
作者回复: 嗯嗯,已经是很有经验的老手了😊
大多数情况下 root 权限都是必须的,还是准备个root权限的环境实践吧