Многоядерная обработка может иметь свои преимущества и недостатки, и иногда вам нужно вручную назначать ядра ЦП программам (так называемое «привязка ЦП»), чтобы добиться максимальной производительности. В Linux основным инструментом является набор задач . Это звучит потенциально пугающе, но мы разобьем его на простые шаги, чтобы упростить процесс.
Основы работы с наборами задач
Использование набора задач можно разбить на две части: соответствие ЦП программам, которые необходимо запустить, и программам, которые уже выполняются. Запускать программы проще, поэтому начнем с этого. Команда запуска выглядит следующим образом:
taskset -c cpu-core-number(s) application
Прежде чем ввести номер ядра ЦП, которое вы хотите назначить, не забывайте, что схема нумерации Unix обычно начинается с 0, поэтому ваше первое ядро будет 0, второе ядро — 1 и так далее. Таким образом, двухъядерная машина будет иметь ядра 0 и 1, а четырехъядерная машина — ядра 0, 1, 2 и 3.
Предположим, вы хотите запустить Audacity на двухъядерной системе и хотите, чтобы она работала на втором ядре. Эта команда будет такой:
taskset -c 1 audacity
Также читайте: Что влияет на производительность процессора? Вот все, что вам нужно знать
Использование нескольких ядер
На одной из наших машин Chrome иногда пропускал кадры при потоковой передаче видео, но при назначении двум ядрам вел себя прилично. Если вы хотите попробовать то же самое на четырехъядерной системе и хотите назначить Chrome третьему и четверому ядрам, команда будет такой:
taskset -c 2,3 google-chrome
Вам не обязательно назначать привязку ЦП к последовательным ядрам — вы можете выбрать любое ядро (ядра) случайным образом. Допустим, у вас шестиядерный компьютер и вы хотите использовать Chrome на втором и шестом ядрах. Вы должны ввести команду:
taskset -c 1,5 google-chrome
Вы также можете использовать тире, чтобы распределить приложение по нескольким ядрам. Например, многие старые программы или системные функции по умолчанию используют первое ядро. Что, если вы хотите оставить первое ядро максимально свободным и при этом распределить большое приложение по всем остальным ядрам?
Предположим, у вас восьмиядерная система и вы хотите запустить Steam со второго ядра на восьмое. Эта команда будет такой:
taskset -c 1-7 steam
Изменение привязки к уже запущенной программе
Taskset не ограничивается простым запуском приложений. Вы также можете изменить привязку ЦП для уже запущенной программы. Однако прежде чем вы сможете изменить привязку приложения, вам сначала необходимо узнать его идентификатор процесса (или PID для краткости).
Чтобы узнать PID вашего приложения, вы можете попробовать использовать системный монитор вашего рабочего стола, но самый быстрый способ — просто использовать top
. Неудивительно, что он использует команду:
top
Имена всех запущенных команд находятся в правой части экрана. Соответствующие идентификаторы процессов указаны слева.
![Верхний Pid набора задач](https://saintist.ru/wp-content/uploads/2024/05/taskset-top-pid.png)
Запишите свой PID, поскольку вы скоро будете его использовать. В этом примере мы будем использовать VLC, который воспроизводит видео Matroska высокой четкости на старом ПК с шестью ядрами. Мы экспериментируем с различными типами процессоров, чтобы добиться максимальной производительности от VLC.
Чтобы изменить привязку существующего процесса, синтаксис выглядит следующим образом:
taskset -cp core-numbers PID
Если вы видите наш снимок экрана выше, идентификатор процесса VLC — 20485. Мы собираемся попробовать запустить VLC на четвертом, пятом и шестом ядрах, которые в нумерации Unix будут 3-5. Итак, после всего этого команда будет:
taskset -cp 3-5 20485
Но что, если вы хотите проверить существующую привязку, прежде чем ее менять? Для этого не вводите никаких основных чисел, и набор задач сообщит вам, как назначается сходство. Итак, если мы изменим последнюю команду на:
taskset -cp 20485
это показывает нам, что VLC распределен по всем ядрам.
![Набор задач «Нахождение сходства»](https://saintist.ru/wp-content/uploads/2024/05/taskset-finding-affinity.png)
Давайте попробуем это еще раз с другой программой. Допустим, вместо этого мы запускаем большую Matroska с SMPlayer, и SMPlayer уже запущен. Топ говорит, что PID — 16058.
![Top Smplayer набора задач](https://saintist.ru/wp-content/uploads/2024/05/taskset-top-smplayer.png)
Но сначала мы хотим узнать его существующую близость. Используя команду с переключателем -cp
, но без номеров ядер, мы видим, что сходство в настоящее время распространяется на все ядра.
![Привязка набора задач к Smplayer](https://saintist.ru/wp-content/uploads/2024/05/taskset-smplayer-affinity.png)
Теперь мы можем попробовать распространить SMPlayer на те же три ядра, что и в эксперименте VLC, с помощью команды:
taskset -cp 3-5 16058
Это легко, не так ли? Если вы хотите протестировать свой компьютер, ознакомьтесь с нашим руководством по 8 полезных инструментов для стресс-тестирования вашего процессора .