news 2026/9/5 20:09:39

Linux:perf:sched latency数据分析,task平均每次运行时间2.8ms,min_granularity_ns

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux:perf:sched latency数据分析,task平均每次运行时间2.8ms,min_granularity_ns

帮助文档:https://linuxman7.com/linux/man-pages/man1/perf-sched.1.html
下面内容里

  • Runtime,意思是 time that a task spent actually running on the CPU
  • Switchs(count),number of times a delay was calculated,实际意思,就是被调度了多少次。
  • delay(time that a task was ready to run but was kept waiting).
perf sched latency-i perf.data.sche---------------------------------------------------------------------------------------Task|Runtime ms|Switches|Avg delay ms|Max delay ms---------------------------------------------------------------------------------------io_context_pool:(4)|0.553ms|11|avg:2222.615ms|max:24448.340ms msgr-worker-1:(4)|2.236ms|33|avg:29.165ms|max:961.821ms log:(4)|1.304ms|76|avg:26.333ms|max:1000.036ms safe_timer:(8)|4.984ms|100|avg:20.010ms|max:1000.021ms CPU1/KVM:3875313|14626.947ms|6313|avg:0.031ms|max:0.384ms CPU0/KVM:3875312|15178.075ms|5454|avg:0.031ms|max:0.101ms

比如上面这个数据里:CPU 0/KVM:3875312,运行的时间是15178.075ms,被调度的次数是5454,那相当于每次运行时间是大约2.8ms。
这个值2.8ms和什么有关系呢?为什么当前这个每次运行的时间是大约2.8ms呢?
1, 可能和自身的工作有关系。当前task是否cpu-bound类型?
2,可能和当前主机的负载有关系。当前系统cpu-bound的任务是否比较多?
3,可能和某些系统参数有关系,比如min_granularity_ns,如果这个设置为3000000,那么每个task的平均每次运行时间肯定就大于3ms。
4,其他原因。

sched_min_granularity_ns 参数用于定义 Linux 内核调度器中任务在被抢占之前允许运行的最小时间量。在5.14这个版本换成了:wakeup_granularity_ns

最小运行时间:它设定了一个任务在 CPU 上运行的最小持续时间(以纳秒为单位),即使有其他更高优先级的任务准备运行,当前任务也至少会运行这么长时间。
减少上下文切换开销:通过确保任务不会被过快地频繁切换,它有助于减少不必要的上下文切换开销。对于运行时间很短的任务,如果切换过于频繁,上下文切换本身的开销可能会超过任务实际执行的开销。
平衡延迟与吞吐量:较高的 sched_min_granularity_ns 值可以提高系统的整体吞吐量(因为减少了上下文切换),但可能会增加交互式任务的延迟。较低的值则可能提高响应速度,但会增加上下文切换开销,从而降低整体吞吐量。

migration_cost_ns 参数定义了 Linux 内核调度器在将一个任务从一个 CPU 迁移到另一个 CPU 时,所估计的开销(以纳秒为单位)。
估算迁移成本:它代表了调度器在进行负载均衡决策时,认为将一个任务从当前 CPU 移动到另一个 CPU 所需的时间成本。这个成本主要包括 CPU 缓存失效、TLB(Translation Lookaside Buffer)失效以及其他与处理器状态相关的开销。
影响负载均衡决策:
当调度器需要将任务从一个繁忙的 CPU 迁移到空闲或负载较低的 CPU 时,它会权衡迁移带来的潜在性能提升与 migration_cost_ns 所代表的迁移开销。
如果迁移成本过高,调度器可能会选择不迁移任务,即使目标 CPU 看起来更空闲,因为它认为迁移带来的性能损失会大于负载均衡的收益。
避免“乒乓效应”:通过引入这个成本,调度器可以避免任务在不同 CPU 之间过于频繁地来回迁移(即“乒乓效应”),这种频繁迁移会因为持续的缓存失效而导致性能下降。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 20:04:26

Gopeed 上手指南:1 条命令跑通多协议下载管理器

Gopeed 上手指南:1 条命令跑通多协议下载管理器 【免费下载链接】gopeed A fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter. 项目地址: https://gitcode.com/GitHub_Trending/go/gopeed…

作者头像 李华
网站建设 2026/9/5 20:00:03

基于51单片机的数控直流稳压电源设计:从Buck拓扑到PID闭环控制

简介:本资源是一套面向电子类专业初学者与课程设计学生的51单片机实践项目——直流稳压电源完整开发包,聚焦嵌入式控制与电源系统协同设计,解决从理论到硬件落地的关键环节。压缩包共50个文件,含4个核心C源码(如dianyu…

作者头像 李华
网站建设 2026/9/5 19:59:23

MODIS地表温度数据全解析:从原理到应用实践指南

简介:本资源为2022年中国全域1km分辨率地表温度(LST)空间分布数据集,面向遥感地理信息、生态环境监测、气候变化研究等领域的科研人员与高校师生,可直接支撑区域热环境分析、城市热岛评估、农业干旱监测等空间建模与制…

作者头像 李华
网站建设 2026/9/5 19:57:02

STM32 ADC信号采集与频率测量:从硬件调理到软件算法的嵌入式实现

简介:本资源是一套基于STM32F10x系列的ADC高频测频与电压采集完整工程,面向嵌入式初学者、课程设计学生及单片机工程师,解决模拟信号数字化处理中的核心问题——如何精准实现1Hz至高频范围的周期性信号频率测量及多通道电压采集。压缩包含162…

作者头像 李华