Как Linux распределяет нагрузку на несколько ядер процессора

Скажем, я получил 2 четырехъядерных процессора (8x 2,13 ГГц). Сервер запускает несколько программ, которые могут только использовать 1 ядро + Nginx и рабочий Apache одновременно.

Вопрос, делает Linux, эффективно выделяют единственные потоковые программы каждому ядру так, чтобы каждая программа могла использовать полную мощность 1 ядра и не вмешивалась в загрузку Apache и Nginx. Так в основном удостоверяясь, что все ядра используются и не "куча", таким образом, программы могут закончить тем, что отстали?

5
задан 18 October 2014 в 15:43
3 ответа

Хороший ответ на ваш вопрос - слишком сложно для SF. Короткий ответ - «да», Linux и большинство современных операционных систем очень эффективно балансируют процессы, которые готовы к работе на доступных процессорах.

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

Кроме того, по умолчанию используются как nginx, так и Apache httpd multithread / multiprocess. Было бы очень странно, если бы они работали как единый процесс. Они не опрашивают сетевые соединения / потоки, они используют вызов ядра для остановки работы, когда нечего делать, и автоматически просыпаются, когда есть что-то сделать.

7
ответ дан 3 December 2019 в 01:09

Linux в первую очередь заботится о максимальном использовании ЦП за счет балансировки нагрузки потоков по всем доступным ядрам. Это не означает, что Linux произвольно решает разместить определенные потоки на определенных ядрах, но он использует алгоритм планирования процессов, чтобы решить, какой способ распределения потоков по всем ядрам является наиболее эффективным. Так что ответ на ваш вопрос - да. Если вы хотите узнать больше, я бы предложил "Понимание ядра Linux" от Bovet & Cesati.

3
ответ дан 3 December 2019 в 01:09

Если под «несколько программ, которые могут использовать только 1 ядро» вы имеете в виду программы, для которых вы можете изменить источник, рассмотрите возможность добавления вызова sched_setscheduler () во время инициализации потока, чтобы дать планировщику подсказку о том, как вы хотите, чтобы каждый поток Запланированное. Планировщик linux чертовски потрясающий IMHO, но чем больше в нем информации, тем лучше он может выполнять свою работу! sched_setscheduler () - это привилегированный системный вызов, вызывающий его поток должен как минимум иметь возможность CAP_SYS_NICE и, возможно, другие.

0
ответ дан 3 December 2019 в 01:09

Теги

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