perf之sched

perf之schednbsp nbsp nbsp 如果你对你的进程的响应时间极其苛刻 有一天你发现你的进程响应时间变慢了 而恰好这个机器上也有其他的进程在跟你的进程争用 CPU 你想看看你的进程被内核调度的情况 那么你需要用 perf sched 工具 nbsp nbsp nbsp PerfschedPer 有五个子命令 perfschedrec low overheadreco

     如果你对你的进程的响应时间极其苛刻,有一天你发现你的进程响应时间变慢了,而恰好这个机器上也有其他的进程在跟你的进程争用CPU,你想看看你的进程被内核调度的情况,那么你需要用perf-sched工具。

     Perf sched

Perf sched 有五个子命令:

 perf sched record # low-overhead recording of arbitrary workloads perf sched latency # output per task latency metrics perf sched map # show summary/map of context-switching perf sched trace # output finegrained trace perf sched replay # replay a captured workload using simlated threads

用户一般使用 perf sched record 收集调度相关的数据,然后就可以用 perf sched latency 查看诸如调度延迟等和调度器相关的统计数据。

其他三个命令也同样读取 record 收集到的数据并从其他不同的角度来展示这些数据。下面一一进行演示。

 perf sched record sleep 10 # record full system activity for 10 seconds perf sched latency --sort max # report latencies sorted by max ------------------------------------------------------------------------------------- Task | Runtime ms | Switches | Average delay ms | Maximum delay ms | ------------------------------------------------------------------------------------- :14086:14086 | 0.095 ms | 2 | avg: 3.445 ms | max: 6.891 ms | gnome-session:13792 | 31.713 ms | 102 | avg: 0.160 ms | max: 5.992 ms | metacity:14038 | 49.220 ms | 637 | avg: 0.066 ms | max: 5.942 ms | gconfd-2:13971 | 48.587 ms | 777 | avg: 0.047 ms | max: 5.793 ms | gnome-power-man:14050 | 140.601 ms | 434 | avg: 0.097 ms | max: 5.367 ms | python:14049 | 114.694 ms | 125 | avg: 0.120 ms | max: 5.343 ms | kblockd/1:236 | 3.458 ms | 498 | avg: 0.179 ms | max: 5.271 ms | Xorg:3122 | 1073.107 ms | 2920 | avg: 0.030 ms | max: 5.265 ms | dbus-daemon:2063 | 64.593 ms | 665 | avg: 0.103 ms | max: 4.730 ms | :14040:14040 | 30.786 ms | 255 | avg: 0.095 ms | max: 4.155 ms | events/1:8 | 0.105 ms | 13 | avg: 0.598 ms | max: 3.775 ms | console-kit-dae:2080 | 14.867 ms | 152 | avg: 0.142 ms | max: 3.760 ms | gnome-settings-:14023 | 572.653 ms | 979 | avg: 0.056 ms | max: 3.627 ms | ... ----------------------------------------------------------------------------------- TOTAL: | 3144.817 ms | 11654 | --------------------------------------------------- 上面的例子展示了一个 Gnome 启动时的统计信息。 各个 column 的含义如下: Task: 进程的名字和 pid Runtime: 实际运行时间 Switches: 进程切换的次数 Average delay: 平均的调度延迟 Maximum delay: 最大延迟

这里最值得人们关注的是 Maximum delay,一般从这里可以看到对交互性影响最大的特性:调度延迟,如果调度延迟比较大,那么用户就会感受到视频或者音频断断续续的。

其他的三个子命令提供了不同的视图,一般是由调度器的开发人员或者对调度器内部实现感兴趣的人们所使用。

