如何实时选择thread/process优先级Linux?

How to choose thread/process priority in real-time Linux?

我正在开发实时软件,将 运行 使用 PREEMPT_RT 补丁 Linux。虽然这将使我通过使用 Linux 实时调度程序(SCHED_RRSCHED_FIFO)获得实时性能,但我不确定我应该为我的线程使用什么优先级值。在我的系统上,当我查看我看到的优先级时(仅显示带有 RTPRIO 的进程):

$ ps -e -o cmd,pri,rtprio
CMD                         PRI RTPRIO
[sirq-high/0]                89     49
[sirq-timer/0]               89     49
[sirq-net-tx/0]              89     49
[sirq-net-rx/0]              89     49
[sirq-block/0]               89     49
[sirq-block-iopo]            89     49
[sirq-tasklet/0]             89     49
[sirq-sched/0]               89     49
[sirq-hrtimer/0]             89     49
[sirq-rcu/0]                 89     49
[posixcputmr/0]             139     99
[events/0]                   41      1
[irq/17-systemac]            90     50
[irq/19-watchdog]            90     50
[irq/18-eth0]                90     50
[irq/16-serial]              90     50

我有两个问题:

  1. 这些 sirqirqposixcputmr 任务都是什么?内核线程?
  2. 我应该把我的软件放在什么优先级 运行?我应该 运行ning 的优先级高于大多数这些系统线程(>50 甚至 99),还是低于 (<49)?

What are all these sirq, irq, posixcputmr tasks? Kernel threads?

是的,括号内的任务都是内核线程。

At what priority should I make my software run?

普通 RT 为 2-69,高优先级应用程序线程为 90-98。后者会阻塞所有的 IRQ 处理程序,所以在高优先级时尽量少做。 Source