Как процессор может обрабатывать 10 гигабит в секунду или более скорость передачи данных?

11

Я не знаю, если это правильное место, чтобы спросить. Это может быть очень глупый вопрос. Я предполагаю, что некоторый процессор должен обрабатывать кадры данных для переключения / маршрутизации. Современные процессоры имеют частоту несколько ГГц. Как они обрабатывают данные, поступающие с большей скоростью, чем они работают?

Ибрагим Муса
источник

Ответы:

16

Вы абсолютно правы, если мы будем использовать цикл команд на бит, то 10 Гбит / с будет недостижимым. Итак, первое, что нужно отметить, - это то, что мы обрабатываем слово на инструкцию CPU - 64 бита.

Даже в этом случае худшее, что мы можем сделать для производительности, - это иметь доступ к процессору ко всем словам пакета. Таким образом, основное внимание уделяется обработке пакетов с нулевым копированием. Часть этой хитрости заключается в самих интерфейсах: у них есть DMA («Прямой доступ к памяти»), так что чип контроллера Ethernet копирует данные в ОЗУ; они вычисляют контрольные суммы так, чтобы ЦП не должен был обращаться ко всем словам в пакете, чтобы сделать это. Отчасти это связано с дизайном структуры данных: мы стараемся выровнять буферы пакетов, чтобы мы могли перемещать их, изменяя принадлежность записи таблицы страниц. Некоторые из них - просто тщательное программирование, чтобы гарантировать, что к пакетным данным обращаются наименьшее количество раз, и желательно, чтобы они вообще не использовались до получения прикладной программы.

Как только мы сделаем все это, следующее ограничение - это накладные расходы на обработку пакетов по одному. Таким образом, в контроллере Ethernet и в ядре есть куча функций «разгрузки сегментации», что позволяет нам обрабатывать группы пакетов. Мы даже задерживаем получение данных с контроллера Ethernet, чтобы эти группы были больше.

Наконец, у нас есть ярлыки для особых случаев, такие как вызов sendfile () ядра, который представляет собой экспресс-путь от диска к сети с минимальным объемом работы.

Мы даже можем использовать специальную маршрутизацию (пересылку пакетов с одного интерфейса на другой), используя аппаратные функции сетевых интерфейсных карт и рассматривая шину PCI как шину между картами, вместо того, чтобы задействовать процессор. Это невозможно сделать в операционных системах общего назначения, но производители, такие как Intel, предоставляют программные библиотеки для реализации таких функций на своих контроллерах Ethernet.

Отойдя от процессоров в целом, мы можем даже создавать специализированные маршрутизаторы, где все задачи пересылки выполняются аппаратно. Так как шина PCI будет тогда ограничением, они запускают несколько параллельных шин; или даже несколько параллельных шин к множеству параллельных сборок коммутационных ригелей. На одном конце рынка маленький коммутатор Ethernet на основе TCAM будет одним из примеров; на другом конце рынка Juniper M40 был бы каноническим дизайном.

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

Типичный маршрутизатор получит пакет и удержит его в короткой очереди. IP-адрес назначения будет просматриваться в статическом ОЗУ, затем пакет будет разбит на ячейки, чтобы уменьшить задержку, и каждая ячейка будет отправлена ​​на коммутатор с переключателями на выходную карту. Эта карта соберет ячейки в пакет и поставит пакет в очередь из выходного интерфейса. Организация очереди на выходном интерфейсе может быть сложной.

vk5tu
источник
Отличный ответ. Можете ли вы уточнить the packet will then be exploded into cells to reduce latency?
Эдди
В дизайне маршрутизатора вы могли бы просто отправлять пакет с одной линейной карты на другую с помощью межполосной коммутации (или какой-либо другой шины между картами). Но тогда задержка ограничена длиной пакета - у вас будет еще одна полная задержка передачи пакета, поскольку пакет отправляется через коммутацию с использованием межполосной коммутации. Чтобы избежать этого, мы можем иметь несколько параллельных ссылок в коммутационной панели и разделить пакет по этим ссылкам. Тогда задержка для больших пакетов значительно уменьшается. Часть расщепленного пакета называется «ячейкой».
vk5tu
Я знаю, что это ответ от двух лет назад, но СПАСИБО. У меня был тот же вопрос, что и у оригинального постера, и я нашел ваш ответ в своем поиске. Это очень хорошо написано и тщательно. Спасибо!
Одинокая лодка
0

Сегодня почти все коммутации и большая часть маршрутизации обрабатываются аппаратно, поэтому скорость процессора входит в число исключений. Для таких вещей, как серверы, возможно, процессор недостаточно быстр. Это имело место в прошлом. Когда впервые появилась сеть Ethernet 1 Гбит / с, шина, используемая на ПК и серверах, могла обрабатывать только 400 Мбит / с.

Что происходит, когда процессор недостаточно быстр, так это то, что трафик сбрасывается. В любом случае, большое количество трафика может быть отброшено, поскольку именно так обрабатывается перегрузка, если все сделано правильно. RED (раннее раннее обнаружение) - это метод, используемый для случайного отбрасывания пакетов в очередях, чтобы предотвратить их заполнение и отбрасывание пакетов. Это может помочь предотвратить синхронизацию TCP. Много сбрасываний происходит на коммутаторах, где может потребоваться отправка нескольких портов на другой порт с той же скоростью.

Рон Мопин
источник
1
Это путает входные выбросы с выходными. Сбросы обычно происходят, когда кольцевой буфер интерфейса Ethernet переполнен - ​​как это происходит, когда процессор не успевает за скоростью поступления данных. Этот кольцевой буфер слишком мал для реализации RED.
vk5tu
@ vk5tu, вы пропустили мою мысль о том, что трафик постоянно падает, будь то вход или выход. Если какая-либо часть системы не может обработать объем трафика, некоторые будут отброшены, а некоторые - намеренно.
Рон Мопин