首先是 map:

 $ perf sched map ... N1 O1 . . . S1 . . . B0 . *I0 C1 . M1 . 23002. secs N1 O1 . *Q0 . S1 . . . B0 . I0 C1 . M1 . 23002. secs N1 O1 . Q0 . S1 . . . B0 . *R1 C1 . M1 . 23002. secs N1 O1 . Q0 . S1 . *S0 . B0 . R1 C1 . M1 . 23002. secs *L0 O1 . Q0 . S1 . S0 . B0 . R1 C1 . M1 . 23002. secs L0 O1 . *. . S1 . S0 . B0 . R1 C1 . M1 . 23002. secs L0 O1 . . . S1 . S0 . B0 . R1 C1 *T1 M1 . 23002. secs T1 => irqbalance:2089 L0 O1 . . . S1 . S0 . *P0 . R1 C1 T1 M1 . 23002. secs *N1 O1 . . . S1 . S0 . P0 . R1 C1 T1 M1 . 23002. secs N1 O1 . . . *J0 . S0 . P0 . R1 C1 T1 M1 . 23002. secs N1 O1 . . . J0 . S0 *B0 P0 . R1 C1 T1 M1 . 23002. secs N1 O1 . . . J0 . *U0 B0 P0 . R1 C1 T1 M1 . 23002. secs N1 O1 . . . *S1 . U0 B0 P0 . R1 C1 T1 M1 . 23002. secs

星号表示调度事件发生所在的 CPU。

点号表示该 CPU 正在 IDLE。

Map 的好处在于提供了一个的总的视图,将成百上千的调度事件进行总结,显示了系统任务在 CPU 之间的分布,假如有不好的调度迁移,比如一个任务没有被及时迁移到 idle 的 CPU 却被迁移到其他忙碌的 CPU,类似这种调度器的问题可以从 map 的报告中一眼看出来。

如果说 map 提供了高度概括的总体的报告,那么 trace 就提供了最详细,最底层的细节报告。

 pipe-test-100k-13520 [001] 1254.: sched_stat_wait: task: pipe-test-100k:13521 wait: 5362 [ns] pipe-test-100k-13520 [001] 1254.: sched_switch: task pipe-test-100k:13520 [120] (S) ==> pipe-test-100k:13521 [120] :13521-13521 [001] 1254.: sched_stat_runtime: task: pipe-test-100k:13521 runtime: 5092 [ns], vruntime: 0 [ns] :13521-13521 [001] 1254.: sched_stat_sleep: task: pipe-test-100k:13520 sleep: 5092 [ns] :13521-13521 [001] 1254.: sched_wakeup: task pipe-test-100k:13520 [120] success=1 [001]

要理解以上的信息,必须对调度器的源代码有一定了解,对一般用户而言,理解他们十分不易。幸好这些信息一般也只有编写调度器的人感兴趣。。。

Perf replay 这个工具更是专门为调度器开发人员所设计,它试图重放 perf.data 文件中所记录的调度场景。很多情况下,一般用户假如发现调度器的奇怪行为,他们也无法准确说明发生该情形的场景,或者一些测试场景不容易再次重现,或者仅仅是出于“偷懒”的目的,使用 perf replay,perf 将模拟 perf.data 中的场景,无需开发人员花费很多的时间去重现过去,这尤其利于调试过程,因为需要一而再,再而三地重复新的修改是否能改善原始的调度场景所发现的问题。

下面是 replay 执行的示例:

 $ perf sched replay run measurement overhead: 3771 nsecs sleep measurement overhead: 66617 nsecs the run test took  nsecs the sleep test took  nsecs nr_run_events:  nr_sleep_events:  nr_wakeup_events:  task 0 ( perf: 13519), nr_events: 148 task 1 ( perf: 13520), nr_events:  task 2 ( pipe-test-100k: 13521), nr_events:  task 3 ( ksoftirqd/0: 4), nr_events: 8 task 4 ( swapper: 0), nr_events: 170 task 5 ( gnome-power-man: 3192), nr_events: 3 task 6 ( gdm-simple-gree: 3234), nr_events: 3 task 7 ( Xorg: 3122), nr_events: 5 task 8 ( hald-addon-stor: 2234), nr_events: 27 task 9 ( ata/0: 321), nr_events: 29 task 10 ( scsi_eh_4: 704), nr_events: 37 task 11 ( events/1: 8), nr_events: 3 task 12 ( events/0: 7), nr_events: 6 task 13 ( flush-8:0: 6980), nr_events: 20 ------------------------------------------------------------ #1 : 2038.157, ravg: 2038.16, cpu: 0.09 / 0.09 #2 : 2042.153, ravg: 2038.56, cpu: 0.11 / 0.09 ^C

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230598.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月13日 下午1:01
下一篇 2026年2月13日 下午1:22


