Вопрос или проблема
Я использую двухпроцессорный Mac Pro 5,1 и хочу запускать несколько программ на обоих процессорах одновременно. Сейчас все программы используют только первый процессор, а второй остается практически бездействующим круглосуточно. Я экспериментировал с xmrig и хочу запустить его вместе с другими программами одновременно. Поскольку все работают на первом процессоре, мне интересно, могу ли я заставить Vivaldi и Minecraft использовать второй процессор, чтобы запускать все три программы одновременно. Когда я искал это раньше, сообщения касались отдельных ядер процессора.
XMRIG и окно системного монитора Ubuntu MATE:
.
Ответ или решение
Прежде чем приступить к решению задачи распределения программ между двумя процессорами в вашем Mac Pro 5,1, важно подробно объяснить теорию, лежащую в основе функционирования CPU и способов управления задачами, работающими на нескольких процессорах.
Теория
Современные компьютеры и операционные системы, включая macOS, проектируются таким образом, чтобы автоматически распределять рабочие нагрузки между доступными ресурсами, включая несколько физических процессоров и ядер. Процессоры (ЦП) имеют множество ядер, и у каждого ядра есть собственные потоки. Задача операционной системы — эффективно управлять этими потоками и распределять задачи между ядрами для максимального увеличения производительности.
По умолчанию ОС пытается сбалансировать нагрузку на процессоры для достижения максимальной эффективности и энергоэффективности. Однако в некоторых случаях может быть необходимо вручную настроить нагрузку на определенные процессоры или ядра, особенно если один из процессоров остается недозагруженным.
Пример
На рынке доступно несколько инструментов и утилит, которые позволяют пользователю контролировать, на каком процессоре или ядре будет выполняться конкретная программа. Например, в Unix-подобных системах, таких как macOS, существует утилита taskset
(в основном используется в Linux-системах, но подобные концепции применяются в macOS) для назначения процессора для выполнения задачи. Однако её прямой аналог на macOS отсутствует, что делает задачу более сложной.
Применение
Для ручного распределения задач между процессорами на macOS можно использовать несколько подходов, связанных с изменением приоритета задач и применением сторонних программных решений:
-
Использование стороннего программного обеспечения: На MacOS существует ряд утилит, таких как "App Tamer" или "Turbo Boost Switcher", которые могут помочь в управлении распределением ресурсов CPU. Хотя прямое назначение задач конкретным процессорам может отсутствовать, данные утилиты могут помочь ограничить производительность определенных приложений, что потенциально может разгрузить один из процессоров.
-
Компиляция с поддержкой многопоточности: Если у вас есть возможность пересобирать исходный код программ, вы можете внедрить функции многопоточности или оптимизировать существующие. Таким образом, вы дадите операционной системе больше возможностей для распределения нагрузки.
-
Команды терминала: Хотя на macOS нет прямого аналога
taskset
, вы можете использовать функции командной строки для ограничения процессорного времени черезnice
иrenice
, которые управляют приоритетами выполнения процессов. -
Оптимизация загрузки через настройки ОС: Управление энергопотреблением и установка параметров производительности через системные настройки может также повлиять на способ распределения задач.
Однако, так как вы работаете с Ubuntu MATE, установленной на вашем Mac Pro через виртуализацию или двойную загрузку, вам становится доступным более широкий спектр инструментов Linux.
Например, вы можете использовать команду taskset
для назначения определенного процесса конкретному ядру. Пример использования команды:
taskset -c 0 <your_application>
Эта команда запускает
taskset -c <core_number> <your_application>
Если хотите задать привязку для полного процессора (всех его ядер), вам нужно знать номера ядер, относящихся к этому процессору, что можно выяснить через /proc/cpuinfo
.
Заключение
Использование двуx процессоров на полную мощность может значительно улучшить производительность при выполнении нескольких приложений одновременно. Однако, это требует более глубокого понимания того, как операционная система распределяет ресурсы и требует использования специфических инструментов и утилит для связи конкретных задач с определенными процессорами. Если ваш текущий подход основан на Ubuntu, использования taskset
будет одним из наиболее простых и прямых методов для выполнения вашей задачи.