#linux #docker-for-windows #wsl-2 #thread-priority #sched
Вопрос:
У меня есть программа, которая устанавливает свой собственный приоритет в реальном времени. Мне нужно запустить его в контейнере на Windows. Я использую docker desktop (3.5.1) в Win10 с wsl2. Я не могу установить приоритет в реальном времени, если не задам /proc/sys/kernel/sched_rt_runtime_us
значение -1. Я не вижу связи, разрешающей приоритеты rt и их соотношение времени выполнения.
Вместо своего приложения я использую chrt для демонстрации.
В убунуту на wsl2 (без докера):
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
Работает, как и ожидалось.
Однако в докере:
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.
Если вы делаете то же самое в собственном Linux (или linux в виртуальной машине), вам не нужно устанавливать sched_rt_runtime_us в контейнере. Почему? Мне не хватает некоторых опций докера?