ebpf+perfetto实现调度延迟记录与展示

1.背景

  1. 需要分析生产环境的调度问题,如线程的调度延迟有多少,在哪些时间点延迟比较明显,影响其调度的主要原因是什么?
  2. 其次,我们希望可以比较直观的展示调度延迟情况。最好能对接perfetto的UI和后处理,因为perfetto已经用于分析比较多的性能数据,可以和调度数据进行整合.

我们期望最终能做成如下效果:
在这里插入图片描述

  1. 开销要小,能够在生产环境中使用. perfetto本身的ftrace采集数据太多,性能损耗较大
  2. 可以对指定进程或线程进行分析,可以只对大于某个范围的调度延迟进行统计,减少数据量和性能损耗

2.解决方案分析

我们可以利用ebpf实现调度延迟的监控

2.1 ebpf监控原理

调度延迟是指线程进入runnable状态后,等待其实际获得CPU开始运行之间的时间。
我们可以跟踪线程从放入就绪队列到实际被选中并获得CPU的过程。
其中linux中,线程放入就绪队列是通过以下函数实现的:

2.1.1 sched_wakeup, sched_wakeup_new

而实际选中并获得cpu是通过以下函数实现的:

2.1.2 sched_switch

因此,我们只需在2.1.1时记录线程的tid和时间,

相关推荐

  1. Python实战:日志记录调试技巧

    2024-04-07 03:44:03       46 阅读
  2. C#日志记录实现应用程序的监控调试

    2024-04-07 03:44:03       41 阅读
  3. C#Lazy 实现延迟加载详解示例

    2024-04-07 03:44:03       31 阅读
  4. Go 延迟调用机制

    2024-04-07 03:44:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 03:44:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 03:44:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 03:44:03       87 阅读
  4. Python语言-面向对象

    2024-04-07 03:44:03       96 阅读

热门阅读

  1. 创建云原生应用程序:15个要素

    2024-04-07 03:44:03       37 阅读
  2. LeetCode-热题100:347. 前 K 个高频元素

    2024-04-07 03:44:03       39 阅读
  3. 内建函数对象

    2024-04-07 03:44:03       108 阅读
  4. 图像识别与增强现实(AR)的结合

    2024-04-07 03:44:03       42 阅读
  5. docker部署nginx访问宿主机服务,并使用缓存

    2024-04-07 03:44:03       130 阅读
  6. Leetcode 537. 复数乘法

    2024-04-07 03:44:03       132 阅读
  7. Zookeeper 怎么实现分布式锁

    2024-04-07 03:44:03       47 阅读
  8. WebKit简单介绍

    2024-04-07 03:44:03       45 阅读
  9. vector容器

    2024-04-07 03:44:03       42 阅读
  10. 阿里云对象存储OSS的使用笔记

    2024-04-07 03:44:03       39 阅读
  11. centos7 安装 mysql5.7

    2024-04-07 03:44:03       47 阅读
  12. 网络工程师练习题(9)

    2024-04-07 03:44:03       46 阅读
  13. v-on内联语句

    2024-04-07 03:44:03       46 阅读