如何配置 LXC 以允许在容器中使用 SCHED_RR?

如何配置 LXC 以允许在容器中使用 SCHED_RR?

关于如何配置 LXC/cgroups 以允许容器中的应用程序使用 SCHED_RR,您有什么想法吗?

我在互联网上看到过关于卸载 cpu-cgroup 的提及,我已尝试过,手动(在 cpu cgroup 上运行 umount)但似乎没有帮助。

关于如何持续卸载 cgroup,您有什么想法吗?在 Fedora 20 上。

卸载 CPU cgroup 是否是允许容器应用程序使用 SCHED_RR 的正确方法?

谢谢

答案1

我相信除了 CAP_SYS_NICE 之外,您还需要 CAP_SYS_ADMIN。我不能肯定地说,但内核对 ioprio() 有一个检查,它需要 CAP_SYS_ADMIN && CAP_SYS_NICE 来实现像 SCHED_RR 这样的“实时”优先级。

http://linux.die.net/man/2/ioprio_set

(设置 I/O 优先级所需的权限)

当我尝试更改容器内的调度优先级时,我遇到了任何 sched_setsched() 调用都返回 EPERM 的相同问题。当我尝试从主机到容器中的进程进行相同的更改时,我也遇到了 EPERM 错误。

编辑:实际上,我错了。我弄清楚了如何让 SCHED_RR 适用于我的设置。对 sched_setscheduler() 的调用出现 EPERM 错误,因为我没有在 cgroups 文件夹中设置实时预算。

控制组策略不允许在未分配运行时预算的情况下设置实时调度策略,而运行时预算不是由提供的配置设置的。

https://www.novell.com/support/kb/doc.php?id=7012851

答案2

请记住,LXC 容器通常在启动时会放弃功能。您至少需要在容器中允许 CAP_SYS_NICE。此功能允许调用,sched_setscheduler()这是设置 SCHED_RR 所需的调用。

参考LXC配置示例:

lxc.cap.keep = sys_nice

当然,您的应用程序也必须具有 CAP_SYS_NICE(或者以 root 身份运行,在这种情况下它们已经具有了)。

相关内容