У меня есть один однопоточный процесс на сервере, который я хотел бы статически привязать к одному ядру ЦП и постоянно предоставлять ему всю доступную вычислительную мощность (это процесс реального времени, на который сильно влияет нехватка ресурсов). К сожалению, машина сильно перегружена, поэтому центральный процессор в среднем загружен на 60% или более, и процесс обычно останавливается. Я уже назначил приоритет 99 циклическому перебору в реальном времени, но он все еще далек от совершенства.
Как я могу распределить все остальные процессы на оставшиеся 7 ядер ЦП при запуске и оставить одно ядро, выделенное для этого процесса? Я говорю о ситуации, когда все вновь порожденные процессы уже изначально привязаны к 7 ядрам.
Удалите процессор, который вы хотите выделить для вашего процесса реального времени, используя параметр загрузки ядра isolcpus:
Remove the specified CPUs, as defined by the cpu_number values, from the general kernel SMP balancing and scheduler algroithms. The only way to move a process onto or off an "isolated" CPU is via the CPU affinity syscalls
Если вы используете дистрибутив с systemd, вы можете использовать CPUAffinity
в вашем сервисном подразделении
Я никогда этого не делал, так что это всего лишь предложение.
Похоже, что taskset
конфигурация передается по наследству. Таким образом, вы можете как можно раньше в процессе загрузки сделать такую настройку для PID 1, чтобы все, что SystemD запускалось после этого, использовало только эти ядра:
taskset -p 0x7F 1
Или вам все равно, в какой момент процесса загрузки это произойдет, и просто переберите все существующие процессы.
Не забудьте изменить настройки для вашего специального приложения ...