В ядре Linux 2.6.28-11 я использую setpriority для смещения количества процессорных времени, получаемых различными пользовательскими процессами. Пользователь 1 должен получить удвоенную мощность процессора для пользователя 2. Используя Linux-приоритет Linux, я назначил пользователю 2 более низкий приоритет (выше с точки зрения хороших значений). Когда я запускаю ту же самую программу через оболочку с компьютером под нагрузкой, выполнение пользователя 2 занимает вдвое больше времени, чем пользователь 1. Однако, если я запускаю программу как root, а затем использую setuid, seteuid, setgid, setegid и setgroups, чтобы стать пользователем 2 (компьютер снова загружается с той же самой программой, которая выполняется пользователем 1 таким же образом) , программы выполняют одинаковое количество времени для выполнения; Процесс пользователя 2 не планировался меньше, чем пользователь 1. Как я могу обойти это? Нужно ли мне устанавливать что-либо еще для планировщика, чтобы понять, что этот процесс теперь является частью другого пользователя?Групповое планирование Linux для пользователя, не применяемого к методу setuid-ed
Выполняемая программа находится в Python.
Спасибо за разъяснение. У вас есть хороший материал для чтения, в котором рассказывается о том, как Linux обрабатывает и приоритизирует приоритеты? Учитывая ваше решение выше, что действительно работает, кажется, что невозможно гарантировать, что все процессы пользователя 1 будут использовать только x% от процессора, если у них есть какие-либо процессы, которые происходят из корневого процесса с вилкой, который был setuid- редактор Это правда? – BrainCore
не имеют каких-либо хороших материалов для чтения, но единственное, что проверено 'setuid', это« я root »и имеет ли целевой идентификатор UID меньше, чем' RLIMIT_NPROC'? ». Другие ограничения и приоритет ресурсов не проверяются и не затрагиваются. * (на самом деле проверка «если не запрещена LSM, у меня есть« CAP_SETUID », и если я фактически изменяю реальный UID, у мишеней меньше процессов« RLIMIT_NPROC », или это указанный UID равен текущему реальному UID или сохранен UID? ») – ephemient
В какой-то степени вы можете смотреть соединитель netlink для событий« PROC_EVENT_UID », чтобы применить эти исправления, но я думаю, что вы действительно хотите, чтобы на основе UID были созданы cpusets и планирование на основе групп. – ephemient