Имитация медленного соединения с помощью tc, но что такое burst?

Вопрос или проблема

Используя Ubuntu 24.04.1 и tc, я пытаюсь смоделировать более медленную сотовую сеть с пропускной способностью 256 кбит/с и задержкой 500 мс как для входящего, так и для исходящего трафика. Я рассматривал возможность использования Wondershaper, но задержка не поддерживается. Поэтому я взял этот вопрос, который задавали раньше, за вдохновение: Симуляция медленного соединения с tc

Я немного запутался с “burst”, так как это похоже на обязательный параметр, и я не уверен, что он должен быть в моем случае:

tc qdisk add dev wlp0s20f3 root handle 1: tbf rate 256kbit latency 500ms burst [НЕ ХВАТАЕТ BURST ЗДЕСЬ]

Затем я собираюсь добавить ifb для входящего трафика, чтобы уменьшить входящий, но должен ли я добавить строку выше и также эти строки ниже, или ниже охватывает и входящий, и исходящий?

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev wlp0s20f3 ingress
tc filter add dev wlp0s20f3 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root handle 1: tbf rate 256kbit latency 500ms burst [НЕ ХВАТАЕТ BURST ЗДЕСЬ]

ОБНОВЛЕНИЕ 1:
Я нашел этот пост: https://unix.stackexchange.com/questions/100785/bucket-size-in-tbf

Кажется, я могу рассчитать скорость как:

$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_1000=y

Имеет ли смысл использовать 263 бита (расчет ниже), когда все, что я пытаюсь сделать, это протестировать поведение программного обеспечения на линии 256 кбит/с?

262144 бит/с ÷ 1000 Гц = 263 бита (33 байта)

ОБНОВЛЕНИЕ 2:
Я попробовал следующее, но доступ в интернет, похоже, пропал 🙁

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev wlp0s20f3 ingress
tc filter add dev wlp0s20f3 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root handle 1: tbf rate 256kbit latency 500ms burst 33

Ответ или решение

Чтобы эмулировать медленное соединение, такое как 256 кбит/с с задержкой в 500 мс, на Ubuntu 24.04.1 с использованием утилиты tc, необходимо учесть несколько ключевых моментов, в том числе понятие "burst".

Определение "burst"

Параметр "burst" в контексте tc и алгоритма Token Bucket Filter (TBF) обозначает максимальный объем данных, который может быть передан в пределах одной "токеновой" единицы времени, прежде чем начнутся ограничения на скорость передачи данных. Это позволяет временно "раскрыть" трафик при условии, что сеть может выдерживать определенное количество данных в краткосрочной перспективе, предохраняя при этом среднюю скорость передачи на заданном уровне.

Определение параметров соединения

Для вашего случая, когда у вас максимальная скорость передачи данных 256 кбит/с и желаемая задержка 500 мс, следует учесть следующее:

  1. Расчет Burst (мгновенного объема передачи):
    Исходя из ваших обновлений, вы вычислили размер "burst" как 33 байта (263 бита) при частоте 1000 Гц, что является разумным началом, но не всегда актуальным для всех сценариев.

    Размер "burst" может быть увеличен, чтобы учесть пиковые нагрузки. Например, если вы ожидаете, что соединение будет использовать большие объемы данных в течение короткого времени, то стоит установить "burst" в размер, соответствующий предполагаемым пикам трафика.

  2. Формат команд:
    Создание и настройка фильтра tbf выглядят следующим образом:

    # Модуль IFB для перенаправления входящего трафика
    modprobe ifb
    ip link set dev ifb0 up
    
    # Настройка для исходящего трафика
    tc qdisc add dev wlp0s20f3 root handle 1: tbf rate 256kbit latency 500ms burst 33
    
    # Настройка для входящего трафика
    tc qdisc add dev wlp0s20f3 ingress
    tc filter add dev wlp0s20f3 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
    tc qdisc add dev ifb0 root handle 1: tbf rate 256kbit latency 500ms burst 33

Проверка подключения

Если после выполнения команд доступ в Интернет упал, есть несколько шагов для устранения неполадок:

  1. Проверка конфигурации: Убедитесь, что ваш интерфейс wlp0s20f3 и IFB действительно активны. Для этого выполните:

    ip addr show
  2. Логи системы: Проверьте логи системы на наличие сообщений об ошибках:

    dmesg | grep -i tc
  3. Тестирование соединения: Используйте утилиты, такие как ping или traceroute, для диагностики проблем с соединением:

    ping google.com

Заключение

Эмуляция медленного соединения — полезный инструмент для тестирования and оптимизации приложений, однако, важно правильно задавать параметры, такие как burst, чтобы избежать неожиданных сбоев в доступе к Интернет. В данной конфигурации у вас, скорее всего, возникли проблемы из-за неправильной настройки tc либо параметров сети. Рекомендуется также адаптировать значения burst, основываясь на специфике тестируемых приложений и ожидаемых нагрузках.

Оцените материал
Добавить комментарий

Капча загружается...