从 C/C++ 设置进程优先级和 irq 进程的亲和性

Posted

技术标签:

【中文标题】从 C/C++ 设置进程优先级和 irq 进程的亲和性【英文标题】:Set the process priority and the affinity of an irq process from C/C++ 【发布时间】:2021-02-19 19:17:26 【问题描述】:

我想从一个用 C/C++ 编写的程序中设置 linux 中 irq 进程 (spi, gpiod) 的优先级和亲和性。要设置我自己的进程的优先级,我使用pthread_setschedparam 来设置我自己的进程的亲和性,我使用pthread_setaffinity_np。我将 pthread_self() 用于此功能。然而,尤其是 gpio irqs 很棘手,因为它们仅在之后创建 gpiod_line_request_rising_edge_events[1] 被调用。到目前为止,我只是使用类似于 chrt -f -p 90 $(pgrep myGpio) 的 shell 命令在我的系统上为 irqs 赋予更高的优先级,我可以将其放在 system("..") 函数中,但应该有更好的解决方案,我只是不知道。

提前谢谢你

[1]https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/include/gpiod.h#n499

【问题讨论】:

见***.com/a/20425286/1216776 谢谢,但我已经使用了 PREEMPT_RT 补丁,我的问题不是我无法更改优先级(我可以通过 shell 命令),而是 C/C++ 中的最佳方法是什么。或者是唯一可能的方法来设置内核模块的 irq 优先级? 【参考方案1】:

我通过使用 libprocps 解决了这个问题。可以通过gpio或spi设备的名称获取irq的pid,然后设置irq的cpu亲和力/优先级。

【讨论】:

以上是关于从 C/C++ 设置进程优先级和 irq 进程的亲和性的主要内容,如果未能解决你的问题,请参考以下文章

进程设置优先级啥作用?

从 shell 优先运行进程(不是“nice”)

用表情包看懂操作系统中的优先级翻转

不使用 nice 和/或 renice 命令设置进程的优先级

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

什么是“实时”进程优先级设置?