检查Linux功能以设置线程优先级

Checking for Linux capabilities to set thread priority

本文关键字:线程 优先级 设置 Linux 功能 检查      更新时间:2023-10-16

我有一个C 应用程序,该应用程序使用pthread_setschedparam()设置线程优先级。在Docker容器内部,这会失败。

如何检测我的过程是否具有设置线程优先级的必要功能?

我猜您的C 应用程序能够设置线程优先级,因为在主机上它具有所需的Linux功能cap_sys_nice

可以使用此命令capsh --print

来弄清主机上的所有Linux功能

在此处,在Docker Conatiner中,您需要使用--cap-add选项设置此功能。

docker run -it --rm --cap-add SYS_NICE ubuntu bash

如果没有工作,请尝试

docker run -it --rm --userns host --cap-add SYS_NICE ubuntu bash

由于此处提到的--userns选项可能存在一些问题

最坏的情况:如果其中任何一个不起作用,请尝试使用--privileged选项运行容器,这将添加所有Linux功能,尽管不建议使用。

尝试一下。

正确检查的正确方法只是尝试一下,看看是否获得EPERM错误。一方面,LSM可以在允许的调度程序更改上设置任意规则。

因此,正确的事情可能只是在发生这种情况时仅记录警告(一次!)。

pthread_setschedparam()的人中说:

描述了所需的权限和效果 更改线程的调度策略和优先级,以及 在每个调度策略中,允许的优先级范围,请参阅 调度(7)。

在调度效果的人中,

必须特权(cap_sys_nice)才能设置或修改线程 Sched_deadline策略

有关更多信息,您可以查看http://man7.org/linux/man-pages/man7/sched.7.html