如何阻止内核暂停我的线程?

如何阻止内核暂停我的线程?

我为树莓派 PI 4(Debian Bullseye,内核 5.10.92)编写了一个软件 PWM 生成器。它是一个多线程程序,其中一个线程是 PWM 生成器。它应该不间断地运行并全速暂停以正确生成 PWM。

它被写入以便只能读/写内存。其中一些操作是与其他线程通信的原子操作,还有一些直接写入 Broadcom 芯片的寄存器以切换 GPIO 输出。

它工作得很好并且非常快,除了线程被中断和暂停这当然是一个问题。

以下是我尝试避免此问题的方法:

  1. 将线程关联设置为 CPU 3。与顶部确认。
  2. 将优先级设置为 SCHED_FIFO 99。与顶部确认。
  3. 在 中将参数添加isolcpus=3到启动命令中/boot/cmdline.txt

不幸的是,我的线程仍然暂停了不同的持续时间。我通过时间测量来检测它,并使用示波器在 GPIO 引脚上看到它。

看着内核参数文档,据说 isolcpus 已被弃用,并被 cpuset 取代。但我迷失了,因为我找不到更多关于这方面的信息。

我必须做什么才能让我的线程全速运行并且不再被内核暂停?

编辑:源代码

相关内容