Назад | Перейти на главную страницу

Как Linux распределяет полосу пропускания между процессами?

Если я не настроил формирование трафика, как Linux распределяет (исходящую) полосу пропускания между процессами?

Моя конкретная ситуация заключается в том, что я запускаю 30 идентичных процессов на облачной виртуальной машине, каждый из которых в основном отправляет данные по сети (TCP) с максимально возможной скоростью. Вместе они, кажется, достигают общей исходящей пропускной способности, на которую я рассчитываю. Однако некоторые процессы завершаются гораздо раньше, чем другие, и потребляют гораздо больше пропускной способности (до 3 раз больше). После завершения быстрых процессов оставшиеся процессы ускоряются и используют больше полосы пропускания.

Как Linux определяет, какую пропускную способность должен получить каждый процесс?

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

  • Планировщик ЦП, когда задачи (и обработчики прерываний драйверов) могут попасть на ЦП
  • Как быстро задачи получают свои данные, возможно, ограничено узкими местами или конфликтами
  • Какая дисциплина очередей используется, по сути, планировщик пакетов
  • Подробные сведения о драйвере, такие как количество аппаратных очередей передачи и способ выбора потоков.
  • Поведение протокола TCP: если один поток попадает в управление перегрузкой, он может оставаться медленным, пока пропускная способность ограничена
  • Все вышеперечисленные соображения для удаленных систем, принимающих потоки
    • Если все ваши подключения не относятся к одному получателю, Другой конец, возможно, имеет большее влияние, чем ваш конец

Многие из них не оптимизируются для «равноправия» равной полосы пропускания, а предназначены для других критериев. Контроль перегрузки TCP скорее будет иметь небольшую производительность, чем терпеть застойный коллапс.

И не забывай, ты наверное не единственная в сети в любой момент времени - поэтому вам также необходимо учитывать маршрутизаторы, переключатели и т. д. между «здесь» и «там».


Если это больше, чем любопытство, решение как можно быстрее - увеличить пропускную способность.

Или выполнение QoS, формирования или регулирования приложений может установить квоты для лучшего общего поведения, что бы лучше ни было. Но это уже не так быстро, как только возможно, вы выбираете победителей и проигравших в соответствии с политикой.

Вы замечали, что на переполненном, но не полностью застрявшем шоссе с несколькими полосами движения некоторые машины и полосы фактически будут временно быстрее других? Никто явно не контролирует поток машин и не назначает им «полосу пропускания», и аналогично Linux не распределяет явно пропускную способность между процессами.

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

Многое зависит от «хорошего» фактора (который может быть установлен и изменен для каждого процесса) и «хорошего» фактора всех других процессов, запущенных в данный момент, а также от количества доступных процессоров и скорости «передней» шины, т.е. 'задняя' шина, шина данных и т. д.