首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核Linux系统上的实时音频

多核Linux系统上的实时音频
EN

Stack Overflow用户
提问于 2015-04-25 09:20:13
回答 1查看 673关注 0票数 1

我正在一个带有RT内核的多核(Debian) Linux机器上开发一个音频应用程序。音频源生成所需的处理时间很长,无法由单个内核处理,因此我有三个不同的线程:

  1. 运行在核心0上的主端口音频线程。
  2. 运行在核心1上的源生成1
  3. 运行在核心2上的源生成2

线程2和3正在写入循环缓冲器,而线程1则从循环缓冲区读取数据并将其加到端口音频缓冲区中。

我尝试过许多缓冲区大小和调度策略,我的最佳结果是FIFO策略,音频缓冲区大小为16个立体声样本,环缓冲区大小为576。此解决方案会产生超过13 is (576/44100*1000)的延迟,这太过了。

我确信这个延迟可以减少,但我不是Linux调度方面的专家。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-27 23:54:53

只要您将流程的RT保持在核心位置上,策略就不重要了。

确保将任何其他应用程序踢出用于RT的核心(例如,使用isolcpus=内核cmdline参数)。否则,低prio进程会触发I/O,从而阻塞RT线程。您还应该将应用程序不关心的所有中断分配给未使用的核心。实际上,我建议在正常任务中使用core0,在RT中使用核心1、2、3,因为core0是引导CPU,因此必须执行一些特殊的事务管理任务。

如上文所述,一旦对系统进行分区,就可以尝试延迟度量工具,以找出导致延迟的原因。谷歌linux rt latency trace会给你很多有用的链接。这是最基本的一个:http://people.redhat.com/williams/latency-howto/rt-latency-howto.txt

如果发现某些内核处理阻塞了您的应用程序,您可以通过查看下面的内核线程描述找到解决方案:http://lxr.free-electrons.com/source/Documentation/kernel-per-CPU-kthreads.txt

你绝对应该能够达到2ms以下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29863321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档