在linux系统中作为一个普通线程是非常苦逼的。不仅nmi 、硬中断、软中断可以打断它,甚至其它普通线程也可以来打断干扰到它的运行。
如果没有这些打断事件,一个普通线程执行while循环,可以high过天际。这些打断事件对一个普通线程来说,就相当于噪音一样的存在。
从linux 5.14-rc1开始引入了一个新的tracer---(osnoise tracer)。就是从一个线程thread的角度把这些噪音全部详细统计出来。
上图中 在1秒内普通线程(pid=98) 受到的各个干扰事件的次数和cpu available百分比等都可以显示出来。
统计到这个程度,感觉还是不够详细。 可以打开osnoise对应的trace event.
上面的interference 5说明在一个采样周期内被打断了5次(包括4次中断和一次a.out线程事件产生的噪音),上面的每一次打断都有事件名称和对应的时间统计:
1232+1222+1192+1262+3994882=4000242-452 (~4000242)
统计时间约等于4000242ns 因为包含了检查代码的时间时间。
代码实现:
在以上每个打断事件处理函数中都插上trace event的钩子函数 来统计事件的执行时间,然后在每个cpu上运行一个内核线程进行周期性统计。
这个强大的osnoise tracer使用到的技术仅仅是用到了tracer event提供的基础设施。
我在阅码场发布过一个视频课程,对linux系统中各个tracer的使用和代码实现都有非常详细的讲解:
芯片引脚封胶保护用什么胶
蔚来汽车亏损超出预期 “特斯拉挑战者”任重道远
SMT回流焊温度控制大揭秘:提升焊接质量的实用技巧
浅谈电连接器基本材料的选用
【IoT毕设】esp8266模块+机智云AIoT+宿舍事故预防系统
深入探究Linux系统噪音统计(osnoise tracer)
我国首个自主开发,芯旺32位KF32 MCU揭开面纱
光学薄膜激光损伤阈值的后处理方法有主要有哪几种
燃料电池汽车优势 燃料电池堆技术现状
Scality和ViON宣布RING8为一项核心技术
纳米氧化铝在陶瓷中应用
轴类零件具体加工步骤和注意事项
如何清除划词搜索
企业能源管理存在的问题该如何解决
小米电视4惊艳亮相CES,老外表情包来袭!
但眼拓客云——大数据助力企业精准获客
Vishay推出新型模块化面板电位
LED灯条的生产过程及封装工艺
一位IT工程师谈论自己的三年编程生涯
基于DSP的CPLD软件更新方案研究