Не все стеки одинаково полезны, или стеки StackWise
Введение
Некоторые модели коммутаторов компании Cisco могут быть объединены в стек с использованием специализированных стековых кабелей. Обычно это устройства, занимающие один-два юнита в стойке; часто с неизменяемой конфигурацией. Конечно же, модульные шасси тоже имеют механизмы для объединения нескольких физических устройств, но в данной статье мы не будем касаться этих механизмов, а сфокусируем своё внимание исключительно на физическом стекировании.
На момент написания статьи нам было известно четыре разных версии стека: FlexStack, StackWise, StackWise Plus и StackWise-480. В стек по технологии FlexStack могут быть объединены коммутаторы Cisco Catalyst 2960S. Пропускная способность стека FlexStack составляет 20 Гбит/с в режиме дуплекса, то есть по 10 Гбит/с в каждую сторону. Технология StackWise поддерживается, например, коммутаторами серий Catalyst 3750. Пропускная способность стека StackWise составляет 32 Гбит/с в дуплексе, то есть 16 Гбит/с в каждую сторону. Коммутаторы серий Cisco Catalyst 3750-E и 3750-X поддерживают уже стек версии StackWise Plus, отличающийся от StackWise увеличенной до 64/32 Гбит/с полосой пропускания, а также рядом новых возможностей. Стоит также отметить, что линейка коммутаторов Catalyst 3750-X поддерживает также технологию StackPower, позволяющую обеспечивать отказоустойчивость устройств в стеке для случая отказа блока питания какого-либо коммутатора. Коммутаторы Cisco Catalyst 3850 обладают поддержкой стека StackWise-480, имеющим пропускную способность 480 Гбит/с.
Объединение коммутаторов в стек предоставляет администратору целый ряд преимуществ: единые подсистемы управления и коммутации, улучшенная отказоустойчивость и высокая доступность. Так, например, можно управлять всем стеком как единым устройством с помощью единственной сессий telnet/SSH. Фреймы и пакеты передаются между коммутаторами через стековые порты, что освобождает обычные интерфейсы 10/100 Мбит/с и 1/10 Гбит/с. Внутри стека доступны функции EtherChannel в случае, когда физические каналы подключаются в разные коммутаторы (нечто похожее (vPC – virtual PortChannel) есть и в L3-коммутаторах Cisco Nexus, но это устройства совсем другого класса).
Одним из отличий между технологиями StackWise и StackWise Plus является поддержка последней локальной коммутации. Суть локальной коммутации заключается в том, что если отправитель и получатель подключены к портам одного коммутатора, то фрейм пересылается напрямую, то есть данные в стек не передаются. При отсутствии локальной коммутации, то есть при использовании StackWise, любые данные пересылаются через стек. Из стека фрейм удаляется коммутатором отправителя. Таким образом, если отправитель и получатель подключены к одному устройству, то данные передаются через стековое кольцо, возвращаются на тот же коммутатор и уже затем пересылаются через нужный порт. Получается, что если отправитель и получатель подключены даже в соседние порты одного и того же коммутатора, данные всё равно пройдут через стек. Естественно, такое «путешествие» кадров вносит дополнительную задержку. Технология StackWise Plus лишена такого недостатка, так как в ней не происходит отправки лишних данных в стек (Local Switching), а данные из стека удаляются коммутатором получателя (Destination Stripping). Наверняка, дополнительно вносимая стеком задержка невелика, однако в ситуациях, где решающую роль играет каждая микросекунда, даже такое незначительно изменение может быть заметно. В данной статье мы решили установить, какое количественное влияние оказывает стек, собранный по технологии StackWise, на передаваемый трафик.
Тестирование
В нашем распоряжении было два коммутатора Cisco Catalyst 3750G: C3750G-12S-S и C3750G-24TS-S1U, поддерживающих StackWise. Тестирование мы проводили совместно с нашими друзьями из проекта Anticisco с помощью IXIA XM2. Во время тестирования мы использовали пять различных сценариев подключения, перечисленных ниже.
- Без использования стека отправитель и получатель подключались в первый и двадцать четвёртый порты.
- Без использования стека отправитель и получатель подключались в первый и второй порты.
- При наличии стека отправитель и получатель подключались в первый и двадцать четвёртый порты одного коммутатора.
- При наличии стека отправитель и получатель подключались к первым портам разных коммутаторов.
- При наличии стека отправитель и получатель подключались к первому и второму порту одного коммутатора.
Для каждого из сценариев мы проводили измерения минимальной, средней и максимальных задержек при передаче кадров по 100, 400, 1400 и 1518 байт. Фреймы каждого из размеров передавались при загрузке интерфейсов коммутатора на 10, 55, 77,5 88,75 и 100 процентов. На графиках ниже представлены только средние значения задержек.
Анализируя каждый представленный график, можно сказать, что задержка коммутации прямо зависит от текущей загрузки интерфейса, а также размера передаваемого кадра. Вполне предсказуемый результат!
Теперь мы решили исключить для наглядности значения задержки, получаемые при стопроцентной загрузке интерфейсов, и отобразить на одном графике задержки для каждого из сценариев. Такие графики мы решили построить для каждого из использованных в тестах размеров кадров.
Как мы видим, сценарии подключения пользователей распределились следующим образом (задержка увеличивается от наименьшей к наибольшей): 1, 2, 4, 3, 5. Нам бы хотелось привести здесь некоторые наши соображения, связанные с полученными в тестах результатами.
Судя по полученным значениям задержек, коммутация между портами из разных порт-групп происходит быстрее, данное явление не связано со стеком, но с прочими особенностями внутренней архитектуры коммутаторов Cisco Catalyst. Указанная зависимость наблюдается как на включенном в стек коммутаторе, так и на отдельном. Ещё одно наблюдение связано с задержкой на коммутацию больших фреймов. Задержка на сериализацию кадра длиной, например, 1400 байт будет составлять более 10 мкс, тогда как задержка на коммутацию меньше этой величины (примерно 7,8 мкс), отсюда следует, что в коммутаторах Cisco Catalyst 3750G используется один из двух методов коммутации: Cut Through или Fragment Free, но никак не Store and Forward.
Включение коммутатора в стек увеличивает значение задержки при передаче данных между теми же самыми портами. Данное явление связано с необходимостью пересылки данных через стековое кольцо в технологии StackWise. Грубо оценить значение дополнительно вносимой стеком задержки можно в полторы микросекунды. Данная оценка получается из сравнения графиков для следующих пар сценариев: 1 и 3, 2 и 5.
Дополнительная задержка на прохождение стека между портами разных коммутаторов приблизительно составляет половину вносимой стеком задержки при коммутации между портами одного устройства. Данное явление легко объяснить тем, что при подключении абонентов к разным коммутаторам стека фрейм проходит лишь половину стекового кольца до того момента, как он попадёт на коммутатор получателя. Здесь есть тонкий момент: после того, как фрейм по стеку доставлен на коммутатор получателя, он не прекращает своё движение по стековому кольцу, которое в нашем случае займёт у него ещё приблизительно 0.75 мкс, но он уже может обрабатываться коммутационной матрицей устройства, к которому подключен получатель, то есть дальнейшее движение фрейма по стеку уже не оказывает никакого влияния на суммарную задержку. Из стека данный фрейм удалит отправивший его коммутатор.
На этом мы завершаем измерение и обсуждение вносимых стеком Cisco StackWise задержек и переходим к подведению итогов. Для желающих провести собственный анализ полученных данных мы предлагаем скачать с нашего сайта архив с результатами измерений.
Заключение
Подключение коммутатора Cisco Catalyst в стек StackWise увеличивает задержки коммутации для абонентов, подключенных к этому коммутатору. Такое поведение устройств обусловлено логикой работы стека: фрейм прогоняется по нему вне зависимости от того, где друг относительно друга расположены отправитель и получатель.
Технология StackWise Plus обратно совместима со StackWise, то есть коммутаторы Cisco Catalyst серий 3750-X и 3750-E могут быть добавлены в один стек с обычными коммутаторами серии 3750, однако сам стек при этом будет собран по технологии StackWise. Единственное, на что стоит обратить внимание, так это на поддержку локальной коммутации моделями серий 3750-X и 3750-E, то есть эти коммутаторы не будут отправлять в стек фреймы, отправитель и получатель которых подключены к этому устройству, что должно снизить задержку коммутации.
Для уменьшения задержки коммутации при использовании моделей 2960-S и 3750 мы рекомендуем подключать отправителя и получателя в порты разных порт-групп коммутатора, не подключенного в стек. Если такой возможности нет, то тогда следует задействовать порты одной порт-группы, но также в коммутаторе без стека. Здесь мы руководствуемся лишь желанием уменьшения задержки коммутации и не принимаем во внимание никакие другие аспекты функционирования (например, отказоустойчивость) коммутаторов и стеков.
Если же без стека обойтись не удаётся, то тогда стоит продумать подключение таким образом, чтобы фрейм от отправителя до получателя проходил по наиболее короткому пути в стеке. В случае, когда важно значение RTT, то подключать отправителя и получателя необходимо к разным коммутаторам в стеке. Уменьшение количества коммутаторов в стеке также приведёт к снижению задержки как при подключении отправителя и получателя к одному устройству, так и к разным.
Напоследок хотелось бы обратить внимание читателя на зависимость задержки коммутации от загрузки сетевых интерфейсов. Не стоит подключать абонентов, требующих минимизации задержки, в высоконагруженные стеки. При расчёте нагрузки следует обращать внимание не только на загрузку интерфейсов, через которые передаётся пользовательский трафик, но и на суммарную загрузку стека, так как в технологии StackWise все фреймы передаются через стек. Выяснить версию стека можно с помощью команды show switch stack-ring speed, а текущая загрузка интерфейсов и стекового кольца представлена в выводе команды show controllers utilization.
test-3750#show switch stack-ring speed
Stack Ring Speed : 32G
Stack Ring Configuration: Full
Stack Ring Protocol : StackWise
test-3750#show controllers utilization
Port Receive Utilization Transmit Utilization
Gi1/0/1 0 0
Gi1/0/2 0 0
Gi1/0/3 0 0
Gi1/0/4 0 0
Gi1/0/5 0 0
Gi1/0/6 0 0
Gi1/0/7 0 0
Gi1/0/8 0 0
Gi1/0/9 0 0
Gi1/0/10 0 0
Gi1/0/11 0 0
Gi1/0/12 0 0
Gi1/0/13 0 0
Gi1/0/14 0 0
Gi1/0/15 0 0
Gi1/0/16 0 0
Gi1/0/17 0 0
Gi1/0/18 0 0
Gi1/0/19 1 0
Gi1/0/20 0 0
Gi1/0/21 0 0
Gi1/0/22 0 0
Gi1/0/23 0 0
Gi1/0/24 0 0
Gi2/0/1 0 0
Gi2/0/2 0 0
Gi2/0/3 0 0
Gi2/0/4 0 0
Gi2/0/5 0 0
Gi2/0/6 0 0
Gi2/0/7 0 0
Gi2/0/8 0 0
Gi2/0/9 0 0
Gi2/0/10 0 0
Gi2/0/11 0 0
Gi2/0/12 0 0
Gi2/0/13 0 0
Gi2/0/14 0 0
Gi2/0/15 0 0
Gi2/0/16 0 0
Gi2/0/17 0 0
Gi2/0/18 0 0
Gi2/0/19 0 0
Gi2/0/20 0 0
Gi2/0/21 0 0
Gi2/0/22 0 0
Gi2/0/23 0 0
Gi2/0/24 0 0
Total Ports : 48
Switch Receive Bandwidth Percentage Utilization : 0
Switch Transmit Bandwidth Percentage Utilization : 0
Stack Ring Percentage Utilization : 0
Удачи в построении и использовании стеков!