1

I would like to run a single low latency task (for audio, ALSA/JACK) on a separate core with an embedded Linux system. Removing scheduler and other interrupts might be the key here.

There were several approaches I found so far, e.g. cpusets and an offline scheduler from 2009 (which unfortunately does not support user space tasks).

Is there a newer/more convenient way to achieve this?

Offline scheduler

4

1 回答 1

1

您要查找的主题称为“CPU 亲和力”。CPU 亲和性有两个主要方面:进程亲和性和中断亲和性。

据我(诚然有限的)知识:

  • 使用该taskset命令将进程分配给 CPU。(亲和性由子进程继承。)

  • Linux 上 CPU 分配的中断可以使用/proc/irq/<n>/smp_affinity. 要验证分配的有效性,请检查/proc/interrupts以查看哪些 CPU 服务于哪些中断。看这里。

在您的特定情况下,您希望为您的关键应用程序保留一个 CPU(又名核心),例如 CPU0。这意味着所有进程和中断都应该分配给除 CPU0 之外的所有进程,使用清除了位 0 (== CPU0) 的关联掩码,例如 0xffffffffe。并且您的关键应用程序将具有 0x1 的关联掩码,这意味着它只允许在 CPU0 上运行。

此外,您可能需要使用sched_setscheduler应用程序中的系统调用将调度设置为实时策略之一。这可能会改善您的应用程序的延迟(但也可能会变得更糟)。

请注意,调整 CPU 亲和性并非易事,而且很少有明确的解决方案。您需要进行测试和试验,以确保配置能够维持您需要的性能。例如,您的应用程序可能会与其他进程进行通信。如果通信是同步的,并且其他进程反应缓慢(因为它们的 CPU 资源有限),这反过来会对关键应用程序的性能产生负面影响。同样适用于声卡的中断。

希望有帮助。

于 2015-05-21T15:45:32.830 回答