Распределите рабочую нагрузку среди различных центральных процессоров

На моей Ubuntu 16.04 я запускаю программу, которая является относительно дорогой с точки зрения использования ЦП. Требуется вполне много времени для окончания, и другие задачи (как просмотр веб-сайтов) становятся медленнее как следствие. Я искал способ улучшить вычислительную мощность, если это возможно, и в то же время, чтобы знать лучше, что происходит в моем ноутбуке.

Этим я нашел это, если я спрашиваю top, программа, которую я запускаю, показывает использование ЦП 100%, в то время как, когда я открываюсь System monitor использование ЦП только на уровне ~25% в Processes вкладка. Кроме того, Resources вкладка в Системном мониторе показывает 4 центральных процессора, использование которых изменяется с ~5 до ~100% для каждого:

CPUs usage

Результат lscpu :

@C:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 142
Model name:            Intel(R) Core(TM) i5-7200U CPU @2.50GHz
Stepping:              9
CPU MHz:               3099.937
CPU max MHz:           3100,0000
CPU min MHz:           400,0000
BogoMIPS:              5423.81
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

Есть ли что-нибудь, что я могу сделать для улучшения ситуации, такой как разведенной работа среди этих 4 центральных процессоров? Usinge nice не кажется решением моей ситуации.

Я знаю, что это может быть общим вопросом, который зависит от типа программы, которую я запускаю (скажем, это - a Python сценарий), но я пытаюсь здесь получить общие знания.

0
задан 13 October 2018 в 10:41

2 ответа

Есть ли что-нибудь, что я могу сделать для улучшения ситуации, такой как разведенной работа среди этих 4 центральных процессоров? Хороший Usinge не кажется решением моей ситуации.

Короче говоря: нет. Программа является единственной, распараллелил.

Вершина может показать использование CPU двумя способами: насыщенность на ЦП или доля общего количества. Если у Вас есть четыре базовых системы, вершина может показать режим Irix:

Также для многопроцессорных сред, если режим Irix Выключен, вершина будет работать в режиме Solaris, где использование CPU задачи будет разделено на общее количество центральных процессоров. Вы переключаете режимы Irix/Solaris со 'мной' интерактивная команда.

Можно переключить это путем нажатия I в вершине. Поскольку у Вас есть четыре ядра процессора, использование разделено на четыре, и Вы покажете 25%. При включении режима Irix он покажет 100%.

Ваше приложение является отдельным, распараллелил. Это выполняет последовательный поток на одном ядре процессора. Если у Вас есть исходный код, можно изменить это. Это обычно - не тривиальная задача однако, и в зависимости от задачи это не может быть возможно.

Linux имеет планировщик, который распределит рабочие потоки различным центральным процессорам/ядрам.

2
ответ дан 27 October 2019 в 08:08

100% по сравнению с 25%-м использованием ЦП

Согласно lscpu, у Вас есть четыре ядра в Вашем ЦП:

On-line CPU(s) list:   0-3

top использование 100% за ядро, поэтому если у Вас есть четыре основных процессора, это составляет 400%. Вы израсходовали одно ядро полностью, таким образом, это составляет 100% из 400%. Системный монитор использует 100% для всего (или возможно на фактический ЦП, я не уверен). Одно ядро является четвертью этих четырех доступных ядер, таким образом, оно обнаруживается как 25%-е использование в системном мониторе.

Значительное замедление с одним используемым ядром

Если система замедляется немного, это - вероятно, просто использование ЦП, и Вы не можете сделать многого об этом кроме повышения значения правильности процессов рабочей нагрузки.

Если это замедляется ко много меньше чем скорости трех четвертей, это, вероятно, использует много ввода-вывода так, чтобы другие приложения не могли сделать ввода-вывода очень быстро, или файлы использования или сеть или свопинг, если нет достаточного количества RAM в системе, которые все показывают в приложении системного монитора. С использованием файла и свопингом также показывают sudo iotop.

Изменение приоритета задачи

Можно использовать nice с высоким значением как 15, чтобы заставить задачу уступить другим задачам, для которых нужен ЦП:

nice -n 15 the-program its-arguments

Замедление задачи

Можно попробовать обоих niceлуг программа к высокому значению как 15 и использование cpulimit программа (в cpulimit Пакет APT) для сокращения использования ЦП, в то время как позволяется работать.

Пример, замедляющийся the-program its-arguments вниз к 60%-му использованию ЦП и использованию значения правильности 15:

cpulimit -q -z -l 60 -- nice -n 15 the-program its-arguments

Используя несколько ядер

Существует несколько способов продолжиться до разделения рабочей нагрузки для использования большего количества ядер. Это, вероятно, не, что Вы хотите сделать, при попытке сделать другие вещи на компьютере, так как он может израсходовать еще больше вычислительной мощности, чтобы сделать задачи быстрее.

Нужно выполнить процесс четыре раза каждый с одной четвертью рабочей нагрузки, если существует некоторый способ указать рабочую нагрузку при выполнении его. Одна возможность, полезная при некоторых обстоятельствах, использует xargs -n ## -P 4 command обработать ## объекты за один раз на каждом ядре с помощью 4 ядер.

Другой должен переписать приложение для использования приблизительно четырех потоков вместо всего один. Если существует много ввода-вывода, ожидающего в Вашем приложении или чем-то как этот, можно потенциально увеличить его далеко выше четырех потоков.

Также существуют другие возможности.

Объединение использующий несколько ядер с замедлением задачи и устанавливанием значения правильности

Можно объединить использование нескольких ядер с замедлением задачи или изменением приоритета задачи. Это позволит Вам иметь конец задачи более быстро, но уходить с дороги других процессов.

1
ответ дан 27 October 2019 в 08:08

Другие вопросы по тегам:

Похожие вопросы: