Параллельная коммутация

При появлении в конце 80-х начале 90-х годов быстрых протоколов, производительных персональных компьютеров, мультимедийной информации и разделении сети на большое количество сегментов классические мосты перестали справляться с работой. Обслужи вание потоков кадров между теперь уже несколькими портами с помощью одного процессорного блока требовало значительного повышения быстродействия процессора, а это довольно дорогостоящее решение.

Более эффективным оказалось решение, которое и «породило» коммутаторы: для обслуживания потока, поступающего на каждый порт, в устройство ставился отдельный специализированный процессор, который реализовывал алгоритм прозрачного моста. По сути, коммутатор — это мультипроцессорный мост, способный параллельно продвигать кадры сразу между всеми парами своих портов. Но если при добавлении процессорных блоков компьютер не перестали называть компьютером, а добавили только прилагательное «мультипроцессорный», то с мультипроцессорными мостами произошла метаморфоза — во многом по маркетинговым причинам они превратились в коммутаторы. Нужно отметить, что помимо процессоров портов коммутатор имеет центральный процессор, который координирует работу портов, отвечая за построение общей таблицы продвижения, а также поддерживая функции конфигурирования и управления коммутатором.

Со временем коммутаторы вытеснили из локальных сетей классические однопроцессорные мосты. Основная причина этого — существенно более высокая производительность, с которой коммутаторы передают кадры между сегментами сети. Если мосты могли даже замедлять работу сети, то коммутаторы всегда выпускаются с процессорами портов, способными передавать кадры с той максимальной скоростью, на которую рассчитан протокол. Ну а добавление к этому возможности параллельной передачи кадров между портами предопределило судьбу и мостов, и коммутаторов.

Производительность коммутаторов на несколько порядков выше, чем мостов — коммутаторы могут передавать до нескольких десятков, а иногда и сотен миллионов кадров в секунду, в то время как мосты обычно обрабатывали 3-5 тысяч кадров в секунду.

За время своего существования уже без конкурентов-мостов коммутаторы вобрали в себя многие дополнительные функции, родившиеся в результате естественного развития сетевых технологий. К этим функциям относятся, например, поддержка виртуальных сетей (VLAN), агрегирование линий связи, приоритезация трафика и т. п. Развитие технологии производства заказных микросхем также способствовало успеху коммутаторов, в результате процессоры портов сегодня обладают такой вычислительной мощностью, которая позволяет им быстро реализовывать весьма сложные алгоритмы обработки трафика, например выполнять его классификацию и профилирование.

Технология коммутации сегментов Ethernet была предложена небольшой компанией Kalpana в 1990 году в ответ на растущие потребности в повышении пропускной способности связей высокопроизводительных серверов с сегментами рабочих станций. У коммутатора компании Kalpana при свободном в момент приема кадра состоянии выходного порта задержка между получением первого байта кадра и появлением этого же байта на выходе порта адреса назначения составляла всего 40 мкс, что было гораздо ниже задержки кадра при его передаче мостом.

Структурная схема коммутатора EtherSwitch, предложенного фирмой Kalpana, представлена на рис. 1.

Рис. 1 Структура коммутатора EtherSwitch компании Kolpana

Каждый из 8 портов 10Base-T обслуживается одним процессором пакетов Ethernet (Ethernet Packet Processor, EPP). Кроме того, коммутатор имеет системный модуль, который координирует работу всех процессоров ЕРР, в частности ведет общую адресную таблицу коммутатора. Для передачи кадров между портами используется коммутационная матрица. Она функционирует по принципу коммутации каналов, соединяя порты коммутатора. Для 8 портов матрица может одновременно обеспечить 8 внутренних каналов при полудуплексном режиме работы портов и 16 — при дуплексном, когда передатчик и приемник каждого порта работают независимо друг от друга.

При поступлении кадра в какой-либо порт соответствующий процессор ЕРР буферизует несколько первых байтов кадра, чтобы прочитать адрес назначения. После получения адреса назначения процессор сразу же приступает к обработке кадра, не дожидаясь прихода остальных его байтов.

1. Процессор ЕРР просматривает свой кэш адресной таблицы, и если не находит там нужного адреса, обращается к системному модулю, который работает в многозадачном режиме, параллельно обслуживая запросы всех процессоров ЕРР. Системный модуль производит просмотр общей адресной таблицы и возвращает процессору найденную строку, которую тот буферизует в своем кэше для последующего использования.

