从 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 进程的亲和性的主要内容,如果未能解决你的问题,请参考以下文章
不使用 nice 和/或 renice 命令设置进程的优先级