当前位置: 首页 > news >正文

trace-cmd记录线程被中断打断的时间

在linux下,当线程执行一个任务的时候,时间会发生抖动,引起抖动的原因可能有以下几种:

(1)线程主动让出了cpu,比如线程中出现了sleep,使用了互斥体,等待io等

(2)线程被动让出cpu,线程被更高优先级的线程抢占

(3)执行任务过程中有内存操作,内存操作肯呢个引起缺页中断,用户同样的内存操作,有缺页中断和无缺页中断,所消耗的时间是不一样的

(4)线程被中断打断

(5)以上情况都没有,但是同样优先级的线程比较多,也就是系统负载比较高,这个线程的运行需要排队等待

本文中记录通过ftrace来记录线程被中断打断的情况,通过工具trace-cmd来进行实验,trace-cmd是对ftrace功能的封装,比直接使用ftrace更方便:

测试代码:主线程绑定到核1上,然后是while(1)循环。

#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <pthread.h>
#include <unistd.h>int main() {// 创建 CPU 亲和性掩码cpu_set_t cpuset;CPU_ZERO(&cpuset);        // 初始化清空掩码CPU_SET(1, &cpuset);      // 设置核心 1(注意:核心编号从 0 开始)// 获取当前线程 ID(主线程)pthread_t current_thread = pthread_self();// 设置线程亲和性int result = pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);if (result != 0) {perror("pthread_setaffinity_np failed");return 1;}while (1) {}return 0;
}

使用trace-cmd记录中断entry和exit事件,-P指定了线程号。

sudo trace-cmd record -e irq:irq_handler_entry   -e irq:irq_handler_exit -P 15706

使用trace-cmd report可以查看监听结果,结果如下,通过结果进一步分析,我们就可以确定线程被中断打断的时间。

 

http://www.dtcms.com/a/312386.html

相关文章:

  • 笔试——Day27
  • RabbitMQ面试精讲 Day 10:消息追踪与幂等性保证
  • spring-ai-alibaba 之 graph 槽点
  • 【设计模式】4.装饰器模式
  • 2025-0803学习记录21——地表分类产品的精度验证
  • Github怎么只下载某个目录文件?(Git稀疏检出、GitZip for Github插件、在线工具DownGit)Github下载目录
  • linux2.6 和 unix-v6 源码实验
  • Nginx相关实验(2)
  • 【2025/08/03】GitHub 今日热门项目
  • C# LINQ(LINQ to XML)
  • CAP 理论笔记
  • CUDA杂记--nvcc使用介绍
  • GitHub 趋势日报 (2025年08月02日)
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • 深入掌握 ExcelJS:Node.js 中强大的 Excel 操作库
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • WebRTC前处理模块技术详解:音频3A处理与视频优化实践
  • ⭐CVPR2025 3D 生成新框架|Kiss3DGen 让 2D 扩散模型玩转 3D 资产生成
  • sqli-labs:Less-26关卡详细解析
  • 【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • MCU中的复位生成器(Reset Generator)是什么?
  • 智能手表项目:原理图
  • kotlin kmp 跨平台环境使用sqldelight
  • Shell脚本-变量如何定义
  • webrtc弱网-QualityScaler 源码分析与算法原理
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
  • `npm error code CERT_HAS_EXPIRED‘ 问题
  • Azure DevOps — Kubernetes 上的自托管代理 — 第3部分
  • JVM-垃圾回收器与内存分配策略详解