2. Если адрес назначенля найден в адресной таблице и кадр нужно отфильтровать, процессор просто прекращает записывать в буфер байты кадра, очищает буфер и ждет поступления нового кадра.

3. Если же адрес найден и кадр нужно передать на другой порт, процессор, продолжая прием кадра в буфер, обращается к коммутационной матрице, пытаясь установить в ней путь, связывающий его порт с портом, через который идет маршрут к адресу назначения. Коммутационная матрица способна помочь только в том случае, если порт адреса назначения в этот момент свободен, то есть не соединен с другим портом данного коммутатора.

4. Если же порт занят, то, как и в любом устройстве с коммутацией каналов, матрица в соединении отказывает. В этом случае кадр полностью буферизуется процессором входного порта, после чего процессор ожидает освобождения выходного порта и образования коммутационной матрицей нужного пути.

5. После того как нужный путь установлен, в него направляются буферизованные байты кадра, которые принимаются процессором выходного порта. Как только процессор выходного порта получает доступ к подключенному к нему сегменту Ethernet по алгоритму CSMA/CD1, байты кадра сразу же начинают передаваться в сеть. Процессор входного порта постоянно хранит несколько байтов принимаемого кадра в своем буфере, что позволяет ему независимо и асинхронно принимать и передавать байты кадра (рис. 2).

Рис 2. Передача кадра через коммутационную матрицу

Описанный пособ передачи кадра без его полной буферизации получил название коммутации «на лету» (on-the-fly), или «напролет» (cut-through). Этот способ представляет собой, по сути, конвейерную обработку кадра, когда частично совмещаются во времени несколько этапов его передачи.

1. Прием первых байтов кадра процессором входного порта, включая прием байтов адреса назначения.

2. Поиск адреса назначения в адресной таблице коммутатора (в кэше процессора или в общей таблице системного модуля).

3. Коммутация матрицы.

4. Прием остальных байтов кадра процессором входного порта.

5. Прием байтов кадра (включая первые) процессором выходного порта через коммутационную матрицу.

6. Получение доступа к среде процессором выходного порта.

7. Передача байтов кадра процессором выходного порта в сеть.

На рис. 3 подставлены два режима обработки кадра: режим коммутации «на лету» с частичным совмещением во времени нескольких этапов и режим полной буферизации кадра с последовательным выполнением всех этапов. (Заметим, что этапы 2 и 3 совместить во времени нельзя, так как без знания номера выходного порта операция коммутации матрицы не имеет смысла.)

Рис. 3. Экономия времени при конвейерной обработке кадра: a — конвейерная обработка,
б — обычная обработка с полной буферизацией

Как показывает схема, экономия от конвейеризации получается ощутимой. Однако главной причиной повышения производительности сети при использовании коммутатора является параллельная обработка нескольких кадров.

Этот эффект иллюстрирует рис. 4, на котором показана идеальная в отношении производительности ситуация, когда четыре порта из восьми передают данные с максимальной для протокола Ethernet скоростью в 10 Мбит/с. Причем они передают эти данные на остальные четыре порта коммутатора не конфликтуя: потоки данных между узлами сети распределились так, что для каждого принимающего кадры порта есть свой выходной порт.

Если коммутатор успевает обрабатывать входной трафик при максимальной интенсивности поступления кадров на входные порты, то общая производительность коммутатора в приведенном примере составит 4 х 10 = 40 Мбит/с, а при обобщении примера для Депортов — (N/2) х 10 Мбит/с. В таком случае говорят, что коммутатор предоставляет каждой станции или сегменту, подключенному к его портам, выделенную пропускную способность протокола.

Рис. 4. Параллельная передача кадров коммутатором

Естественно, что в сети не всегда складывается описанная ситуация. Если двум станциям, например станциям, подключенным к портам 3 и 4, одновременно нужно записывать данные на один и тот же сервер, подключенный к порту 8, то коммутатор не сможет выделить каждой станции по 10 Мбит/с, так как порт 8 не в состоянии передавать данные со скоростью 20 Мбит/с. Кадры станций будут ожидать во внутренних очередях входных портов 3 и 4, когда освободится порт 8 для передачи очередного кадра. Очевидно, хорошим решением для такого распределения потоков данных было бы подключение сервера к более высокоскоростному порту, например Fast Ethernet или Gigabit Ethernet.