Если я не настроил формирование трафика, как Linux распределяет (исходящую) полосу пропускания между процессами?
Моя конкретная ситуация заключается в том, что я запускаю 30 идентичных процессов на облачной виртуальной машине, каждый из которых в основном отправляет данные по сети (TCP) с максимально возможной скоростью. Вместе они, кажется, достигают общей исходящей пропускной способности, на которую я рассчитываю. Однако некоторые процессы завершаются гораздо раньше, чем другие, и потребляют гораздо больше пропускной способности (до 3 раз больше). После завершения быстрых процессов оставшиеся процессы ускоряются и используют больше полосы пропускания.
Как Linux определяет, какую пропускную способность должен получить каждый процесс?
Как и большинство проблем с производительностью, это сложно. Сколько пропускной способности получает каждая задача - это сложное взаимодействие между множеством вещей на разных уровнях сетевого стека. Даже без придания формы. Неполный список:
Многие из них не оптимизируются для «равноправия» равной полосы пропускания, а предназначены для других критериев. Контроль перегрузки TCP скорее будет иметь небольшую производительность, чем терпеть застойный коллапс.
И не забывай, ты наверное не единственная в сети в любой момент времени - поэтому вам также необходимо учитывать маршрутизаторы, переключатели и т. д. между «здесь» и «там».
Если это больше, чем любопытство, решение как можно быстрее - увеличить пропускную способность.
Или выполнение QoS, формирования или регулирования приложений может установить квоты для лучшего общего поведения, что бы лучше ни было. Но это уже не так быстро, как только возможно, вы выбираете победителей и проигравших в соответствии с политикой.
Вы замечали, что на переполненном, но не полностью застрявшем шоссе с несколькими полосами движения некоторые машины и полосы фактически будут временно быстрее других? Никто явно не контролирует поток машин и не назначает им «полосу пропускания», и аналогично Linux не распределяет явно пропускную способность между процессами.
То, что вы видите, в основном представляет собой взаимодействие TCP-потока и управления перегрузкой между различными TCP-соединениями. Если общих ресурсов не хватает, будут временные победители и проигравшие, когда несколько агентов будут сражаться за некоторые из этих ресурсов.
Многое зависит от «хорошего» фактора (который может быть установлен и изменен для каждого процесса) и «хорошего» фактора всех других процессов, запущенных в данный момент, а также от количества доступных процессоров и скорости «передней» шины, т.е. 'задняя' шина, шина данных и т. д.