пятница, 18 марта 2016 г.

Переполнение буферов в свитчах. Кто виноват и что делать?

Недавно перед уходом домой решил заглянуть в IRC. И к своему удивлению обнаружил обсуждение очень интересной темы: микровсплески и дропы на интерфейсах свитча, которые не загружены и наполовину.

Далеко не каждый сетевик сталкивается и знает про микровсплески (microburst) в сетях. Это явление, когда очень короткий промежуток времени, зачастую измеряемый в милисекундах, порт принимает трафик на linerate или значении близком к нему.



Представим себе ситуацию:
Есть свитч с тремя гигабитными портами: 2 даунлинка и 1 аплинк.  По даунлинкам приходит, скажем, по 100-150 мегабит трафика и уходят в аплинк. Аплинк загружен на 300 мегабит из 1000, казалось бы, всё хорошо - ёмкости хватает ведь. Но вот от пользователей приходят жалобы: рассыпается кубами IPTV.

А дело в том, что иногда один (или) из даунлинков принимает резкий всплеск до 1 гигабита. Таким образом аплинковый порт в это время должен передать 1000+150 мегабит, чего он сделать, естественно, не может. Такие "переполняющие" данные кладутся в tx-буфер свитча который, как правило, очень мал. Естественно, он тут же забивается и отсекает "не влезающий трафик". В цифрах это выражается в очень маленьком количестве дропов: человек в IRC посчитал на своих портах и это было около 0.002%. Однако для трафика, требующего гарантированной доставки, этого достаточно.

Что делать в таком случае? Расширять дропающий канал, покупать свитч с большими буферами (об этом ниже), зарезать скорость тому кто делает микробёрсты - это правильные решения. Но как правило они не подходят по экономическим соображениям. "Неправильное", но вполне рабочее решение: включить QoS и настроить высокий приоритет пакетам, требущим гарантированной доставки: для всего VLAN-а IPTV, телефонии, либо не париться и заприоритезировать весь UDP + TCP SYN, SYN_ACK, ACK.

Вот здесь всё подробно разжевано: https://habrahabr.ru/post/246791/.
В комментариях к этой статье обнаружилась интересная ссылка на таблицу с размерами буферов свитчей - этими цифрами производители очень не любят делиться, поэтому многие значения там это спекуляции, экстраполяции и догадки: http://people.ucsc.edu/~warner/buffer.html.
В этой таблице то, что первым делом бросается в глаза - размеры буферов почти всех свитчей исчисляется десятками мегабайт, при этом некоторые модели имеют гигантские по сравнению с остальными размеры: 9, 12 гигабайт!

Что интересно: GPL-цена на Arista 7280SE модели 48х10GE SFP+, 4x40GE QSFP+ и 9 гигабайт буфера (!) составляет $33000. Если мне не изменяет память, GPL-цена на Extreme x670-G2 примерно такая же. В этой таблице о x670-G2 ничего не сказано, но скорее всего в нём 12.2 мегабайта буфера как и в других свитчах на чипсете Trident II. Не берусь утверждать, но похоже большинство вендоров экономит неплохие деньги, устанавливая в свое оборудование небольшие буферы, этим можно объяснить их нежелание раскрывать информацию о их размерах.

Как посмотреть, есть ли у вас дропы:
На Extreme:
show ports <номера портов> congestion

Juniper:
show interface <имя интерфейса> extensive , секция Output errors, поле Drops

Cisco:
show interface <имя интерфейса>, поле output drops.

Комментариев нет: