Поиск по этому блогу

01.08.2016

Настройка QoS на коммутаторе Eltex MES 2124P

Speed mismatch для коммутаторов - это серьезная потенциальная проблема, которая может привести к потерям при передаче данных. Если денег нет, то лучше лишний раз протестировать "коммутатор, который дешевле на xxx%", особенно когда:
  • закладывается решение с аплинком 1гбит/с и портами доступа 100мбит/с или с аплинком 10гбит/с и портами доступа 1гбит/с;
  • предполагается включать в гигабитный коммутатор доступа ip-телефоны со 100мбит/с интерфейсом;
  • включили сервера по 10ге. Замечательно. Готовьтесь купить дорогостоящие коммутаторы ядра/агрегации с 10ге, чтобы все возможные микробёрсты буферизировать до коммутаторов доступа без потерь.
Одним из способов экономии при построении ЛВС будет выбор таких решений, где скорость всех интерфейсов одинакова, а сеть минимально нагружена.

Настройка QoS на коммутаторе Eltex


Коммутаторы 1124 и 2124 имеют по 4 очереди. 3124 - 8 очередей. Настройки всех моделей одинаковы, но ориентироваться лучше на крайние версии прошивок, так как qos tail-drop появился относительно недавно.
Включается qos одной командой.
mes2124p(config)#qos
Проверка работы qos с настройками по умолчанию.
mes2124p#sh qos
Qos: Basic mode
Basic trust: cos

mes2124p#sh qos interface gi1/0/1
Ethernet gi1/0/1
Default CoS: 0
Trust mode: enable
Вот, к слову, eltex mes - одни из немногих недорогих коммутаторов, которые позволяют смотреть и собирать по snmp статистику по очередям. Хотя можно мониторить всего два параметра, но это уже достижение, поверьте, если сравнивать с глючным DCN (qtech,snr). Сейчас коммутатор стоит на столе, к нему подключено мое рабочее место через ip-телефон. Настрою статистику для этого порта. 1ый счетчик - это приоритетная очередь, куда попадет телефония. 2 - первая очередь, куда попадет весь остальной трафик.
qos statistics queues 1 4 all gigabitethernet1/0/1
qos statistics queues 2 1 all gigabitethernet1/0/1
Цитата из документации по snmp-мониторингу коммутаторов Eltex MES:
1.3.6.1.4.1.89.88.35.4.1.10.1 для 1 счетчика
1.3.6.1.4.1.89.88.35.4.1.10.2 для 2 счетчика
snmpwalk -v2c -c <community> <IP address> 1.3.6.1.4.1.89.88.35.4.1.10.{номер tail drop счетчика}
Т.е. если настроить счетчик очереди для всех интерфейсов, то можно опросить всего один oid и получить информацию о дропах в приоритетной очереди на всех портах. Правда, придется искать потом на каком порту конкретно, но это мелочи ;) Просмотр статистики не показывает попадания в приоритетную очередь, так как на телефонах настроена маркировка Diffserv.
mes2124p#sh qos statistics
[пропущено]
Output Queues
-------------

Interface Queue Dp Total packets TD packets
------------- ------------ ----- --------------- -------------
gi1/0/1 4 All 1 0
gi1/0/1 1 All 6424 0
Включаю trust dscp одной командой. На портах прописывать не нужно.
mes2124p(config)#qos trust dscp

mes2124p#sh qos
Qos: Basic mode
Basic trust: dscp
Теперь все корректно, голосовой трафик попадает в свою очередь. Потерь в первой очереди нет, но это еще из-за совпадения скоростей на порту доступа и аплинке.
mes2124p#sh qos statistics
[пропущено]
Output Queues
-------------

Interface Queue Dp Total packets TD packets
------------- ------------ ----- --------------- -------------
gi1/0/1 4 All 1445 0
gi1/0/1 1 All 10909 0
В свое время обратил внимание при мониторинге очередей QoS на то, что есть потери только на тех коммутаторах Eltex MES 3124, где скорости на портах отличаются. Например, 10ге-1ге и 1ге-100мбит/с. А на  коммутаторах агрегации с только гигабитными подключениями потерь не было вообще. Проблема была частично решена обновлением прошивки и настройкой очередей.

Проверка буферов и настроек очередей


Для тестирования коммутатора необходимо порт доступа включить на скорость существенно меньшую, чем аплинк. Есть два способа изменения скоростей подключения на всех коммутаторах и оба приведены в примере ниже. Принципиальное отличие в том, что первая команда выставить фиксированную скорость подключения, но отключит автосогласование. Отключенное автосогласование на скоростях 10 и 100мбит/с приведет к тому, что на удаленной стороне включится half-duplex. Поэтому корректно это делать используя команду "negotiation". Если рассматривать циску, то там это делается одной командой, но добавляется параметр auto, т.е. "speed auto 10 100".
mes2124p(config)#int gi1/0/1
mes2124p(config-if)#speed
10 Force operation at 10 Mbps.
100 Force operation at 100 Mbps.
1000 Force operation at 1000 Mbps.
mes2124p(config-if)#negotiation
10h Advertise 10 Half-Duplex.
10f Advertise 10 Full-Duplex.
100h Advertise 100 Half-Duplex.
100f Advertise 100 Full-Duplex.
1000f Advertise 1000 Full-Duplex.