相关推荐

  • CMD查看端口占用并关闭命令

    CMD查看端口占用并关闭命令1.查询端口netstat-ano|findstr“123456”TCP127.0.0.1:12340.0.0.0:0LISTENING67892.查询端口名tasklist|findstr“6789”studio64.exe6789Console31,385,024K3.关闭端口taskkill/pid“6789”/F.

    2022年5月12日
    52
  • QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)

    QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)QIIME2https://qiime2.org/简介QIIME2是微生物组分析软件QIIME(截止17.7.13被引7771次)的全新版(不是升级版),全部python3全新编写,并于明年全面接替QIIME,是代表末来的分析方法标准(大牛们制定方法标准,我们跟着用就好了)。优点更易于安装:QIIME1的安装让无数生信人竞折腰,现在官方发布了docker,下载即可运行;使用方法多样:支持命令

    2022年6月29日
    24
  • JS跳转页面参考代码大全

    JS跳转页面参考代码大全JS 跳转页面参考代码第一种 nbsp nbsp nbsp nbsp window location href login jsp backurl window location href 第二种 nbsp nbsp nbsp nbsp alert 返回 window history back 1 nbsp nbsp nbsp 第三种 nbsp nbsp nbsp window navigate top jsp nbsp nbsp

    2026年3月17日
    0
  • 【转载】视频跟踪的研究

    首先,什么是视频跟踪?基于视频的运动目标跟踪技术作为计算机视觉领域的核心研究课题之一, 主要目的是模仿生理视觉系统的运动感知功能,通过对摄像头捕捉到的图像序列进行分析,计算出运动目标在每一帧图像中的二维坐标位置;然后,根据运动目标相关的特征值,将图像序列中连续帧间的同一运动目标关联起来,得到每帧图像中目标的运动参数以及相邻帧图像间运动目标的对应关系,从而得到各个运动目标完整的运动轨迹,即在

    2022年4月10日
    48
  • Linux查看文件夹大小

    Linux查看文件夹大小Linux 查看文件夹大小 1Linux 下查看文件和文件夹大小 1 1df 命令 1 2du 命令 1Linux 下查看文件和文件夹大小当磁盘大小超过标准时会有报警提示 这时如果掌握 df 和 du 命令是非常明智的选择 df 可以查看一级文件夹大小 使用比例 档案系统及其挂入点 但对文件却无能为力 du 可以查看文件及文件夹的大小 两者配合使用 非常有效 比如用 df 查看哪个一级目录过大 然后用 df 查看文件夹或文件的大小 如此便可迅速确定症结 下面分别简要介绍 1 1df 命令 可以用来查看分区的文

    2026年3月16日
    2
  • self attention(自注意力机制)

    self attention(自注意力机制)selfattentio 是注意力机制中的一种 也是 transformer 中的重要组成部分 本文先重新回归一下注意力机制 再做进一步介绍 正如之前说的 注意力机制的目的是根据我们的目标 去关注部分细节 而不是基于全局进行分析 所以核心就是如何基于目标确定我们要关注的部分 以及在找到这部分细节之后进一步进行分析 这里先以文本匹配作为例子进行介绍 假设我们要分析两个文本是不是重复的 Iama

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号