news 2026/8/20 17:39:59

Linux 调度延迟案例 (1):ALSA 播放延迟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 调度延迟案例 (1):ALSA 播放延迟

文章目录

  • 1. 前言
  • 2. 现场
  • 3. 问题分析

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 现场

通过trace-cmd抓如下事件:

  • ALSA事件:hwptr, hw_mask_param, applptr
  • 调度事件:sched_switch, sched_wakeup
  • 中断事件:irq_handler_entry, irq_handler_exit

具体数据如下:

latency-7395[002]22719.778930:hwptr:pcmC0D0c/sub0:POS:pos=16,old=26768,base=26752,period=64,buf=128latency-7395[002]22719.778932:hwptr:pcmC0D0c/sub0:POS:pos=16,old=26768,base=26752,period=64,buf=128latency-7395[002]22719.778934:hwptr:pcmC0D0c/sub0:POS:pos=16,old=26768,base=26752,period=64,buf=128latency-7395[002]22719.778937:hwptr:pcmC0D0c/sub0:POS:pos=48,old=26768,base=26752,period=64,buf=128latency-7395[002]22719.778938:applptr:pcmC0D0c/sub0:prev=26768,curr=26800,avail=0,period=64,buf=128latency-7395[002]22719.778941:hwptr:pcmC0D0p/sub0:POS:pos=96,old=26816,base=26752,period=64,buf=128latency-7395[002]22719.778942:applptr:pcmC0D0p/sub0:prev=26896,curr=26928,avail=48,period=64,buf=128latency-7395[002]22719.778949:sched_switch:latency:7395[0]S==>kworker/2:1:5386[120]<idle>-0[007]22719.778971:irq_handler_entry:irq=182name=snd_hda_intel:card0<idle>-0[007]22719.779013:hwptr:pcmC0D0c/sub0:IRQ:pos=48,old=26800,base=26752,period=64,buf=128<idle>-0[007]22719.779070:irq_handler_exit:irq=182ret=handled<idle>-0[007]22719.779073:irq_handler_entry:irq=182name=snd_hda_intel:card0<idle>-0[007]22719.779084:irq_handler_exit:irq=182ret=unhandled kworker/2:1-5386[002]22719.779162:sched_wakeup:latency:7395[0]CPU:002<idle>-0[007]22719.780474:irq_handler_entry:irq=182name=snd_hda_intel:card0<idle>-0[007]22719.780524:sched_wakeup:kworker/7:1:5655[120]CPU:007<idle>-0[007]22719.780567:hwptr:pcmC0D0p/sub0:IRQ:pos=48,old=26848,base=26752,period=64,buf=128<idle>-0[007]22719.780567:xrun:pcmC0D0p/sub0:XRUN:old=26928,base=26880,period=64,buf=128<idle>-0[007]22719.780699:irq_handler_exit:irq=182ret=handled<idle>-0[007]22719.780701:irq_handler_entry:irq=182name=snd_hda_intel:card0<idle>-0[007]22719.780729:irq_handler_exit:irq=182ret=unhandled<idle>-0[007]22719.780736:sched_switch:swapper/7:0[120]R==>kworker/7:1:5655[120]kworker/7:1-5655[007]22719.780744:sched_switch:kworker/7:1:5655[120]W==>swapper/7:0[120]kworker/2:1-5386[002]22719.790242:sched_switch:kworker/2:1:5386[120]R==>latency:7395[0]latency-7395[002]22719.790455:hw_mask_param:pcmC0D0p:0000/025ACCESS0000000000000000ffffffffffffffff00000000000000000000000000000009latency-7395[002]22719.790455:hw_mask_param:pcmC0D0p:0000/025FORMAT0000000000000000ffffffffffffffff00000000000000000000000000000404latency-7395[002]22719.790456:hw_mask_param:pcmC0D0p:0000/025SUBFORMAT0000000000000000ffffffffffffffff00000000000000000000000000000001

3. 问题分析

观察到有playbackXRUN日志:

<idle>-0[007]22719.780567:xrun:pcmC0D0p/sub0:XRUN:old=26928,base=26880,period=64,buf=128

