Визуализация DROP профилей трафика на Juniper MX
08 May 2020 - overchenkoag
Share on:Наиболее наглядным отображением влияния механизмов CoS на трафик разных классов и разметок является пропуск нескольких потоков трафика через интерфейсы ограниченной пропускной способности и построение графиков нагрузки от времени. График динамического процесса может дать больше понимания, чем страница текста, описывающего этот процесс.
Drop профили
В теме CoS есть один вопрос, который сложнее поддаётся визуализации – drop-профили 1. Задача drop-профилей не допустить переполнения буфера очереди, отбрасывая пакеты с вероятностью, зависящей от наполненности этого буфера. Долгое хранение пакетов в полностью наполненном буфере очереди может быть нежелательным для real-time трафика, а переполнение буфера приводит к tail-drop, что вызывает синхронизацию TCP-сессий трафика и пилообразную нагрузку интерфейсов.
Drop-профили могут быть сегментные и интерполированные 2. Сегментные задают «лесенку» и вероятность отбрасывания пакетов меняется скачкообразно.
drop-profiles {
segmented {
fill-level 25 drop-probability 25;
fill-level 50 drop-probability 50;
fill-level 75 drop-probability 75;
fill-level 95 drop-probability 100;
}
}
Сегментный Drop-профиль:
Интерполированные создают 64 точки между значениями (0,0) и (100, 100), включая настроенные точки.
drop-profiles {
drop-inter-5-75 {
interpolate {
fill-level [ 25 95 ];
drop-probability [ 5 75 ];
}
}
}
Интерполированный Drop-профиль:
Лабораторные опыты
Картинка «в представлении художника» - это одно, а реальные замеры – совсем другое. Непосредственное влияние drop-профиля на трафик можно увидеть на графике первого опыта.
Опыт 1
Представляет собой импульсы высотой примерно 10 Мбит/сек и длительностью 1 секунда. Интервал между импульсами 1 секунда. Красная линия это трафик с выхода генератора, черная линия – трафик после прохождения маршрутизатора. Первый импульс обрабатывался следующей конфигурацией.
set schedulers sch-be transmit-rate remainder
set schedulers sch-bc transmit-rate percent 20
set schedulers sch-bc transmit-rate rate-limit
set schedulers sch-bc buffer-size percent 50
Виден «хвост» трафика на протяжении порядка 600мс. В момент прохождения хвоста генератор уже не шлёт трафик и мы видим пакеты, хранившиеся в буфере.
Второй импульс обрабатывается конфигурацией с агрессивным drop-профилем, отбрасывающим пакеты при не полностью заполненном буфере. «Хвост» трафика значительно укорачивается.
set drop-profiles aggessive fill-level 30 drop-probability 90
set schedulers sch-bc drop-profile-map loss-priority any protocol any drop-profile aggressive
Влияние drop-профиля на трафик очевидно, но сам вид drop-профиля при этом скрыт от нас. Все пакеты первого опыта одинаковы и безымянны, мы видим только их объём и время прибытия на приёмник. Определить вероятность отбрасывания конкретного отправленного пакета от наполненности буфера таким образом нельзя.
Опыт 2
Представляет собой импульс высотой 80 Мбит/сек (скорость по IP вместе с заголовком) и длительностью 3 секунды. Каждую миллисекунду импульс передаёт 100 IP-пакетов размером 100 байт. Каждый пакет в поле данных несёт информацию о времени отправки. Скорость в планировщике меньше скорости для рабочего трафика, что будет приводить к постепенному заполнению буфера и применению разных ступеней drop-профиля.
sch-be {
transmit-rate {
60m;
exact;
}
buffer-size percent 40;
drop-profile-map loss-priority any protocol any drop-profile drop-10-20-30;
}
После прохождения маршрутизатора трафик собирается, дамп конвертируется в txt формат и анализируется. Информация об интервале отправки извлекается из пакетов, интервалы отправки группируются по 10 мс.
Применяем сегментный drop-профиль следующего содержания.
drop-10-20-30 {
fill-level 20 drop-probability 10;
fill-level 40 drop-probability 20;
fill-level 80 drop-probability 30;
}
По оси абсцисс время в миллисекундах, по оси ординат – вероятность потери пакета, посланного в данный интервал.
Следует учесть, что нам нельзя получить реальную наполненность буфера в момент прихода на маршрутизатор конкретных пакетов для построения полноценного графика drop-профиля. Остаётся только опираться на тот факт, что наполненность буфера будет расти, если входящий трафик превышает ограничение отправки. При включении очередной ступени drop-профиля приходящие пакеты начнут отбрасываться и скорость наполнения буфера снизится, что должно вызывать «растягивание» графика по оси абсцисс. При 100% наполненности буфера вероятность отбрасывания пакетов не может превышать отношение скоростей приходящего трафика и настроенной скорости отправки пакетов.
Точности графика мешает неравномерность отправки трафика программой tcpreplay в начальный период времени (Python + scapy даёт ещё большую неравномерность).
График отправки пакетов командой tcpreplay -i ens256 -p 100000 --preload-pcap dump_80mbit_3sec_1ms_interval.pcapng
Опыт 3
Повторяет второй опыт. Применяем интерполированный drop-профиль.
drop-inter-10-20-30 {
interpolate {
fill-level [ 20 40 80 ];
drop-probability [ 10 20 30 ];
}
}
Первая три точки интерполированного профиля (0-0, 20-10, 40-20) составляют прямую линию, но на графике вероятности отбрасывания пакетов мы видим ожидаемое «растягивание» графика по оси абсцисс. Пакеты начинают отбрасываться практически сразу, т.к. при 2% наполнении буфера такой drop-профиль должен отбрасывать 1% пакетов.
Опыт 4
drop-inter-1-20-30 {
interpolate {
fill-level [ 20 40 80 ];
drop-probability [ 1 20 30 ];
}
}
Опыт 5
Попробуем сделать пологий график.
drop-inter-1-5-10-30 {
interpolate {
fill-level [ 20 40 60 80 ];
drop-probability [ 1 5 10 30 ];
}
}
Ссылки
1. RED Drop Profiles Overview
↩
2. Configuring RED Drop Profiles
↩