mes2124p(config-if)#negotiation 10f
mes2124p(config-if)#04-Jun-2016 13:02:53 %LINK-W-Down: gi1/0/1
04-Jun-2016 13:02:55 %LINK-I-Up: gi1/0/1, 10Mbps FULL duplex
Теперь необходимо очистить счетчики, позвонить, качнуть чего-нибудь. В выводе ниже появились потери в 1 очереди, 10мбит/с интерфейс загружен практически максимально.
mes2124p#clear qos statistics
mes2124p#sh qos statistics
[пропущено]
Output Queues
-------------

Interface Queue Dp Total packets TD packets
------------- ------------ ----- --------------- -------------
gi1/0/1 4 All 566 0
gi1/0/1 1 All 20893 51

mes2124p#sh int gi1/0/1
gigabitethernet 1/0/1 is up (connected)
Interface index is 49
Hardware is gigabitethernet, MAC address is a8:f9:4b:a6:4a:c1
Description: Users_and_IpPhones_with_LLDP-MED
Interface MTU is 1500
Full-duplex, 10Mbps, link type is auto, media type is 1G-Copper
Link is up for 0 days, 0 hours, 2 minutes and 54 seconds
Advertised link modes: 10baseT/Full
Flow control is off, MDIX mode is on
15 second input rate is 283 Kbit/s
15 second output rate is 9849 Kbit/s
[пропущено]
Что еще можно поделать? В документации в разделе настройки qos сообщается:
По умолчанию, все очереди обрабатываются по алгоритму «strict priority».
Я этого понять не смог, простите. Настрою strict priority только для голоса. Выглядит это в конфигурации как указание количества таких очередей. Поначалу путался, но потом подумал, что если рассматривать не только 2124, где всего 4 очереди, а еще и 3124, где их 8 штук, то настройка в таком виде имеет смысл.
mes2124p(config)#priority-queue out num-of-queues
<0-4> Assign the number of queues to be expedite queues. The
expedite queues would be the queues with higher indexes
0 all queues are assured forwarding (WRR)
4 all queues are expedite
mes2124p(config)#priority-queue out num-of-queues 1
mes2124p(config)#
Теперь надо настроить буферы очередей, чтобы таких дропов, как в примере выше, избежать по возможности. Ниже состояние буферов и очереди интерфейса по умолчанию. Меня не покидает ощущение недопонимания процесса оптимальной настройки, но делать надо, учиться тоже надо, даже на ошибках (лучше на стенде).
mes2124p#sh qos tail-drop
Physical buffers enqueued: 87 (limit 4032)
Total descriptors enqueued: 0 (limit 3854)
Total buffers enqueued: 0 (limit 262143)
MC descriptors enqueued: 0 (limit 896)
Shared descriptors enqueued: 0 (limit 1056)
Shared buffers enqueued: 0 (limit 1056)

mes2124p#sh qos tail-drop interface gi1/0/1
Port: gi1/0/1 is bound to default tail-drop profile
Port descriptors enqueued: 0 (limit 44)
Port buffers enqueued: 0 (limit 264)
Queue 1 descriptors enqueued: 0 (limit 12)
buffers enqueued: 0
Queue 2 descriptors enqueued: 0 (limit 12)
buffers enqueued: 0
Queue 3 descriptors enqueued: 0 (limit 12)
buffers enqueued: 0
Queue 4 descriptors enqueued: 0 (limit 12)
buffers enqueued: 0
По аналогии с цисковким queue-set тут есть tail-drop profile, но если у циски всего 2 профиля, то тут можно сделать 4.
mes2124p(config)#qos tail-drop profile 1
mes2124p(config-tdprofile)#queue 1 limit
<0-400> Queue limit in packets. Minimal recommended value is
64 in case when WRTD is enabled. Check user manual for
details.
mes2124p(config-tdprofile)#queue 1 limit 400
mes2124p(config-tdprofile)#queue 2 limit 150
mes2124p(config-tdprofile)#queue 3 limit 150
mes2124p(config-tdprofile)#queue 4 limit 150
Профиль необходимо применить к интерфейсу.
mes2124p(config)#int gi1/0/1
mes2124p(config-if)#qos tail-drop profile 1
mes2124p(config-if)#exit
mes2124p(config)#
mes2124p#sh qos tail-drop interface gi1/0/1
Port: gi1/0/1 is bound to tail-drop profile 1
Port descriptors enqueued: 0 (limit 44)
Port buffers enqueued: 0 (limit 264)
Queue 1 descriptors enqueued: 0 (limit 400)
buffers enqueued: 0
Queue 2 descriptors enqueued: 0 (limit 150)
buffers enqueued: 0
Queue 3 descriptors enqueued: 0 (limit 150)
buffers enqueued: 0
Queue 4 descriptors enqueued: 0 (limit 150)
buffers enqueued: 0
Может я и  переборщил. Надеюсь, кто-нибудь меня поправит. Очередной тест показывает отсутствие потерь в очередях.
mes2124p#sh qos statistics
[пропущено]
Output Queues
-------------

Interface Queue Dp Total packets TD packets
------------- ------------ ----- --------------- -------------
gi1/0/1 4 All 0 0
gi1/0/1 1 All 115571 0

mes2124p#sh qos tail-drop
Physical buffers enqueued: 764 (limit 4032)
Total descriptors enqueued: 111 (limit 3854)
Total buffers enqueued: 665 (limit 262143)
MC descriptors enqueued: 0 (limit 896)
Shared descriptors enqueued: 0 (limit 1056)
Shared buffers enqueued: 0 (limit 1056)
Если вам интересны еще специфические вещи про работу коммутаторов, то советую почитать про коллизию хешей.