何解?音频播放,必须严格按照设定的采样频率、周期进行数据填充,否则就会因为数据不足给的不及时而出现underrun现象,因此对实时性有一定的要求。场景中使用48000Hz 采样率周期长度为64个采样,这样,每个周期的时长为64/48000 = 1.333ms。从日志看,有好几个问题,但最为突出的是:进程latency-7395从时刻22719.778949被调度出去开始,到时刻22719.790242再次被调度进来,中间消耗了22719.790242 - 22719.790242 = 11.293ms,也就意味着,有约11.293ms向 playback 缓冲填充数据了,这远远的超过了一个周期64/48000 = 1.333ms;同时,结合hwptr, applptr,在 进程latency-7395被调度出去时,剩余的数据不可能支撑11.293ms的消耗,因此导致了playback underun。那么谁占住 CPU 不让进程latency-7395被调度?进程latency-7395从时刻22719.778949CPU-2被调度出去,然后CPU-2转去kworker/2:1:5386,然后就等待了11.293ms才被调度回来。进程latency-7395是一个实时进程,来自alsa-lib/test/latency.c,其优先级0,这怎么还让优先级120kworker/2:1:5386给占用了这么长时间呢?答案是当前测试内核内,调度 featureRT_RUNTIME_SHARE默认被关闭导致的,详见链接: https://lore.kernel.org/lkml/c596a06773658d976fb839e02843a459ed4c2edf.1479204252.git.bristot@redhat.com/

可以通过命令消除该补丁的影响:

sysctl-wkernel.sched_rt_runtime_us=1000000

然后再次测试,不再有XRUN发生,调查至此结束。

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

2025 零代码 AI 落地神器曝光

一、场景痛点与核心目标 场景痛点 企业落地 AI 应用时&#xff0c;常面临技术整合复杂、落地周期长、成本不可控、商用配套缺失等实际问题&#xff1a;多工具拼接易出现兼容性隐患&#xff0c;非技术团队难以独立完成配置&#xff1b;自研商用模块&#xff08;用户管理、支付…

作者头像 李华
网站建设 2026/8/19 13:30:36

雷达液位计工作原理是什么?(脉冲雷达 vs FMCW 雷达)

​ ​微波如何成为工业的“智慧之眼”&#xff1f;​ ​在现代工业的复杂环境中&#xff0c;精准测量液位是安全与效率的基石。雷达液位计&#xff0c;这项看似神秘的微波探测技术&#xff0c;正以其非接触、高精度的特性&#xff0c;默默守护着无数储罐与反应釜。它究竟…

作者头像 李华
网站建设 2026/8/19 17:24:21

【必读收藏】从写代码到“调教“AI:我的转型之路与开发方式革命

从Java程序员转型为AI应用开发工程师的经历。工作内容从编写CRUD接口变为研究大模型能力边界和设计AI业务流程。开发方式从直接写代码转变为与AI工具协作。思维方式从"工具人"升级为"编排师"&#xff0c;利用自身系统架构和业务经验优势&#xff0c;实现人…

作者头像 李华
网站建设 2026/8/19 17:16:50

牛批了,磁盘清理神器

今天给大家带来一款好用的硬盘清理软件&#xff0c;可以更好的管理电脑的硬盘存储空间&#xff0c;有需要的小伙伴一定要及时下载收藏。 HDCleaner 硬盘清洁器 这款软件功能非常多&#xff1a;包括电脑垃圾清理、注册表清理、永久删除文件、磁盘分析和整理等功能。 在清理栏目…

作者头像 李华
网站建设 2026/8/19 17:19:00

换能器件阻抗分析仪

换能器件阻抗分析仪 自动平衡电桥设计在宽阻抗范围和次宽频率范围内提供了出色的准确性。它能够测量从毫欧到100兆欧的阻抗&#xff0c;扫描频率从几赫兹到110兆赫兹。然而&#xff0c;当频率超过100千赫兹时&#xff0c;其阻抗范围会逐渐变窄。换能器件阻抗分析仪 IV型分析…

作者头像 李华
网站建设 2026/8/19 17:20:16

无代码二维码系统助力产品线上展示和传播

无代码二维码系统为企业提供了创新的产品展示方式。用户可以轻松生成网页二维码&#xff0c;通过扫二维码直接访问详细的产品信息。这种方式使得企业产品信息传播变得更加高效&#xff0c;不再需要依赖传统的宣传手段。客户只需拿出手机&#xff0c;即可快速获取所需的详细内容…

作者头像 李华