Я впервые экспериментирую с tc. Я пытаюсь ограничить скорость загрузки, которая проходит через виртуальную машину, которая действует как шлюз. Виртуальная машина имеет два интерфейса Ethernet. Трафик, исходящий от пользователей, входит в eth0 и выходит через eth1, чтобы попасть в Интернет. Эти два интерфейса соединены мостом. Настройка работает нормально, и без использования tc для наложения каких-либо ограничений я могу достичь ~ 10-11 МБ / с загрузки / выгрузки.
Чтобы ограничить трафик загрузки, я применяю tbf qdisc на eth0. Например, когда я хочу ограничить скорость загрузки, я использую следующее:
tc qdisc add dev eth0 handle 10: root tbf rate $R burst 15k latency 25ms
Это нормально работает для ограничения скорости до 2 МБ / с, однако при установке более высокого ограничения скорости я начинаю видеть колебания. Я экспериментировал с разными значениями задержки и пакета и заметил, что если для более высоких скоростей я увеличиваю пакет до 40 КБ и задержку до 50 мс, в некоторых случаях я получаю меньше колебаний, но это не всегда так.
В целом замечаю следующее:
watch tc -p -s -d qdisc show dev eth0
что отставание увеличивается, и когда происходит падение скорости, отставание уменьшается. В случае 1 МБ / с отставание увеличивается до 30-40p, а затем, когда он падает, скорость загрузки мгновенно меняется.Я проверяю, работает ли настройка, используя машину, трафик которой проходит через эту виртуальную машину шлюза, и выполняю следующие действия:
Я пытался прочитать много материалов по tc и tbf, я также пробовал использовать htb и cbq, но эти qdiscs дают более нестабильную скорость загрузки в моем случае. В моих тестах до сих пор только tbf был наиболее стабильным, но проблемы начинают проявляться с большой скоростью.
Поэтому я хотел бы спросить:
Я знаю, что это много информации, я постарался дать как можно более подробную информацию, чтобы лучше объяснить мою ситуацию. Я был бы чрезвычайно признателен за любые подсказки о том, как добиться стабильной скорости загрузки с помощью tbf. Заранее спасибо.
Нет никаких "общих" ожиданий с tc, это зависит от qdisc, который вы используете. О TBF вы можете прочитать в разделе «Путешествие по центру ядра» о некоторых ограничениях tbf (весь трафик проходит через одну очередь).
На lartc вы можете прочитать, что вам нужно увеличить размер ведра tbf в соответствии с вашей пропускной способностью.
Бэклог - это в основном длина очереди, вы можете прочитать больше информации Вот например.
Ваша пропускная способность падает во время опустошения невыполненной работы (чего не должно происходить). этот история, где сборка мусора в очереди TCP влияла на задержку. Вы можете попытаться понять, что с вами происходит.
Точка 90% может быть связана с указанными вами накладными расходами и соотношением вашего протокола: если вы формируете загрузку со скоростью 1 МБ / с и получаете 10 пакетов для каждого отправляемого пакета, вы формируете свою загрузку со скоростью 10 МБ / с.
Хотя я мало что знаю о tbf, я не могу вам помочь с настройкой. Удачи !