尽管使用 cap_sys_nice,但无法将线程优先级设置为实时

Cannot set thread priority to real time despite using cap_sys_nice

我有一个应用程序检查 POSIX 环境是否可以通过调用

将线程优先级设置为实时
struct sched_param param;
param.sched_priority = 1;
int canSetRealTimeThreadPriority = (pthread_setschedparam(pthread_self(), SCHED_FIFO, &param) == 0);

在一个系统上 system A 这有效,但在另一个 system B 上检查失败,我想找出原因。

在两个系统上:

RESOURCE   DESCRIPTION                             SOFT      HARD UNITS
NICE       max nice prio allowed to raise             0         0
RTPRIO     max real-time priority                    20        20
RTTIME     timeout for real-time tasks        unlimited unlimited microsecs

system B 上不允许实时线程优先级:

[non root user]    -    rtprio    20

system A 上可以设置实时线程优先级:

当我在 system A 上测试并通过 setcap '' [binary] 从二进制文件中删除 cap_sys_nice+eip 时,我也无法设置实时线程优先级。我假设 system B 上的某些设置会覆盖 cap_sys_nice 设置,因为它具有更高的优先级,所以我想知道那是什么。

原来无法在系统范围内设置实时线程优先级的原因是另一个服务 运行,它在服务脚本中定义了以下设置:

CPUShares=20
CPUQuota=500%

从脚本中删除这些设置并重新启动服务后,可以再次在系统范围内设置线程优先级。