为什么 Linux 即使具有隔离核心,每秒都会中断处理

问题描述 投票:0回答:1

我正在使用 PREEMPT_RT 内核、多核 Xeon 处理器的实时系统 Linux 中工作。 我有一个隔离核心,关闭了 irqaffinity,并在隔离核心上使用 nohz_full 选项。 我已将优先级设置为实时,即 SCHED_FIFO,优先级为 99。

我正在尝试运行一个循环,进行一系列简单的计算,大约需要一毫秒。 我计时并无限期地再次运行。 即使我尽一切努力获得对调度程序的完全控制,我的处理还是每秒中断一次,持续 50 毫秒。 1秒的间隔和50毫秒的停顿都非常有规律。

我已使用

cat /proc/interrupts
验证该核心上没有发生中断。 唯一改变的是我的应用程序运行时“本地计时器中断”,而不运行时则没有任何变化。

为什么会发生这种情况? 我可以看到一些 Linux 计时器或调度任务最终可能需要在该核心上运行,但花费 50 毫秒来执行某些操作似乎相当过多。

关于为什么会发生这种情况以及是否有任何方法可以控制它有什么想法吗?

linux-kernel real-time scheduler
1个回答
0
投票

我发现有 2 个内核参数控制此行为:

/proc/sys/kernel/sched_rt_period_us
sched_rt_runtime_us
。 它们的默认值为 1000000 和 950000,这与每秒 50 毫秒的中断完全相关。 可以通过修改这些值来控制此行为,包括将它们设置为 -1 以完全阻止此行为。

© www.soinside.com 2019 - 2024. All rights reserved.