Управляем CPU affinity или как ограничить процессы нужными ядрами
По просьбе коллеги @dox89.
Предыдущие статьи по настройке производительности Здесь и Здесь:
В современных системах число ядер только растет. И запущенный процесс гуляет по ядрам, как разочаровавшаяся в любви девушка.
Таким образом планировщик системы пытается балансировать нагрузку, ресурсы (и тепловыделение). Но это поведение можно изменить.
ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ ЧИТАТЬ ПЕРВЫМ В MAX
С помощью программы можно taskset можно запускать процессы на указанных ядрах.
Например:
taskset --cpu-list 0-2,6 thunderbird
Запустит thunderbird, и разрешит почтовому клиенту работать только на указанных ядрах.
Фактически taskset не разрешает работать на указанных ядрах, а запрещает работать на всех остальных, потому что по умолчанию любому процессу можно работать на всех ядрах.
Если использовать ключик -p PID, то аналогичную процедуру можно выполнить с уже запущенным процессом.
Современные процессоры имеют гибридную архитектуру. Т.е. они содержат и энергоэффективные и производительные ядра.
Так вот, с помощью этой команды можно немного оптимизировать производительность - ограничивая второстепенным приложениям доступ к высокопроизводительным ядрам.
Ну, или для всей «шушеры» выделить пару ядер, освободив остальные для самых важных процессов.
Но если Вам лень этим заниматься - знайте, что планировщик и так неплохо справляется. Единственное, чего он не знает - какие процессы для Вас более важные. Но ему всегда об этом можно напомнить, с помощью команды nice.
Ну, и напоследок - вредный совет.
Однажды у моего коллеги на работе эффективные менеджеры ввели KPI.
Деньги начали платить по проделанной, а не стабильной работе. После этого у всех, включая бухгалтерию в конце квартала все начинало тормозить Но не сразу, а как-то плавно, но заметно.
И приходилось проводить сложную многочасовую оптимизацию систем (оптимизация дисков, переиндексирование, очистка кэшей…). После которой все до конца следующего отчетного периода работало нормально.
А потом - о5-25.
Но как они этого добивались - я не знаю :-)
man taskset
man nice