问题描述
我有一个将自己的优先级设置为实时的程序。我需要在 Windows 上的容器内运行它。我在带有 wsl2 的 Win10 中使用 docker 桌面(3.5.1)。除非我将 /proc/sys/kernel/sched_rt_runtime_us
设置为 -1,否则我无法设置实时优先级。我看不到允许 rt 优先级和它们的运行时比率之间的联系。
我使用 chrt 代替我的应用程序进行演示。
在 wsl2 上的 ubunutu(没有 docker):
username@hostname:/mnt/c/WINDOWS/system32$ cat /proc/sys/kernel/sched_rt_runtime_us
950000
username@hostname:/mnt/c/WINDOWS/system32$ chrt -f 50 pwd
chrt: Failed to set pid 0's policy: Operation not permitted
username@hostname:/mnt/c/WINDOWS/system32$ sudo chrt -f 50 pwd
/mnt/c/WINDOWS/system32
按预期工作。
然而在 docker 中:
username@hostname:/mnt/c/WINDOWS/system32$ docker run --rm -it --privileged --ulimit rtprio=-1:-1 debian
root@9d99a87530fa:/# cat /proc/sys/kernel/sched_rt_runtime_us
950000
root@9d99a87530fa:/# chrt -f 50 pwd
chrt: Failed to set pid 0's policy: Operation not permitted
root@9d99a87530fa:/# echo -1 > /proc/sys/kernel/sched_rt_runtime_us
root@9d99a87530fa:/# chrt -f 50 pwd
/
它仅适用于设置 sched_rt_runtime_us。这会影响我肯定不想要的主机系统:
root@9d99a87530fa:/# exit
exit
username@hostname:/mnt/c/WINDOWS/system32$ cat /proc/sys/kernel/sched_rt_runtime_us
-1
从 Windows cli 启动容器时,我们有相同的行为。 如果您在本机 Linux(或 VM 中的 linux)上执行相同操作,则无需在容器中设置 sched_rt_runtime_us。为什么?我是否缺少一些 docker 选项?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)