Вопрос или проблема
Я использую Подсистему Windows для Linux (WSL) и не очень опытен в возможностях Linux. В последнее время мне хотелось лучше понять использование ЦП процессами, но меня это сильно смущает. Я на компьютере с 2 ядрами и 4 логическими ядрами.
В примере использования ЦП, который я хочу обсудить, я запустил 2 независимых последовательных вычисления из кода DFT (физическая тема) из 2 терминалов. У меня также открыты другие меньшие процессы в моей системе Windows (интернет-вкладки, Thunderbird…).
Если я проверяю использование ЦП через диспетчер задач Windows, он сообщает мне, что я использую примерно 70% ЦП, что, по-видимому, равномерно распределено по 4 логическим процессорам.
Когда я использую команду top
в Linux, она показывает мне два процесса “pw.x” (то есть те вычисления, о которых я говорил), использующих около 100% ЦП каждый (!). Я не понимаю, к чему относятся эти значения “100%”; 100% от чего? Я думал, что это среднее значение по всем ядрам. Мой компьютер все еще работает очень плавно, так что ЦП не могут быть полностью использованы кодом DFT.
Если я проверяю это с помощью mpstat -P ALL
, я получаю другие результаты: он сообщает мне, что каждое из 4 процессоров используется на ~20%-30%… Как это согласуется с диагностикой Windows? Или с командой top?
Смотрите скриншот ниже для резюме (извините за французский язык в Windows):
В принципе, мои вопросы следующие:
-
Являются ли эти разные диагностики согласованными между собой?
-
Может кто-то указать мне на источник для новичков, ясно объясняющий использование этих команд мониторинга и что именно обозначают зарегистрированные величины?
-
Существует ли команда, которая позволит мне узнать, какое ядро делает что? Я выполняю последовательные вычисления (не параллелизованные), и я понимал, что вычисления, следовательно, обрабатываются на каждом ядре по одному, но я могу ошибаться. Если это так, я хотел бы знать, какое ядро используется для каждого из вычислений и насколько оно загружено.
Большое спасибо заранее и извините за вопросы новичка.
Я полагаю, что Top показывает процент для каждого потока (логического ядра), так что на вашем компьютере может быть до 4 процессов, каждый из которых будет отображаться как 100% ЦП. Если вы не напишете программу, которая будет простаивать и ждать аппаратных прерываний, все, что вы запустите, будет занимать 100% потока, на котором оно работает, пока работает. Процесс, который вы запускаете, будет находиться только на одном потоке, если вы не запрограммируете его специально как многопоточный, хотя вы можете вызвать многопоточную функцию, не зная об этом (некоторые алгоритмы FFT многопоточны).
В WSL top показывает только процессы Linux, поэтому WSL использует 200%/4=50% от вашего общего объема, но Windows показывает все вместе, так что она занимает оставшиеся 20%, чтобы достигнуть 70% от общего времени ЦП. “mpstat -P all” похоже реагирует на процессы Windows (возможно, это вызов на более низком уровне оборудования) и сообщает в процентах от общего времени ЦП, так что максимум будет 25% на поток, но в пределах 1-2% может быть, как близко это действительно выражается. Единственное, в чем я не уверен, так это почему Windows не показывает 2 потока на 100%.
Насколько я понимаю, Подсистема Windows для Linux работает внутри Windows как процесс. Операционная система Windows распределяет нагрузку между всеми ядрами и логическими процессорами. Во-вторых, Windows зарезервировала некоторые ресурсы, и WSL не может использовать 100% процессора. WSL имеет ограниченный доступ к процессору, насколько это позволила Windows. Причина, по которой WSL показывает использование процессора на 100%, заключается в том, что он использует 100% ресурсов процессора, доступных ему. С другой стороны, Windows действительно может использовать 100% процессора, но не делает этого.
Как узнать, какой процесс использует какое ядро процессора в Windows:
- Откройте Диспетчер задач.
- На вкладке Процессы > щелкните правой кнопкой мыши на любом процессе и выберите “Подробнее”. Поток процесса будет выделен на вкладке деталей.
- Щелкните правой кнопкой мыши на потоке и нажмите на “Установить связь”. В всплывающем окне отобразится количество ядер, которые использует этот конкретный поток. Вы также можете увеличить или уменьшить количество разрешенных ядер для этого потока, установив или сняв флажки.
Ответ или решение
Оптимизация использования многоядерного процессора в среде Windows Subsystem for Linux (WSL)
Ваша задача исследовать использование процессора в среде Windows Subsystem for Linux (WSL), которая включает работу с независимыми процессами в полях научных расчетов. Давайте рассмотрим, как различные инструменты мониторинга CPU могут показывать разные показатели, и что именно они означают.
Совместимость различных инструментов диагностики
-
Windows Task Manager:
- Вы наблюдаете использование ~70% процессора, равномерно распределенное между 4 логическими процессорами. Этот показатель основан на всех запущенных приложениях и службах в вашей системе, включая приложения Windows, работающие в фоне и WSL.
-
Команда
top
в Linux:- В этом случае каждая из двух запущенных вами процессов
pw.x
показывает использование ~100% CPU. Однако это не означает, что процессор полностью загружен. В Linux значение 100% в данном контексте указывает на полное использование одного логического ядра. Так как ваш компьютер имеет два физических ядра и четыре логических (гипертрейдинг), две независимые задачи могут использовать до 200% CPU при суммировании, но физически они не могут использовать все ресурсы одновременно из-за работы других процессов.
- В этом случае каждая из двух запущенных вами процессов
-
Команда
mpstat -P ALL
:- Эта команда показывает использование CPU для каждого логического процессора и выводит значения ~20%-30%. Эти цифры могут показывать реальную загрузку CPU в процентном соотношении, где 100% соответствует загрузке одного логического ядра. Здесь учитывается как нагрузка от WSL, так и от Windows-приложений.
Таким образом, все три инструмента показывают реализацию нагрузки, но с разных уголков, что может привести к путанице. Каждый инструмент рассматривает нагрузку на процессор через свою призму, что не всегда дает единый результат по всему контексту использования системы.
Рекомендуемая литература и ресурсы
Для лучшего понимания работы команды мониторинга и интерпретации показателей CPU, обратите внимание на следующие ресурсы:
- Документация по команде
top
- Документация по
mpstat
- Обучающие материалы по мониторингу системы в Linux
Эти ресурсы помогут вам глубже понять как функционируют процессы, и как различного рода утилиты позволяют отслеживать загрузку CPU.
Как определить, какая задача использует какое ядро
Чтобы отследить использование конкретного ядра для каждого процесса в Windows:
- Откройте Диспетчер задач.
- Перейдите на вкладку Процессы и щелкните правой кнопкой по интересующему процессу, затем выберите Подробности.
- В появившемся окне выберите поток и щелкните правой кнопкой мыши для установки Привязки. Это покажет, какое количество ядер использует конкретный поток, и возможно, вы сможете управлять нагруженностью более точно.
Если ваши расчеты действительно не имеют многопоточности, то они должны использовать одно ядро, однако программные оптимизации (например, FFT) могут автоматически использовать несколько потоков.
Заключение
Использование многоядерных процессоров в среде WSL может быть сложным, но путем тщательного анализа и применения различных инструментов можно получить полное представление о загрузке процессора. Инструменты мониторинга работают с нагрузкой на уровень системы, и важно понимать, что выводы могут варьироваться, основываясь на методах их анализа.