/ buffers / chipsets.html
chipsets.html
   1  Название: Интеллект сети. Как передать пакет
   2  
   3  
   4  
   5  Самый мощный сетевой чип сегодня умеет обрабатывать 25 600 000 000 000 бит за одну секунду. 30 миллиардов транзисторов должны провернуть уйму работы, доставляя биты со входного интерфейса на выходной.
   6  
   7  Новые типы интерфейсов, увеличивающиеся скорости, утончающиеся техпроцессы, новые функции - бросают ежедневные вызовы инженерам, разработчикам, производителям.
   8  
   9  У меня давно уже был праздный интерес к аппаратной начинке сетевых коробок, а в этот раз я решил поковыряться отвёрткой ещё глубже и, сняв крышечку с сетевых микросхем, взглянуть на Pipeline'ы да SerDes'ы.
  10  
  11  Как вы уже, вероятно, поняли, в этой статье будет запредельно много сленга, англицизмов и слов на английском, потому что переводить их на русский неблагодарно, а порой и кощунственно. 
  12  
  13  <a href="https://fs.linkmeup.ru/images/articles/buffers/kdpv_chipsets.jpg" target="_blank"><img src="https://fs.linkmeup.ru/images/articles/buffers/kdpv_chipsets_s.jpg" width="800"></a>
  14  
  15  Но знаете, какая мысль действительно не даёт мне покоя всю дорогу? Как вся эта сложнейшая конструкция: миллиарды транзисторов, размером около десятка нанометров, напечатанных на пластине размером с большую печеньку, которая полдюжиной тысяч ног припаяна к многослойной плате, напичканной мириадами других микрочипов, сопротивлений и конденсаторов и являющейся частью многоюнитовой модульной коробки, управляемой операционной системой, состоящей из сотен прошивок для разных чипов, инструкций по работе с ними, реализаций стандартизированных и проприетарных протоколов и механизмов поддержания жизнедеятельности многочисленных вентиляторов, блоков питания, линейных карт, фабрик коммутации, интерфейсов, процессоров, памяти - вообще хоть как-то работает, а тем более работает настолько стабильно в течение многих лет.
  16  
  17  Настоятельно рекомендую ознакомиться с <a href="https://linkmeup.ru/blog/312.html">14-м выпуском СДСМ</a> перед тем, как приступить к чтению.
  18  <hr>
  19  
  20  <h1>Содержание</h1>
  21  <ul>
  22      <li><b><a href="#TERMINOLOGY">Терминология</a></b></li>
  23      <li><b><a href="#DEVICE_ARCHITECTURE">Архитектура сетевого устройства</a></b></li>
  24      <li><b><a href="#CHIPSET_TYPES">Типы чипов</a></b>
  25      <ul>
  26          <li><a href="#TRADEOFFS">Компромиссы: скорость, функциональность, гибкость, цена</a></li>
  27          <li><a href="#CPU">CPU</a></li>
  28          <li><a href="#ASIC">ASIC</a></li>
  29          <li><a href="#FPGA">FPGA</a></li>
  30          <li><a href="#NP">NP</a></li>
  31          <li><a href="#PROGRAMMABLE_ASIC">Programmable ASIC</a></li>
  32          <li><a href="#DC_CHIPS">Чипы для датацентровых коммутаторов</a></li>
  33      </ul>
  34      </li>
  35      <li><b><a href="#ASIC_ARCHITECTURE">Архитектура ASIC</a></b>
  36      <ul>
  37          <li><a href="#PHYSICAL_ARCHITECTURE">Физическое устройство</a></li>
  38          <ul>
  39              <li><i><a href="#SERDES">SerDes</a></i></li>
  40              <li><i><a href="#PHY">PHY, Silicon Photonics</a></i></li>
  41          </ul>
  42          <li><a href="#LOGICAL_ARCHITECTURE">Логическое устройство</a>
  43          <ul>
  44              <li><i><a href="#PREINGRESS_ANGINE">Pre-Ingress processing</a></i></li>
  45              <li><i><a href="#PARSER">Parser</a></i></li>
  46              <li><i><a href="#IMOCHACTION">Ingress Match-Action</a></i></li>
  47              <li><i><a href="#TM">Traffic Manager + MMU</a></i></li>
  48              <li><i><a href="#EMOCHACTION">Egress Match-Action</a></i></li>
  49              <li><i><a href="#DEPARSER">Deparser</a></i></li>
  50          </ul>
  51          </li>
  52          <li><a href="#PIPELINE">Pipeline</a></li>
  53          <li><a href="#PROGRAMMABLE_PIPELINE">Programmable Pipeline</a></li>
  54      </ul>
  55      </li>
  56      <li><b><a href="#CHIPS_AND_DALES">Существующие чипы</a></b>
  57      <ul>
  58          <li><a href="#MERCHANT_SILICON">Commodity/Merchant</a></li>
  59          <li><a href="#CUSTOM_SILICON">Custom</a></li>
  60          <li><a href="#MERCHANTS_VS_CUSTOMERS">Merchant vs Custom</a></li>
  61      </ul>
  62      </li>
  63      <li><b><a href="#LINKS">Полезные ссылки</a></b></li>
  64  </ul>
  65  
  66  TL;DR
  67  <cut />
  68  
  69  
  70  <hr>
  71  <a name="TERMINOLOGY"></a>
  72  <h1>Терминология</h1>
  73  Задача этого параграфа не объять все непонятные слова, употребляемые в статье, а лишь внести некую ясность в неразбериху русско-английских терминов.
  74  <b>Чип коммутации</b>, <b>сетевой процессор</b>, <b>(Packet) Forwarding Engine</b>, <b>PFE</b> - микросхема, способная коммутировать пакет из входа в нужный выход с нужным набором заголовков.
  75  <b>Pins</b>, <b>пины</b>, <b>ножки</b> - металлические контакты на микросхеме для соединения с основанием.
  76  <b>Data Path</b> - путь внутри устройства (или чипа), по которому передвигается пользовательский трафик.
  77  <b>Lookup</b> или <b>лукап</b> или <b>поиск</b> - поиск адресата в таблицах (FIB, LFIB, ARP Adjacencies, IPv6 ND Table итд.)
  78  <b>Pipeline</b> или <b>конвейер</b> - набор действий, которые происходят с пакетом по мере его продвижения от входа в чип до выхода из него.
  79  <b>Single-chip</b>, <b>одночиповый</b> - устройство, внутри которого только один чип.
  80  <b>Fixed</b>, <b>фиксированный</b>, <b>pizza-box</b> - немодульный коммутатор. Обычно внутри него нет фабрик коммутации. Часто эти термины используются как синоним Single-chip, хотя это не совсем верно - внутри может стоять два (back-to-back) чипа или даже больше.
  81  <b>Сериализация/Десериализация</b> - процесс перевода данных из параллельного низкоскоростного интерфейса (МГц) в
  82  последовательный высокоскоростной (ГГц) и наоборот. Например, из чипа в интерфейс или из чипа в фабрику.
  83  <b>Память</b> - физическая микросхема для хранения.
  84  <b>Буфер</b> - некий участок памяти, выделенный для хранения пакетов. <i>Здесь и далее в производных словах, таких как "буферов", ударение на "У"</i>.
  85  <b>Очередь</b> - абстракция над буфером, позволяющая <b>виртуально</b> выстраивать пакеты в упорядоченную очередь. Фактически в памяти они, конечно, хранятся "как попало".
  86  <b>OCB</b> - On-Chip Buffer - память, встроенная в чип.
  87  <b>Programmable ASIC</b> - ASIC, логику работы которого можно изменить путём перепрошивки.
  88  <b>Programmable Pipeline</b> - чип с возможностью для сторонних компаний программировать конкретные части ASIC в ограниченных пределах с помощью предоставляемого вендором компилятора.
  89  
  90  <hr>
  91  
  92  <a name="DEVICE_ARCHITECTURE"></a>
  93  <h1>Архитектура сетевых устройств</h1>
  94  Итак, что такое сетевое устройство?
  95  Будь то коммутатор, маршрутизатор, файрвол, балансировщик, программный или аппаратный, его задача - доставить пакет со входа на правильный выход, и состоит оно из следующих частей:
  96  
  97  <img src="https://fs.linkmeup.ru/images/articles/buffers/device_architecture.svg" width="800">
  98  
  99  Электрический или оптический сигнал, попадая на устройство через входной физический порт, восстанавливается до потока битов, из него вычленяются отдельные Ethernet-кадры, далее на основе заголовков (Ethernet, IP, MPLS итд) (или иногда содержимого) принимается решение о том, в какой выходной порт этот пакет должен быть далее отправлен и с каким набором заголовков. На своём пути от входного к выходному порту пакет ещё проходит через модуль Traffic Manager, где с ним могут происходить следующие вещи: буферизация, полисинг, шейпинг, обработка по приоритетам.
 100  Это путь самого пакета.
 101  
 102  И отдельно от пути пакета - Control Plane Module, который отвечает за то, чтобы путь вообще появился. Это всяческие протоколы маршрутизации, обмена меток и прочее.
 103  
 104  Это компоненты, которые присутствуют всегда и во всех сетевых устройствах.
 105  
 106  Реализация же этих функций уже зависит от того, о чём именно мы говорим.
 107  Например, на обычном x86 всю работу, кроме PHY могут взять на себя CPU и оперативка. 
 108  Более типично, что функции канального уровня заберёт на себя NIC - Ethernet, проверка контрольных сумм.
 109  А можно в компьютер доставить SmartNIC'и, которые аппаратно могут делать, например, туннелирование.
 110  Но мы не будем сегодня про программные реализации сетевых функций. Поговорим о старых добрых материальных коробках, которым всё равно никуда никогда не деться.
 111  
 112  <hr>
 113  Вообще об этом я уже <a href="https://linkmeup.ru/blog/312.html">писал</a>, поэтому повторяться не буду. Точнее буду, но не сильно. Точнее сильно, но я добавлю здесь ещё смысла.
 114  
 115  Обычно на каждый блок задач выделяется специализированный чип.
 116  Так, всем Control Plane'ом занимается всё тот же CPU+память.
 117  Организация взаимодействия со средой передачи и преобразование битов в сигнал и наоборот - специальные чипы PHY. Почти всегда они реализуются на ASIC.
 118  Разбор заголовков и поиск пути - Packet Forwarding Engine. Это может быть ASIC, Network Processor, реже FPGA и даже CPU. К ним в помощь идёт или обычная память RAM или специальная CAM/TCAM для хранения таблиц лукапа.
 119  Traffic Manager - если вынесен отдельно, то опять же - узкоспециализированные ASIC'и и плюс к ним память. Но может быть встроенным в чип коммутации.
 120  
 121  Один из вариантов реализации (single-chip устройство):
 122  <img src="https://fs.linkmeup.ru/images/articles/buffers/device_architecture_variant.svg" width="800">
 123  
 124  В этой статье сосредоточимся на PFE и TM, которые и могут вносить вариативные задержки в доставку, потому что могут хранить пакеты.
 125  
 126  <hr>
 127  
 128  <a name="CHIPSET_TYPES"></a>
 129  <h1>Типов-Чипов</h1>
 130  Было очень страшно начинать эту статью, потому что чипов чудовищное многообразие и простого короткого ответа на вопрос, какой выбрать - нет. Речь и про типы, и про изготовителей, и про серии, и про характеристики.
 131  Ниже я попытаюсь разложить все эти штуки на составляющие детали.
 132  
 133  А начнём с типов чипов.
 134  
 135  <a name="TRADEOFFS"></a>
 136  <h2>Компромиссы: скорость, функциональность, гибкость, цена</h2>
 137  В IT всё есть компромисс. Всегда приходится чем-то жертвовать во благо другого.
 138  
 139  Вот классический цискин треугольник про компромиссы:
 140  
 141  <img src="https://fs.linkmeup.ru/images/articles/buffers/tradeoffs.png" width="600">
 142  <i>Здесь не хватает ещё NP и Programmable ASIC. <a href="https://www.ciscolive.com/c/dam/r/ciscolive/us/docs/2016/pdf/BRKARC-3467.pdf" target="_blank">Источник</a>.</i>
 143  
 144  
 145  Вендоры всегда балансируют в периметре этого треугольника. 
 146  
 147  Нельзя сделать CPU, проворачивающий через себя 25 Тб/с.
 148  Нельзя сделать универсальный ASIC - зачастую они могут быть аппаратно ограничены по функциям (например, <b>или</b> VXLAN Lookup <b>или</b> IP).
 149  Нельзя сделать дешёвый FPGA.
 150  
 151  Кроме того при таком количестве портов, сегодня вступают в игру энергопотребление, место в стойке, тепловыделение и, конечно, цена. 
 152  <hr>
 153  Итак, на сегодняшний день существуют следующие типы чипов, которые могут быть использованы в качестве пакетных процессоров:
 154  
 155  <a name="CPU"></a>
 156  <h2>CPU</h2>
 157  
 158  <img src="https://fs.linkmeup.ru/images/articles/buffers/chip_cpu.png" width="500">
 159  
 160  <ul>
 161      <li>Неограниченная гибкость</li>
 162      <li>Неограниченная функциональность</li>
 163      <li>Приемлемая цена</li>
 164      <li>Полный провал по производительности</li>
 165  </ul>
 166  
 167  Идея в том, что всё управляется кодом. Инструкции записываются в оперативную память. Для обработки каждого пакета потребуется сходить много раз из CPU в RAM.
 168  С другой стороны для изменения логики работы достаточно переписать программу. Обновления CPU не требуется.
 169  
 170  Область применения: домашние и SOHO маршрутизаторы, устройства уровня доступа, файрволы, DPI итд. 
 171  Например, абсолютно все рутеры Mikrotik используют CPU для маршрутизации пакетов.
 172  Иными словами CPU годится там, где не гонимся за ультраскоростями, а важен широкий набор функций и невысокая цена.
 173  <blockquote>
 174      Впрочем, не без исключений: бывают, что и большие штуки коммутируют в CPU.
 175  </blockquote>
 176  
 177  <b>Важное замечание</b>: CPU является необходимой частью любого сетевого устройства, потому что берёт на себя задачи Control Plane. А это автоматически означает, что ему придётся работать с протокольным трафиком: OSPF, BGP, LDP, LLDP итд. Кроме того, есть exception трафик - когда у пакета TTL истёк или когда у него стоит бит Router Alert. Ещё CPU нужно самому генерировать трафик тех же протоколов - Self-generated.
 178  Можно ли считать это участием в коммутации? Скорее да, чем нет.
 179  
 180  <h5>Программная маршрутизация на CPU</h5>
 181  Для последнего десятилетия характерна тенденция к маршрутизации в софте. Для всех сетевых функций предлагаются программные альтернативы. Отсюда и DMA, DPDK, VPP, SR-IOV, которые и правда позволяют творить невиданные прежде вещи. 
 182  Более того, современные CPU обладают дополнительными блоками инструкций. У Intel это <b>SSE</b> - <a href="https://ru.wikipedia.org/wiki/SSE" target="_">Streaming SIMD Extensions</a>, позволяющие значительно ускорить обработку трафика.
 183  Тут обычные CPU уже заходят в зону NP (Network Processor) - процессоров, которые можно программировать на языках высокого уровня вроде C, и обладающих большим набором спец. инструкций для работы с сетевым трафиком.
 184  Одним из узких мест современных процессоров ещё является шина доступа - PCIe. В один процессор сейчас более-менее можно загнать 100 с небольшим Гбит/с.
 185  
 186  Но как бы производители программных решений ни продвигали идею, что "все можно сделать в софте", однако скорости выше 500 Гбит/с пока что можно достигать только с помощью специализированных асиков.
 187  
 188  И давайте ещё прикинем.
 189  Выдержка с сайта про VPP:
 190  <blockquote>
 191      Recent testing of FD.io release 17.04 shows impressive gains in performance on Intel’s newest platform when switching and routing layer 2⁄3 traffic. With the prior generation Intel® Xeon® Processor E7-8890v3, FD.io testing showed aggregate forwarding rate of 480 Gbps (200 Mpps) for 4-Socket machine (using 4 of E7-8890v3 CPU configuration); however, the same FD.io tests run on two 2-Socket blades (e.g. a modern 2RU server) with the new Intel® Xeon® Platinum 8168 CPUs (using four of 8168 CPUs in two by two-socket configuration), within the same power budget, show increase of forwarding rate to 948 Gbps (400 Mpps) benefiting from the PCIe bandwidth increase of the new CPUs, and the overall decrease in cycles-per-packet due to CPU micro-architecture improvements.
 192  </blockquote>
 193  
 194  Xeon E7-8890v3: Рекомендуемая цена $7174.
 195  4 проца по 18 ядер = 72 ядра = 480 Gbps (200 Mpps)
 196  $28696 только за процы
 197  
 198  Xeon Platinum 8168. Рекомендуемая цена% $5890.
 199  2 проца по 24 ядра = 48 ядер = 948 Gbps (400 Mpps)
 200  $11780 только за процы
 201  
 202  Без обвязки. А ещё кушать электричества он будет как голодный шакал. Не самый дешёвый получится рутер. Зато гибкий.
 203  
 204  <a name="ASIC"></a>
 205  <h2>ASIC</h2>
 206  <img src="https://fs.linkmeup.ru/images/articles/buffers/chip_asic.png" width="500">
 207  
 208  <ul>
 209      <li>Околонулевая гибкость</li>
 210      <li>Ограниченная функциональность</li>
 211      <li>Низкая цена</li>
 212      <li>Ультравысокая производительность</li>
 213  </ul>
 214  
 215  Идея в том, что инструкции закодированы аппаратно в виде транзисторов. 
 216  Сначала очень долго пишется код, реализующий логику, на специальном языке программирования, вроде Verilog, далее он преобразуется в интегральную схему, отлаживается, проверяется и отправляется в тираж. После этого поменять что-то в логике чипа можно, только произведя новый чип.
 217  Каждый пакет обрабатывается, просто прогоняясь по конвейеру из транзисторов, совершающих заранее определённые действия. Это называется Pipeline.
 218  
 219  Область применения: почти любые коммутаторы и многие маршрутизаторы.
 220  <blockquote>
 221      Впрочем, не без исключений: Juniper в своей линейке маршрутизаторов MX многие годы использует <a href="https://habr.com/post/307696/" target="_blank">ASIC Trio</a>.
 222  
 223      Вообще по книге об MX: PFE это блок ASIC'ов:
 224      PFEs are made of several ASICs, which may be grouped into four categories:
 225      <ul>
 226          <li>Routing ASICs: LU or XL Chips. LU stands for Lookup Unit and XL is a more powerful (X) version.</li>
 227          <li>Forwarding ASICs: MQ or XM Chips. MQ stands for Memory and Queuing, and XM is a more powerful (X) version.</li>
 228          <li>Enhanced Class of Service (CoS) ASICs: QX or XQ Chips. Again, XQ is a more powerful version.</li>
 229          <li>Interface Adaptation ASICs: IX (only on certain low-speed GE MICs) and XF (only on MPC3E)  </li>
 230      </ul>
 231  </blockquote>
 232  
 233  Речь здесь о классических ASIC - <b>Applicaton Specific</b> Integrated Circuit - статических кусках кремния с аппаратной логикой.
 234  Последние лет 10 в области сетевых микросхем произошёл сдвиг в направлении программируемых ASIC'ов, о которых <a href="#PROGRAMMABLE_ASIC">чуть ниже</a>.
 235  
 236  <a name="FPGA"></a>
 237  <h2>FPGA</h2>
 238  <img src="https://fs.linkmeup.ru/images/articles/buffers/chips_fpga.png" width="500">
 239  
 240  Русский термин - ПЛИС - Программируемая Логическая Интегральная Схема.
 241  <ul>
 242      <li>Вполне удовлетворительная гибкость</li>
 243      <li>Вполне удовлетворительная функциональность</li>
 244      <li>Цена успешного полёта Апполона до Луны и обратно</li>
 245      <li>Отличная производительность</li>
 246  </ul>
 247  
 248  В отличие от ASIC'ов, где на транзисторах реализованы сами функциональные блоки, в FPGA транзисторами реализуются базовые строительные блоки - регистры, память, LUTы. Из которых потом <b>можно</b> создавать нужные функциональные блоки.
 249  Что это даёт?
 250  А то, что FPGA полностью программируемый - логику работы блоков, из которых он состоит, можно поменять. Для этого потребуется обновить прошивку чипа, что менее удобно, чем с CPU, но гораздо удобнее, чем ASIC.
 251  Так, если поддержка какой-то функции (условный Geneve) не была заложена изначально, её всегда можно добавить потом новой прошивкой.
 252  
 253  Однако за такую программируемость приходится дорого платить.
 254  
 255  Область применения: POC или низкоскоростные решения для энтерпрайз-сегмента. 
 256  
 257  <blockquote>
 258      Впрочем, не без исключений: собеседовался я как-то раз в контору, в которой модульную коробку для операторов собирали полностью на FPGA, включая фабрику.
 259  
 260      У этого даже есть основания: задолго до появления Programmable ASIC'ов на FPGA можно было делать любую обработку пакетов. И даже через несколько лет после производства плисину легко перепрошить и получить поддержку новой функции.
 261      
 262      Автору неизвестны вендоры, которые бы на ПЛИС сделали PFE на скорости более 100 Гбит/с, по всей видимости, потому что частная компания не обладает для этого достаточным капиталом.
 263      Но для рынка энтерпрайз такие решения могут <a href="https://www.ethernitynet.com/products/socs/network-co-processors/" target="_blank">вполне</a> <a href="https://www.arrivetechnologies.com/ipcorecarrierethernet" target="_blank">подойти</a>.
 264  
 265      Однако, я слышал, что в процессе разработки ASIC возможен такой подход, когда сначала разрабатывается FPGA, программируется нужным образом, тестируется, а потом с неё делают слепок для производства ASIC. Но пруфов нет.
 266  </blockquote>
 267  
 268  <a name="NP"></a>
 269  <h2>NP - Network Processor</h2>
 270  <img src="https://fs.linkmeup.ru/images/articles/buffers/chip_np.png" width="500">
 271  
 272  <ul>
 273      <li>Отличная гибкость</li>
 274      <li>Отличная функциональность</li>
 275      <li>Цена весьма высокая</li>
 276      <li>Производительность весьма высокая</li>
 277  </ul>
 278  
 279  NP или <b>NPU</b> - Network Processor Unit.
 280  
 281  Идея в том, что это почти CPU, который однако заточен под сетевые задачи и изготавливается специально под них.
 282  Он, как и CPU, обычно состоит из нескольких ядер, каждое из которых отвечает за свой сегмент. Для изменения логики так же достаточно переписать код приложения.
 283  NP позволяет делать более сложные штуки - например выполнять циклы (чего лишены ASIC и FPGA), делать NAT, почти любые инкапсуляции, пушить и попать условно произвольное число меток итд.
 284  Долгое время NP позиционировался, как серебряная пуля для всех сетевых приложений.
 285  Но производительность уступает ASIC'ам и FPGA.
 286  
 287  Большим преимуществом является то, что писать программы для NP можно на С. Это значительно ускоряет процесс, кроме того, где-то можно переиспользовать код.
 288  
 289  Область применения: маршрутизаторы агрегации и ядра. 
 290  <blockquote>
 291      Впрочем, не без исключений: например Smart-NIC Netronome в начале своего пути <a href="https://www.netronome.com/timeline/" target="_blank">испльзовал Intel IXP</a>.
 292  </blockquote>
 293  
 294  <a name="PROGRAMMABLE_ASIC"></a>
 295  <h2>Programmable ASIC</h2>
 296  <img src="https://fs.linkmeup.ru/images/articles/buffers/chip_programmable_asic.png" width="500">
 297  
 298  <ul>
 299      <li>Приемлемая гибкость</li>
 300      <li>Ограниченная функциональность</li>
 301      <li>Низкая цена</li>
 302      <li>Ультравысокая производительность.</li>
 303  </ul>
 304  
 305  А вот это уже настоящая серебряная пуля последнего десятилетия.
 306  "Почему бы нам не взять ASIC и сделать его немножечко программируемым?" - таким вопросом, видимо, задались разработчики и выдали замечательную вещь, которую циска в своём треугольнике поместила в самую середину, хотя это и не совсем так, потому что производительность программируемого ASIC'а такая же, как и у обычного. Им удалось вырваться из 2D.
 307  
 308  <img src="https://fs.linkmeup.ru/images/articles/buffers/programmable_asic.png" width="600">
 309  
 310  Область применения: коммутаторы, маршрутизаторы. 
 311  Большинство датацентровых коммутаторов и некоторые маршрутизаторы уровня границы ДЦ работают на программируемых асиках.
 312  <hr>
 313  
 314  <a name="DC_CHIPS"></a>
 315  <h2>Чипы для датацентровых коммутаторов</h2>
 316  Чтобы упростить себе жизнь, я продолжу далее разговор только об ASIC'ах под датацентровые коммутаторы, не пытаясь обнять Джабба Хатта.
 317  
 318  До недавних пор на этой ниве пахал только Broadcom со своей оружейной палатой: Tomahawk и Trident - и израильскими городами: Qumran, Jericho итд.
 319  Выбор - особо не разбежишься - ну или разрабатывать своё (как делают Huawei, Juniper и Cisco)
 320  
 321  Сегодня конкуренцию ему пытаются составить Mellanox со своими собственными чипами Spectrum (ныне уже Nvidia), Innovium Teralynx, Barefoot Tophino (ныне Intel). Своим появлением эти компании раскачивают рынок и провоцируют среди вендоров тренд на переход от внутренних разработок к готовым чипам их производства.
 322  
 323  Мы в конце <a href="#CHIPS_AND_DALES">статьи</a> взглянем на их модельные ряды, но пока давайте обсудим, чем же чипы характеризуются и могут отличаться друг от друга.
 324  
 325  А для этого надо понять, какие они задачи решают.
 326  <hr>
 327  
 328  В <a href="https://nag.ru/articles/article/105378/kak-postroit-gugl.html">датацентровых сетях</a> есть три основных типа устройств:
 329  <b>Spine</b> - сравнительно простая железка, требующая самый минимум функций - её задача просто молотить трафик. Очень много и очень быстро. Зачастую это просто IP-маршрутизация. Но бывают и топологии, в которых Spine играет чуть более важную роль (VXLAN anycast gateway). Но обычная практика - держать конфигурацию спайнов максимально простой. 
 330  <b>Leaf</b> - чуть более требователен к функциям. Может терминировать на себе VXLAN или другие оверлеи. Здесь могут реализовываться политики QoS и ACL. Зато не нужна такая большая пропускная способность, как для спайнов. Кроме того, в некоторых сценариях (VXLAN) leaf знает о сервисах за подключенными машинами (клиентских сетях, контейнерах), соответственно, ему нужно больше ресурсов FIB для хранения этой информации.
 331  <b>Edge-leaf</b> - это устройства границы сети ДЦ и здесь уже фантазия ограничивается только свободой мысли сетевых архитекторов - MPLS, RSVP-TE, Segment Routing, всевозможные VPN'ы. При этом наименее требовательны к производительности.
 332  
 333  На каждом устройстве, соответственно, разные требования к возможностям чипов - как по пропускной способности, так и по набору функций и по количеству ресурсов для хранения чего-либо.
 334  
 335  И надо сказать, вендоры чипов и железа добились тут поразительных успехов. 
 336  Типичный спайн сегодня - это 64-128 100GE портов на 2-4 юнита с энергопотреблением около 400 Вт. И ценой порядка пары десятков тысяч долларов.
 337  
 338  
 339  
 340  <img src="https://fs.linkmeup.ru/images/articles/buffers/nexus3k.png" width="800">
 341  
 342  Производителям чипов приходится нелегко не только из-за попыток найти золотую середину, но и из-за возрастающих скоростей передачи данных и конкуренции.
 343  Средняя скорость аплинков с торов сегодня 200-800 Гб/с. Чтобы собрать минимально рабочую сеть ДЦ, нужны спайны с пропускной способностью 3,2 Тб/с.
 344  
 345  Всё более и более производительные чипы нужно выпускать уже примерно каждые полтора-два года.
 346  
 347  
 348  <img src="https://fs.linkmeup.ru/images/articles/buffers/timeline.png" width="800">
 349  <i>Актуализированная мной картинка из <a href="https://youtu.be/Ti3t9OAZL3g?t=2496">видео PP</a>.</i>
 350  
 351  
 352  Конкурирующие производители чипов идут ноздря в ноздрю - почти одновременно у всех (Broadcom, Mellanox, Innovium, Barefoot) выходят микросхемы с почти идентичными характеристиками, а вслед за ними и коммутаторы с ними.
 353  
 354  Ещё одним компромиссным вопросом является размер буфера, но об этом мы поговорим в следующей статье.
 355  
 356  
 357  Помимо скорости и обязательных функций по маршрутизации и оверлеям, есть ещё много менее заметных вещей, которые ожидают потребители. 
 358  Мы про них говорить сегодня не будем, но не упомянуть было бы ошибкой.
 359  
 360  Это, например, <b>телеметрия</b> в реальном времени: наблюдать за утилизацией буферов, видеть бёрсты, дампы отброшенных пакетов, профиль трафика по размерам и типам пакетов.
 361  Кроме того, сегодня набирает популярность <b>INT</b> - <a href="https://www.opencompute.org/files/INT-In-Band-Network-Telemetry-A-Powerful-Analytics-Framework-for-your-Data-Center-OCP-Final3.pdf">Inband Network Telemetry</a>.
 362  
 363  Для многих незаметно, но уже почти жизненно важно, начинает работать <b>динамическая балансировка трафика</b>: чип отслеживает потоки (flows) и дробит их на флоулеты (flowlets) - короткие куски трафика одного потока, разделённые между собой паузой в несколько миллисекунд. Эти флоулеты он может динамически распределять по разным путям (ECMP или членам LAG), чтобы обеспечить более равномерную балансировку. Особенно важно это для Elephant Flows, оккупирующих один интерфейс.
 364  
 365  Пользователям всё чаще хочется иметь возможность <b>управлять распределением буфера</b>, ну а <b>перераспределение</b> ресурсов FIB - это уже функциональность, отсутствие которой будет вызывать вопросы. 
 366  
 367  В условиях датацентров <a href="https://nag.ru/articles/reviews/105272/ecmp-i-prevratnosti-balansirovki-na-setevom-oborudovanii.html" target="_blank">ECMP и балансировка силами сети</a> - это воздух, вендорам нужно обеспечить нужное количество как <b>ECMP-групп</b>, так и общее <b>количество Next-hop'ов</b>.
 368  
 369  
 370  Поэтому нет одного чипа или тем более SoC, решающего сразу все задачи. 
 371  Под каждую роль разработаны свои чипы. Одни из них ориентированы на пропускную способность, другие на широкую функциональность, третьи на низкие задержки. 
 372  
 373  
 374  Посочувствуем же бедным вендорам и будем выбирать долларом.
 375  <hr>
 376  
 377  <a name="ASIC_ARCHITECTURE"></a>
 378  <h1>Архитектура сетевых ASIC</h1>
 379  Сначала мы взглянем на физиологию чипа - из каких компонентов он состоит.
 380  А далее разберёмся что с пакетом в этих компонентах происходит.
 381  
 382  <a name="PHYSICAL_ARCHITECTURE"></a>
 383  <h2>Физическое устройство</h2>
 384  Итак, для успешной коммутации пакета нужны следующие блоки: 
 385  <ul>
 386      <li>Парсер заголовков (Parser)</li>
 387      <li>Лукап (Match): FIB/LFIB, Nexthop-группы, ARP Adjacencies, IPv6 ND Tables, ACL итд</li>
 388      <li>Блоки преобразований (Action)</li>
 389      <li>Блок управления памятью (TM/MMU)</li>
 390      <li>Сборщик пакета (Deparser)</li>
 391      <li>SerDes</li>
 392      <li>Память для буферизации пакетов</li>
 393      <li>Блок, реализующий MAC</li>
 394      <li>Чип PHY</li>
 395      <li>Физические порты/трансиверы</li>
 396  </ul>
 397  
 398  <img src="https://fs.linkmeup.ru/images/articles/buffers/device_architecture_full.svg" width="800">
 399  Крупными мазками: оптический или электрический сигнал попадает на порт (<b>Rx</b>), тот его передаёт на <b>PHY</b>. Модуль PHY реализует функции физического уровня и передаёт биты на входные пины PFE, где сигнал блоками <b>SerDes</b> преобразуется в удобоваримый для чипа вид. Блок <b>MAC</b> из потока битов восстанавливает Ethernet-кадр и передаёт его <b>парсеру</b>. Парсер отделяет необходимые ему заголовки и передаёт их на анализ следующему блоку <b>Match/Action</b>. Тот их исследует и применяет нужные действия - отправить на правильный порт, на CPU, энкапсулировать, дропнуть итд. Тело пакета всё это время хранилось в <b>буферах</b>, управляемых <b>MMU</b>, и теперь пришло время <b>Traffic Manager'у</b> проводить все обряды QoS. И потом процесс раскручивается в обратную сторону. Снова <b>Match/Action</b>. Потом собрать пакет с новыми заголовками (<b>Deparser</b>), преобразовать кадр в поток битов (<b>MAC</b>), сериализовать (<b>SerDes</b>), осуществить действия физического уровня (<b>PHY</b>) и передать через выходной порт (<b>Tx</b>) в среду.
 400  <hr>
 401  
 402  В простейшем случае вообще почти все блоки являются частью одного монолитного кристалла кремния. То есть они - продукт одного процесса печати на вафле.
 403  
 404  Отдельные, составляющие чип компоненты, реализующие законченный набор функций, называюся <a href="https://ru.wikipedia.org/wiki/IP-cores" target="_blank">IP-core</a> (не тот, что ты мог подумать, сетевой инженер!). То есть SerDes, MAC, TM - это всё отдельные IP-core. Зачастую они производятся сторонними компаниями, специализирующимися конкретно на данных компонентах, а потом встраиваются в микросхему. Особенно это касается SerDes - сложнейшей детали, в которую вендоры сетевых чипов не готовы вкладывать силы R&D. Один из крупных производителей SerDes - <a href="https://www.inphi.com/products/optical-phy/" target="_blank">Inphi</a>.
 405  
 406  <img src="https://fs.linkmeup.ru/images/articles/buffers/rosetta.png" width="500">
 407  <i>Монолитный чип Rosetta. <a href="https://fuse.wikichip.org/news/3293/inside-rosetta-the-engine-behind-crays-slingshot-exascale-era-interconnect/" target="_blank">Источник</a>.</i>
 408  
 409  Все свои чипы Broadcom позиционирует как монолитные:
 410  <img src="https://fs.linkmeup.ru/images/articles/buffers/trindent4_monolitic.png" width="300">
 411  <i><a href="https://www.broadcom.com/products/ethernet-connectivity/switching/strataxgs/bcm56880-series" target="_blank">Источник</a>.</i>
 412  
 413  <img src="https://fs.linkmeup.ru/images/articles/buffers/monolitic_asic.png" width="800">
 414  <i><a href="http://www.trex.fi/2017/Ralf-Korschner-The-March-of-Merchant-Silicon.pdf" target="_blank">Источник</a>.</i>
 415  
 416  Другой распространённый вариант: в одном чипе сочетать несколько разных кусочков с интерконнектом между ними.
 417  Так, например, off-chip память HBM коммерческого производства выносится за пределы кристалла сетевого ASIC:
 418  <img src="https://fs.linkmeup.ru/images/articles/buffers/monolit_asic.png" width="400">
 419  
 420  Под крышкой одного производительного чипа могут быть собраны несколько, так называемых, менее производительных чиплетов (chiplet), которые, объединённые в фабрику, дают бо́льшую пропускную способность:
 421  <img src="https://fs.linkmeup.ru/images/articles/buffers/chiplets.png" width="400">
 422  
 423  Для <a href="#CUSTOM_SILICON">кастомных решений</a> рядовая практика - вообще все ресурсы выносить за пределы сетевого ASIC'а:
 424  <img src="https://fs.linkmeup.ru/images/articles/buffers/off_chip_resources.png" width="800">
 425  
 426  В случае Juniper, кстати, их Trio - это не один ASIC - это их набор, каждый из которого реализует свои функции.
 427  
 428  Но как бы ни был устроен сам чип, ему нужно общаться с миром. 
 429  И поэтому на животике у него есть несколько тысяч пинов:
 430  <img src="https://fs.linkmeup.ru/images/articles/buffers/pins.png" width="400">
 431  
 432  Одни пины нужны для того, чтобы подключить к чипу интерфейсы.
 433  Другие - чтобы подключиться к внешней памяти (CAM/TCAM/RAM), если она есть.
 434  Третьи - к фабрике коммутации, если коробка модульная.
 435  А почти половина всех пинов - это земля и питание.
 436  
 437  Два пина образуют <a href="https://linkmeup.ru/blog/401.html#DIFFPAIRS">дифференциальную пару</a> для передачи данных в одном направлении. То есть две пары пинов нужны для полнодуплексной передачи.
 438  
 439  Вот так оно потом выглядит в программах для проектирования (для случая на порядок более простой микросхемы):
 440  <img src="https://fs.linkmeup.ru/images/articles/buffers/designing_card.png" width="700">
 441  <i><a href="https://linkmeup.ru/blog/401.html">Источник</a>.</i>
 442  
 443  Теперь пришло время разобраться с тем, что же такое загадочный SerDes. Нет, это не ножки на микросхеме.
 444  <hr>
 445  <a name="SERDES"></a>
 446  <h3>SerDes</h3>
 447  Если коротко - то это блоки (<a href="https://ru.wikipedia.org/wiki/IP-cores" target="_blank">IP-core</a>) сетевого ASIC'а, которые позволяют получить сигнал с пинов и, наоборот, передать его туда.
 448  
 449  Теперь с этимологией. Аналогично "модему" и "кодеку", ставшим уже такими родными в кириллическом написании, SerDes составлен из двух слов: <b>Serializer-Deserializer</b>. Так чего же он сериализует и десериализует?
 450  
 451  Всё дело в скорости работы сетевых чипов. Независимо от их типа (ASIC, NP, CPU) - их частота находится в пределах сотен Мгц - единиц 1Ггц. А частота передачи данных с порта 10Гб/с - 10 Ггц (100 Гбит/с = 4х25ГГц). Соответственно, каким-то образом нужно понизить частоту внутри чипа. И как раз это достигается тем, что сигнал из пары вводных пинов распараллеливается на множество внутренних линий - десериализуется.
 452  В обратную сторону - сигнал с нескольких линий нужно сериализовать в пару пинов.
 453  
 454  Блоки SerDes всегда являются составными частями кристалла сетевого чипа.
 455  
 456  <img src="https://fs.linkmeup.ru/images/articles/buffers/serdeses.jpg" width="400">
 457  <i><a href="https://www.design-reuse.com/news/44362/esilicon-7nm-ip-networking-platform.html" target="_blank">Источник</a>.</i>
 458  
 459  <img src="https://fs.linkmeup.ru/images/articles/buffers/serdes_inside.png" width="500">
 460  <i><a href="http://www.trex.fi/2017/Ralf-Korschner-The-March-of-Merchant-Silicon.pdf" target="_blank">Источник</a>.</i>
 461  
 462  Один SerDes - это 4 пина на пузике асика - два для Tx, два для Rx.
 463  Скорость одного SerDes'а - величина скачкообразно растущая с годами . Наиболее распространённые сегодня - это 10Гб/с и 28Гб/с. Но в скором будущем датацентровый масс-маркет начнут заполонять устройства с 56Гб/с SerDes и даже со 112Гб/с.
 464  
 465  Выглядит довольно сложным. Для чего же вообще устраивать эту сериальную вакханалию, а не сделать просто пинов по числу реальных линий в чипе?
 466  
 467  <h4>Зачем?</h4>
 468  Ну, давайте прикинем, спайн-коммутатор с 64х100Гб/с портами несёт под кожухом ASIC ёмкостью 6,4 Тб/с.
 469  Если каждые 4 пина чипа могут обеспечить 28Гб/с в полном дуплексе, значит, на нём должно быть 64*4*4=1024 пинов.
 470  Это уже как минимум 32х32 пинов на 40 см^2. И они там сидят довольно плотненько. Легко ли будет кратно нарастить их количество?
 471  
 472  Однако проблема не только и не столько с количеством пинов.
 473  Тенденция к серийным интерфейсам намечается <a href="https://www.design-reuse.com/articles/10541/multi-gigabit-serdes-the-cornerstone-of-high-speed-serial-interconnects.html" target="_blank">уже давно</a>.
 474  На смену переферийным параллельным портам пришли серийные (USB на смену параллельному)
 475  На смену IDE - SATA (Serial ATA)
 476  На смену SCSI - SAS (Serial SCSI)
 477  На смену PCI - PCI Express
 478  
 479  Это жжж неспроста. Ведь казалось бы, чем больше проводов, тем больше данных можно передать за единицу времени?
 480  На самом деле нет - при параллельной передаче с повышением скорости всё острее и острее встают вопросы синхронизации между этими самым проводами. Схемотехники даже связанные дорожки на платах <a href="https://linkmeup.ru/blog/401.html#DIFFPAIRS" target="_blank">проектируют так</a>, чтобы они были максимально одинаковой длины.
 481  В какой-то момент задача усложнилась настолько, что дальнейшее развитие пошло по увеличению полосы пропускания обычной дифф-пары вместо параллелизма. В частности для 100Гб/с другого варианта просто не существует. 
 482  
 483  <h4>Модуляция</h4>
 484  То, каким образом множество параллельных сигналов укладывается в один, зависит от метода модуляции.
 485  Для SerDes с пропускной сопособностью 10Гб/с и 28Гб/с используется <b>NRZ</b> - <a href="https://en.wikipedia.org/wiki/Non-return-to-zero" target="_blank">Non-Return-to-Zero</a>. 
 486  С ним же <a href="https://www.nextplatform.com/micro-site-content/taking-closer-look-rambus-56-gbps-multi-protocol-serdes-phy/" target="_blank">добились</a> и 56Гб/с. Но всё же стандартом <i>de facto</i> для 56Гб/с и <i>de iure</i> для 112Гб/с является <b>PAM4</b> - <a href="https://blogs.cisco.com/sp/pam4-for-400g-optical-interfaces-and-beyond-part-1" target="_blank">4 -level Pulse Amplitude Modulation</a>.
 487  Есть и <a href="http://www.ieee802.org/3/ad_hoc/ngrates/public/17_05/sun_nea_01a_0517.pdf" target="_blank">ленивые пессимистичные взгляды</a> в сторону PAM8.
 488  
 489  Итого, учитывая современные реалии (NRZ), для того, чтобы запитать данными интерфейс 100Гб/с нужно подвести к нему 4 SerDes'а по 28Гб/с (или 16 дорожек). Отсюда и берётся "лейновость" 100Ж-портов: 4 лейна - это 4 канала по 28Гб/с.
 490  
 491  И это то, что позволяет 1х100Ж порт разбить на 4х25Ж с помощью гидры.
 492  <img src="https://fs.linkmeup.ru/images/articles/buffers/breakout.png" width="500">
 493  
 494  В случае PAM4 для 100Ж нужно только 2 SerDes'а по 56Гб/с, то есть два лейна.
 495  
 496  <h4>GearBox'ы</h4>
 497  Сложности с переходом на новые методы модуляции заключаются в том, что устройства на разных сторонах должны использовать одинаковые, либо нужно ставить дополнительные конвертеры. То есть просто подключить сотками коммутатор с PAM4 к NRZ не получится.
 498  
 499  Но когда индустрия бросала своих участников, не предлагая им решений? Для того, чтобы устройства с разными модуляциями могли взаимодействовать друг с другом, изобрели коробки передач, которые из малого количество высокоскоростных линий делают много помедленнее и наоборот.
 500  Так, в новейшие коммутаторы, выпускаемые сегодня, <a href="https://www.marketwatch.com/press-release/broadcoms-industry-leading-pam-4-phy-shipments-surpass-1-million-ports-2018-09-20" target="_blank">ставят дополнительные чипы</a>, чтобы их можно было использовать в сети с более старым оборудованием.
 501  
 502  Использование гирбоксов также упростит вендорам и переход на 400G - не придётся менять ASIC - достаточно заменить/убрать гирбокс.
 503  <hr>
 504  
 505  <a name="PHY"></a>
 506  <h3>PHY</h3>
 507  Этот зверь тоже по-своему интересен.
 508  Его задачи незамысловаты:
 509  <ul>
 510      <li>Конвертация сигнала между средами (оптика-медь), если это нужно</li>
 511      <li>Восстановление битов из сигналов и наоборот</li>
 512      <li>Коррекция ошибок</li>
 513      <li>Синхронизация</li>
 514      <li>И другие задачи физического уровня.</li>
 515  </ul>
 516  
 517  <i>Если хочется знать больше, и не пугают забористые тексты со страшными картинками: <a href="https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/phy-interface-pci-express-sata-usb30-architectures-3-1.pdf" target="_blank">PHY Interface for PCI Express, SATA, USB 3.1, DisplayPort, and Converged IO Architectures</a>.</i>
 518  
 519  Что действительно любопытно и достойно обсуждения - так это его расположение.
 520  Если порт медный - RJ45, то чип PHY - это ASIC, установленный на плате.
 521  <img src="https://fs.linkmeup.ru/images/articles/buffers/phy.png" width="400">
 522  
 523  Если порт оптический, то в подавляющем большинстве случаев эти функции возьмёт на себя DSP PHY, встроенный в трансивер (та самая штука, называемая нами модулем и вставляемая в дырку в коммутаторе).
 524  <img src="https://fs.linkmeup.ru/images/articles/buffers/dsp_phy.png" width="500"> 
 525  <i><a href="https://www.inphi.com/products/optical-phy/" target="_blank">Источник</a>.</i>
 526  <a name="SILICON_PHOTONICS"></a>
 527  Однако тенденции последних лет - это <b>Silicon Photonics</b>. 
 528  
 529  Самый производительный коммерческий чип сегодня выдаёт 25,6 Тб/с. Это серьёзнейший инженерный вызов разработчиками. И нет никаких оснований полагать, что гиперскейлеры и экзаскейлеры умерят свои аппетиты и решат остановиться на этом. Скорость будет расти.
 530  Чип PHY находится на трансиверах, а SerDes - на кристалле сетевой микросехмы. Сигнал между ними идёт по электропроводящей среде - по металлической дорожке. С увеличением скоростей растёт и конструктивная сложность и потребляемое электричество. Рано или поздно (скорее, рано) мы во что-нибудь упрёмся.
 531  
 532  В случае silicon photonics микросхема PHY переносится внутрь самого чипа коммутации. В кристалл "встраиваются" фотонные порты, позволяющие осуществлять коммуникации между чипами на скорости света через оптическую среду. 
 533  <img src="https://fs.linkmeup.ru/images/articles/buffers/sip.jpg" width="600">
 534  <i><a href="https://seekingalpha.com/article/4276568-important-development-of-this-century" target="_blank">Источник</a>.</i>
 535  
 536  Идея не новая, и только ожидавшая своего времени, а именно, когда технологии достигнут нужного уровня зрелости.
 537  Проблема была в том, что материалы и процессы, используемые для производства фотонных чипов, были фундаментально несовместимы с процессом производства кремниевых чипов - <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%9C%D0%9E%D0%9F" target="_blank">CMOS</a>.
 538  
 539  Из возможных альтернативных решений: установка на плату отдельного чипа, преобразующего электрический сигнал в оптический, или его установка внутрь сетевого чипа, но не на сам кристалл (всё ещё требует конвертации среды).
 540  
 541  <img src="https://fs.linkmeup.ru/images/articles/buffers/sip_options.jpg" width="500">
 542  
 543  Но эта технологическая плотина смыта упорными разработками в этом направлении, и в скором будущем микроэлектронику ждут большие изменения. 
 544  
 545  Весьма <a href="https://seekingalpha.com/article/4276568-important-development-of-this-century" target="_blank">занимательная статья</a> с историей вопроса и сегодняшними реалиями.
 546  
 547  <blockquote>
 548      И прямо во время написания этой статьи 5-го марта 2х20 Intel <a href="https://newsroom.intel.com/news/intel-demonstrates-industry-first-co-packaged-optics-ethernet-switch/" target="_blank">опубликовал в своём блоге новость</a> о том, что они продемонстрировали первый свитч, в котором им удалось интегрировать свой интеловский silicon photonics в барефутовский Tofino2.
 549  
 550      <img src="https://fs.linkmeup.ru/images/articles/buffers/intel_sp.jpg" width="600">
 551      <i><a href="https://newsroom.intel.com/news/intel-demonstrates-industry-first-co-packaged-optics-ethernet-switch/" target="_blank">Источник</a>.</i>
 552  </blockquote>
 553  <hr>
 554  
 555  Теперь от вещей мирских к тому, сколько кругов пакет проходит в чипе.
 556  
 557  <a name="LOGICAL_ARCHITECTURE"></a>
 558  <h2>Логическое устройство</h2>
 559  Типичный сетевой ASIC представляет из себя конвейер, по которому пакет передаётся от входного интерфейса к выходному, а по пути с ним случаются приключения. Английский термин для этого - Pipeline.
 560  
 561  Хотя с виду и не скажешь:
 562  <img src="https://fs.linkmeup.ru/images/articles/buffers/broadcom_chipset.png" width="600">
 563  
 564  В самом общем виде Pipeline выглядит так:
 565  <img src="https://fs.linkmeup.ru/images/articles/buffers/pipeline.png" width="800">
 566  <i><a href="https://platformlab.stanford.edu/Seminar%20Talks/programming_line_rate_switches.pdf" target="_blank">Источник</a></i>.
 567  
 568  Пакет проходит через все стадии как минимум один раз, но для реализации сложных действий, вроде дополнительной инкапсуляции (VXLAN), может отправиться повторно.
 569  
 570  <a name="PARSER"></a>
 571  <h3>Parser</h3>
 572  Сначала на вход попадает пакет с неизвестным набором заголовков.
 573  Парсер разбирает все заголовки, отделяя их от собственно данных. 
 574  Если это L2-коммутатор, то его заинтересует только заголовки Ethernet и VLAN.
 575  Если это MPLS-коммутатор, он заглянет в MPLS заголовки.
 576  Для L3 соответственно IPv4 и IPv6.
 577  Если это VXLAN-терминатор, ему понадобится UDP и собственно заголовок VXLAN.
 578  Для целей ECMP и ACL, парсер заглянет в UDP/TCP.
 579  
 580  Строго говоря, на какие заголовки и какие поля в них надо смотреть, определяет фантазия разработчика.
 581  Сколько заголовков забрать? Как правило парсер вынимает фиксированное для чипа значение байтов от пакета и разделывает уже их. И это значение является одним из <a href="https://fs.linkmeup.ru/images/articles/buffers/crazyencap.jpg" target="_blank">ограничений чипа</a>.
 582  
 583  Почему парсинг заголовков задача нетривиальная рассказывается в совместном исследовании Стэнфорда и Майкрософта: <a href="http://klamath.stanford.edu/~nickm/papers/ancs48-gibb.pdf" target="_blank">Design Principles for Packet Parsers</a>.
 584  
 585  
 586  <a name="PREINGRESS_ANGINE"></a>
 587  <h3>Pre-Ingress processing</h3>
 588  Иногда логически выделяют этот блок, который совершает действия, не являющиеся ни парсингом, ни как таковым лукапом - он кладет пакет в нужный VRF, ставит внутренний Traffic Class итд.
 589  
 590  <a name="IMOCHACTION"></a>
 591  <h3>Ingress Match-Action</h3>
 592  Когда парсер, разобрался с чем он имеет дело, он передаёт заголовки дальше - в модули Match-Action.
 593  Здесь происходит lookup. Для L2 поищем MAC'и, для L3 - прошерстим FIB, для MPLS - просмотрим в LFIB.
 594  И здесь же принимается решение, что с пакетом делать дальше: пропустить/дропнуть, побалансировать, доложить CPU, в какой порт отправить, какие заголовки навесить, с каким приоритетом внутри чипа обработать, полисить ли/шейпить ли его итд.
 595  
 596  Собственно действие записано в той же таблице, в которой происходит lookup.
 597  
 598  Это если коротко. 
 599  А если чуть подлиннее, то:
 600  
 601  <h4>L2 short pipeline</h4>
 602  Приходящий L2-пакет всегда ассоциируется с VLAN. Тег VLAN проверяется через <b>VLAN Lookup Table</b>.
 603  Если VLAN lookup успешен, просматриваются таблицы: <b>VLAN STP</b>, <b>VLAN Port Bitmap</b>, <b>Port Filtering Mode</b> (PFM).
 604  Если же тег неверный, то пакет сбрасывается (или нет).
 605  После пакет проходит стандартную обработку: запомнить SRC MAC, посмотреть в таблице DST MAC, - но при этом могут быть применены дополнительные флаги, например, отправить на CPU unknown sender.    
 606  
 607  <h4>L3 short pipeline</h4>
 608  Если DST MAC является MAC'ом самого устройства, то процессинг передается в L3 модуль.
 609  Следующий шаг - Destination Lookup. Сначала используется <b>L3 Table Lookup</b>, в этой таблице как правило directly attached хосты. 
 610  Если адрес найден, то выдается index в <b>L3 Interface Table</b>, в котором выходной порт, MAC, VLAN.
 611  Если же в L3 table не найден адрес, то делается LPM поиск (Longest Prefix Match). Результат такого поиска - index в L3 Table Lookup таблице, который должен использоваться для форвардинга. После удачного поиска, чип поменяет SA/DA/VID пакета (L2), посчитает FCS, поменяет TTL и IP checksum.     
 612  
 613  
 614  <a name="TM"></a>
 615  <h3>Traffic Manager + MMU</h3>
 616  В этом блоке происходят следующие операции:
 617  <ul>
 618      <li>Постановка пакетов в очередь</li>
 619      <li>Их хранение (буферизация)</li>
 620      <li>Контроль перегрузок</li>
 621      <li>Диспетчеризация </li>
 622      <li>Репликация</li>
 623  </ul>
 624  
 625  Он состоит из двух частей - MMU и TM. Первый отвечает за управление памятью и буферами, второй - за QoS и мультикаст.
 626  
 627  <b>MMU</b> - Memory Management Unit - компонент чипа, который управляет физической памятью. 
 628  Одна из его функций аналогична MMU (блоку управления памятью) обычного компьютера - доступ приложений к физической памяти и её защита.
 629  Но список его обязанностей гораздо шире, поскольку заточен он на работу именно с пакетами. Он отслеживает как память распределяется между интерфейсами и насколько она занята в каждый момент времени, можно ли поместить пакет в буфер, если да, то в какой, как разбить его на более мелкие ячейки, ну и, конечно, как его оттуда забрать.
 630  
 631  
 632  <b>TM</b> - Traffic Manager - решает более высокоуровневые задачи - выделение очередей, помещение в них трафика, диспетчеризация, шейпинг, полисинг, управление перегрузками. В общем, всё, что относится к QoS, а так же к мультикасту.
 633  <blockquote>
 634      С мультикастом история, право, интересная (как всегда). Репликацией мультикастовых пакетов занимается блок TM. В модульных устройствах это происходит в два этапа: сначала на входном чипе создаётся столько копий, сколько выходных чипов должны получить этот пакет, а затем на выходных чипах ещё столько копий, сколько портов на этой плате должны его получить. Делается это для того, чтобы лишними копиями не загружать фабрику.
 635      Любопытный момент с буферизацией и контролем перегрузок: входной чип должен учитывать занятость выходного порта, прежде, чем отправлять пакет, потому что именно входная плата управляет <a href="#VOQ">VOQ</a>. Поскольку Traffic Manager оперирует не самими пакетами, а по сути информацией о них, то ему необязательно делать сразу копий по числу выходных портов, а достаточно записать об этом информацию в VOQ.
 636  </blockquote>
 637  
 638  MMU - это не совсем часть TM - это, скорее, два взаимодействующих друг с другом блока.
 639  
 640  Память и буферизация на сетевых устройствах - это настолько масштабная тема, что ей я посвятил отдельную статью, которая выйдет на nag.ru прямо следом за этой. В ней мы разберёмся с устройством и архитектурой памяти, видами и расположением буферов, арбитражем и поднимем самый горячий вопрос современности - что лучше: большие и маленькие буферы.
 641  
 642  <a name="EMOCHACTION"></a>
 643  <h3>Egress Match-Action</h3>
 644  Далее над заголовками пакетов могут быть совершены дополнительные акты - например, выходной ACL, туннельные инкапсуляции, сбор статистики итд.
 645  
 646  <a name="DEPARSER"></a>
 647  <h3>Deparser</h3>
 648  К этому моменту на основе результатов обработки в блоках Match-Action сформирован список новых заголовков, и он может воссоединиться с телом  пакета. 
 649  Сам пакет теперь готов в последний путь внутри этого чипа, чтобы выйти через выходной интерфейс.
 650  
 651  Кроме того, здесь может собираться дополнительная статистика о длине пакетов и сообщаться блоку TM и зеркалироваться исходящий трафик.
 652  
 653  Вышеуказанные стадии могут быть выполнены в пределах одного чипа, а могут быть и разнесены на разные.
 654  Так, в случае single-chip-коробки - все они скомпонованы в один кусочек силикона, площадью с фотку на паспорт.
 655  На модульных коробках Parser и Ingress Match-Action - это входной чип коммутации, Egress Match-Action и Deparser - выходной, TM стоит отдельно между чипом коммутации и фабрикой, и может быть разделён на Ingress и Egress. Кроме того в модульных устройствах могут существовать ещё и отдельные чипы Fabric Interface, которые разбивают пакеты на ячейки одного размера и отправляют в фабрику.
 656  
 657  <hr>
 658  
 659  <a name="PIPELINE"></a>
 660  <h2>Pipeline</h2>
 661  Пайплайном называется весь процесс доставки пакета от парсера до депарсера. 
 662  Что хорошо - можно делать несколько Match-Action подряд, например, отлукапив сначала Ethernet, потом IP, потом ещё и TCP для <a href="https://linkmeup.ru/blog/482.html">ECMP</a>.
 663  
 664  Что плохо - число этих действий строго ограничено - ASIC вещь достаточно детерминированная. 
 665  Это ведёт к тому, что некоторые вещи становятся аппаратно невозможны. К примеру, на старых Trident'ах нельзя было сделать и VXLAN и IP lookup последовательно для одного пакета. Или в другой ситуации коробка у меня не могла снять метку, сделать рекурсивный IP-lookup и навесить две новые метки.
 666  
 667  Однако у таких трудностей есть как минимум три решения:
 668      1) Второй чип. Тогда можно и разнести невозможные прежде операции на два этапа. И история знает такие решения.
 669      2) Рециркуляция. Многие чипы позволяют закольцевать выход чипа на вход и прогнать пакет дважды. Тогда на второй итерации ему можно задать уже другой набор Match-Action. Но за это придётся заплатить - удвоенной задержкой и уменьшенной полосой пропускания чипа. А ещё можно упереться и в пропускную способность самого рециркулятора.
 670      3) Купить другой чип... Другой коммутатор... Поменять работу...
 671  
 672  <a name="PROGRAMMABLE_PIPELINE"></a>
 673  <h2>Programmable Pipeline</h2>
 674  В большинстве современных коммутаторов конвейер обработки пакетов запечён производителем в софт (если не в кремний) - он фиксирован и может быть изменён только вендором чипсета.
 675  <blockquote>
 676      Не путать с Programmable ASIC. Программируемые микросхемы - уже давно реальность. Многие сетевые чипы - это ASIC с возможность программирования. Но эта возможность есть только у производителя микросхемы.
 677      Порграммируемый конвейер же - это возможность изменять логику работы чипа в определённых пределах, которую предоставляет производитель микросхемы покупателям.
 678  </blockquote>
 679  Не так давно появился Barefoot Tofino, у которого полностью программируемый Pipeline - с ним можно задавать совершенно любые условия для парсера, поля для Match и действия для Action - хоть калькулятор пишите, или распределённое хранилище на кластере коммутаторов.
 680  
 681  На сегодняшний день выпускать сетевую микросхему на рынок без возможности программирования Pipeline'а, становиться плохим тоном.
 682  Так, последние чипы Broadcom тоже уже <a href="https://www.broadcom.com/blog/trident4-and-jericho2-offer-programmability-at-scale" target="_blank">программируемы</a>.
 683  
 684  Не то чтобы теперь каждый домовой оператор кинется переписывать себе пайплайны, нанимая студентов для разработки под <a href="https://www.hotchips.org/wp-content/uploads/hc_archives/hc29/HC29.20-Tutorials-Pub/HC29.20.1-P4-Soft-Net-Pub/HC29.21.100-P4-Tutorial.pdf">P4</a> или <a href="https://nplang.org/" target="_blank">NPL</a>, но это возможность, которая позволяет вендорам железа и крупным потребителям вроде гугла быть гораздо более гибкими. 
 685  Так, например, если в вашей сети все линки p2p, то зачем вам  Ethernet? тратить на него такты ASIC'а ещё - просто выкидываем его.
 686  
 687  Правда "можно всё запрограммировать" превращается в наших реалиях "придётся всё запрограммировать". На сегодняшний день готовых конструктивных блоков, вроде парсинга Ethernet, IP, подсчёта статистики итд - не существует - всё с нуля.
 688  Если не использовать вендорские бинари, то весь Pipeline <b>придётся</b> написать самому. А если использовать, то ничего за пределами SDK не запрограммируешь.
 689  
 690  Но на большинстве современных коммутаторов всё ещё фиксированный конвейер, который выглядит примерно так:
 691  <img src="https://fs.linkmeup.ru/images/articles/buffers/single_pipeline_block.png" width="800">
 692  
 693  <b>Дальнейшее чтиво:</b>
 694  Cisco всё ещё делает классную документацию, а презентации с Cisco Live - кладезь технических сокровищ. Например, они рассказывают о бродкомовских чипах больше, чем сам Бродком (если, конечно, вы не подписали NDA кровью): <a href=" https://people.ucsc.edu/~warner/Bufs/BRKDCN-3734.pdf ">Cisco Nexus 3000 Switch Architecture</a>
 695  
 696  Вот у P4 есть неплохое описание конвейера и его программируемости: <a href="https://www.hotchips.org/wp-content/uploads/hc_archives/hc29/HC29.20-Tutorials-Pub/HC29.20.1-P4-Soft-Net-Pub/HC29.21.100-P4-Tutorial.pdf">P4 Tutorial, Hot Chips 2017</a>.
 697  
 698  Более фундаментальное и низкоуровневое описание <b>RMT</b> - Reconfigurable Match Tables, необходимых для возможности программирования: Forwarding Metamorphosis: <a href="https://www2.cs.duke.edu/courses/fall19/compsci514/papers/rmt-sigcomm2013.pdf" target="_blank">Fast Programmable Match-Action Processing in Hardware for SDN</a>.
 699  
 700  <hr>
 701  
 702  
 703  <a name="CHIPS_AND_DALES"></a>
 704  <h1>Существующие чипы</h1>
 705  До начала этого разговора следует сказать о разделении: 
 706  
 707  <ul>
 708      <li><b>Custom/In house Silicon</b>. Это то, с чего всё начиналось - чипы, разработанные внутри R&D вендоров сетевых устройств: Cisco, Juniper итд. Используются они только внутри своего же оборудования и не продаются наружу.</li>
 709  
 710      <li><b>Commodity/Merchant Silicon</b>. Чипы широкого производства. Можно их назвать рыночными или коммерческими. Это чипы, производимые сторонними компаниями: Broadcom, Innovium, Barefoot, Marvell итд.</li>
 711  </ul>
 712  <hr>
 713  
 714  <a name="MERCHANT_SILICON"></a>
 715  <h2>Commodity/Merchant Silicon</h2>
 716  Многие утверждают, что за рыночными чипами будущее (если уже не настоящее). Поэтому давайте с ними и познакомимся сначала.
 717  
 718  
 719  <a name="BROADCOM"></a>
 720  <h3>Broadcom</h3>
 721  Broadcom делает уйму разных чипов уже тыщу лет.
 722  Исторически он был одним из первых вендоров, кто начал производство высокоскоростных ASIC для сетевых устройств.
 723  В 2010-м году они выпустили свой чип Trident 64х10G, а в 2020 они начнут поставлять 64х400G.
 724  
 725  <img src="https://fs.linkmeup.ru/images/articles/buffers/broadcom_series.png" width="800">
 726  
 727  <img src="https://fs.linkmeup.ru/images/articles/buffers/broadcom_chipsets.png" width="800">
 728  
 729  Все сетевые ASIC Broadcom принадлежат двум семействам: StrataXGS и Strata DNX.
 730  
 731  <b>StrataXGS</b> - shallow-buffer чипы преимущественно для датацентровых коммутаторов. Названы в честь ракет.
 732  Это семейство делится на:
 733  Многофункциональные: Trident, Trident2, Trident2+, Trident3, Trident4, Maverick.
 734  Высокоскоростные: Tomahawk, Tomahawk+, Tomahawk2, Tomahawk3, Tomahawk4. 
 735  
 736  <b>Strata DNX</b> -  чипы с глубокими буферами, рассчитанные на маршрутизаторы, модульные коммутаторы. Скорости при этом из всех семейств наиболее низкие. Названы в честь израильских городов: Arad, Qumran, Jericho, Jericho+, Jericho2.
 737  
 738  По назначению, грубо говоря, делятся они примерно так:
 739  Trident'ы на роль ToR'ов, где нужно немного интеллекта: EVPN, VXLAN, пожирнее FIB, побольше ACL.
 740  Tomahawk'и на роль Spine'ов - быстро перекладывать много пакетиков из одного интерфейса в другой.
 741  Jericho - граница датацентра, где выход во внешний мир и DCI. Обычно тут не требуются сверхвысокие скорости, потому что основной трафик - это East-West в пределах ДЦ. Зато что здесь требуется, так это весь стек сетевых технологий, большие таблицы и глубокие буферы. VXLAN, MPLS, SR, L3VPN, различные Option'ы и всё прочее, что уже основательно забылось после <a href="https://linkmeup.ru/sdsm">СДСМ</a>.
 742  
 743  <img src="https://fs.linkmeup.ru/images/articles/buffers/jericho2.png" width="500">
 744  
 745  Но если уйти за пределы ДЦ в любую сторону - в энтерпрайз, в провайдинг, в операторов, то Broadcom свои Трезубцы позиционирует уже как универсальные чипы, которые везде и на любом уровне сети сгодятся.
 746  
 747  
 748  Почти два часа видео весьма технического склада:
 749  <ul>
 750      <li>
 751          <a href="https://www.youtube.com/watch?v=t_fwyKs1wJ0&" target="_blank">Introduction to Broadcom's Switch Portfolio</a>
 752      </li>
 753      <li>
 754          <a href="https://www.youtube.com/watch?v=2HvxxK39BXM" target="_blank">Broadcom Trident4: Disrupting the Enterprise Data Center & Campus</a>
 755      </li>
 756      <li>
 757          <a href="https://www.youtube.com/watch?v=B-COGMbaUg4" target="_blank">Broadcom Tomahawk4: Industry's Highest Bandwidth Chip</a>
 758      </li>
 759      <li>
 760          <a href="https://www.youtube.com/watch?v=JUgyaSoErlQ" target="_blank">Jericho2: Driving Merchant Silicon Revolution</a>
 761      </li>
 762      <li>
 763          <i>Хотел бы я, пожалуй, быть таким седовласым дедком, бегущим по лезвию современных технологий.</i>
 764      </li>
 765  </ul>
 766  
 767  <a name="MELLANOX"></a>
 768  <h3>Mellanox</h3>
 769  Долгое время Broadcom был единоличным властелином всех сердец датацентровых коммутаторов, что позволяло ему диктовать правила игры.
 770  Пока в 2013-м году известный производитель Inifinband-коммутаторов Mellanox не выпустил свой чип <b>Spectrum</b> и Ethernet-коммутаторы на его основе. Чип обладал производительностью 3.2 Тб/с и мог обслуживать 32 100Гб порта или 64 порта меньшей скорости.
 771  Это было внезапно.
 772  
 773  На сегодняшний день у них продаются свитчи на чипе <b>Spectrum 2</b> с мощностью 6,4 Тб/с.
 774  
 775  Оба чипа shallow-buffer, расcчитаны на коммутаторы уровней Leaf и Spine - высокая скорость, низкая задержка, не самая богатая функциональность.
 776  
 777  Ходят слухи о разработке <b>Spectrum 3</b>, от которого ожидается 12,8 Тб/с, что позволит Mellanox'у <i>почти</i> догнать Broadcom.
 778  
 779  Относить ли Mellanox к числу производителей рыночных ASIC'ов - вопрос в целом дискуссионный, но все делают именно так.
 780  Увы (а может и нет), они делает чипы только для своих коммутаторов, и не продают их наружу.
 781  
 782  В их пользу говорит то, что Mellanox - это whitebox-коммутаторы, на которое можно устанавливать сторонние операционные системы. И тем самым он участвует в конкурентной борьбе и способствует снижению цен, гонке скоростей и открытости технологий. Мимими.
 783  И кроме того, это так называемая Fabricless компания, которая не имеет заводов, а заказывает изготовление чипов на стороне.
 784  
 785  <a name="BAREFOOT"></a>
 786  <h3>Barefoot</h3>
 787  Совсем молодой игрок на рынке коммерческих ASIC'ов. В 2013-м появился, в 2016-м вышел из тени с чипом Tofino  с пропускной способностью 6,5 Тб/с.
 788  Сегодня они готовы продавать уже Tofino 2 - 12,8Тб/с
 789  
 790  Чип трудится на коммутаторах Cisco Nexus 3464C, Nexus 34180YC и Arista 7170.
 791  Чипы так же shallow-buffer и рассчитаны на спайны и лифы.
 792  
 793  Однако сегодня нельзя просто выйти на рынок и сказать "я лучше Бродкома, купите меня". Нужно что-то предложить.
 794  Barefoot предлагает <a href="#PROGRAMMABLE_PIPELINE">программируемый Pipeline</a>. Это позволяет, используя специальный язык программирования P4, полностью определять, что будет происходить с пакетом в коммутаторе. Можно написать свою логику без оглядки на существующие стандарты - выбросить Ethernet вообще, заглядывать на любую глубину заголовков, выискивать какие угодно флаги итд. Грубо говоря: если 4 бита со сдвигом от начала пакета в 16 бит равны 0110, то нужно поменять 8 бит со сдвигом 32 бита на 01001001 и отправить в интерфейс 100GE1/0.
 795  
 796  Эта гибкость позволяет как вендорам, так и (теоретически) конечным клиентам встраивать в ASIC свою логику, а не довольствоваться встроенными правилами. 
 797  Впрочем programmable pipeline - это уже совсем <a href="https://www.hotchips.org/wp-content/uploads/hc_archives/hc29/HC29.20-Tutorials-Pub/HC29.20.1-P4-Soft-Net-Pub/HC29.21.100-P4-Tutorial.pdf">другая история</a>. 
 798  
 799  Но сегодня программируемым конвейером хвастаются со сцен своих маркетинговых конференций уже почти все.
 800  
 801  <a name="MARVELL"></a>
 802  <h3>Marvell</h3>
 803  Если загуглите в Яндексе "Marvell switch ASICs", то не так уж много ссылок вас проведут туда, где вам будут рады. Marvell определённо делает интегральные микросхемы, и даже вполне определённо делает <a href="https://www.marvell.com/products/switching/prestera-px.html" target="_blank">сетевые интегральные микросхемы</a>, но назвать его фаворитом этой гонки язык не поворачивается. 
 804  
 805  У них есть три сетевых ASIC'а, вполне конкурентоспособных по заявленным функциям и мощностям:
 806  <ul>
 807      <li>Prestera CX - 12.8 Тб/с, обещают программируемый Pipeline.</li>
 808      <li>Prestera PX - по всей видимости, что-то около 1 Тб/с на роль тора.</li>
 809      <li>Falcon - 12.8 Тб/с - видел несколько упоминаний о нём, но даже на самом сайте Marvell'а информации о нём нет.</li>
 810  </ul>
 811  
 812  Пожалуй, из последних предложений вы можете сделать закономерный вывод, что больше про Marvell я ничего не знаю.
 813  
 814  <a name="INNOVIUM"></a>
 815  <h3>Innovium</h3>
 816  У Innovium, основанного выходцами из Intel и Broadcom, есть два сетевых чипа: Teralynx 5 и Teralynx 7, обещающих знакомые скорости: 6.4 и 12.8 Тб/с.
 817  Они установлены в паре цискиных коробок: <a href="https://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus3400s/sw/922/programmability/guide/b-cisco-nexus-3400-s-nx-os-programmability-guide-922/b-cisco-nexus-3400-s-nx-os-programmability-guide-92z_chapter_0100011.html" target="_blank">Nexus 3408 и 3432D</a>.
 818  
 819  <a name="OTHER_VENDORS"></a>
 820  <h3>Другие</h3>
 821  Есть и другие игроки, не снискавшие успеха среди гиперскейлеров.
 822  
 823  Один из примеров - это  <b>Cavium</b>. Приходилось слышать? Это вендор, купленный не так давно Marvell'ом и производящий NP для энтерпрайз-маршрутизаторов и (!!) базовых станций.
 824  
 825  Буквально в феврале, кстати, появилась крайне любопытная новость: <a href="https://www.servethehome.com/ubiquiti-unifi-usw-leaf-overview-not-review-48x-25gbe-6x-100gbe-switch/">Ubiquiti UniFi USW-Leaf Overview 48x 25GbE and 6x 100GbE Switch</a>.
 826  Современный Leaf-коммутатор с 30ГБ SSD за $2000.
 827  Немного пораскрутив публикацию, я обнаружил, что внутри сокрыт некий Taurus, разработанный <b>Nephos</b> - дочерней компанией MediaTek. И у них даже вполне любопытное <a href="http://www.nephosinc.com/nps/products/">портфолио</a>.
 828  С такой ценой, возможно, появляется новый игрок на рынке.
 829  
 830  Для полноты картины приведу так же парочку малоизвестных компаний, которые производят низкоскоростные чипы коммутации на FPGA:
 831  <ul>
 832      <li><a href="https://www.ethernitynet.com/products/socs/network-co-processors/" target="_blank">Ethernity Networks</a></li>
 833      <li><a href="https://www.arrivetechnologies.com/ipcorecarrierethernet" target="_blank">Arrive Technologies</a></li>
 834  </ul>
 835  
 836  Нашлось, кстати, тут место и для отечественных разработок.
 837  Например, вот такого малыша вместе с отладочным комплектом можно приобрести себе для доморощенного L2-коммутатора:
 838  <ul>
 839      <li><a href="https://ic.milandr.ru/products/interfeysnye_mikroskhemy/ethernet/1923kkh028" target="_blank">Миландр 1923КХ028</a>.</li>
 840  </ul>
 841  
 842  <hr>
 843  
 844  <a name="CUSTOM_SILICON"></a>
 845  <h2>Custom silicon</h2>
 846  Настало время поговорить про вендоров сетевого оборудования, которые всё ещё в состоянии содержать свой гигантский штат R&D.
 847  Но именно с них когда-то всё и начиналось, рыночных чипов не было, а каждый производитель разрабатывал и изготавливал свои сетевые процессоры и ASIC'и.
 848  И это сложно сегодня, потому что когда другие могут сосредоточиться только на аппаратной обвязке вокруг чипа и софте, другим приходится выделять ресурсы на фундаментальные разработки. Стоит отдать дань уважения вендорам за это.
 849  <blockquote>
 850      Занимательный факт. Во время санкционной войны лета 2019 у Huawei был невоображаемый сценарий вылететь с рынка - американская компания Broadcom заморозила поставку ASIC'ов для их линейки CloudEngine.
 851      Всё, конечно, завершилось хорошо.
 852      Но почти одновременно с этим вышел модульный коммутатор CE16800 на чипах собственного производства, и обещали пицца-боксы. 
 853      Ясное дело, что занимались они этой разработкой уже довольно давно, наверно, лет 5.
 854      Однако сей факт намекает на то, что, возможно, не так уж и плоха идея вкладываться в разработку своих чипов.
 855  </blockquote>
 856  
 857  Очевидно, что и у них не по одному типу ASIC'ов, развивающихся планомерно и интегрирующихся во все новые устройства - они делятся по сериям железок, по их ролям. Не забываем и о том, насколько большие компании любят поглощения.
 858  
 859  Я не собираюсь здесь погружаться в детали, перечисляя все их виды и возможности. Пройдёмся только поверхностно по наиболее известным из них.
 860  
 861  <a name="ZHDUNIPER"></a>
 862  <h3>Juniper</h3>
 863  В первую очередь это, конечно, легендарный <b><a href="https://www.juniper.net/us/en/local/pdf/whitepapers/2000331-en.pdf" target="_blank">ASIC Trio</a></b>, который бьётся внутри всех маршрутизаторов MX и коммутаторов EX.
 864  Марат Бабаян в своё время написал <a href="https://habr.com/ru/post/307696/" target="_blank">прекрасную статью</a> о его работе.
 865  
 866  Внутри их магистральных коробок - <b>ASIC Express</b> (ZX, TRITON).
 867  А датацентровые коммутаторы, вроде QFX 10000, заряжены чипом <b>Q5</b>.
 868  
 869  <a name="AHUWEI"></a>
 870  <h3>Huawei</h3>
 871  У этих ребят тоже давняя история разработки своих чипов.
 872  Когда-то начиналось с интеловских асиков, потом были эксперименты с чипом Marvell, а потом масть пошла. И новые поколения сетевых процессоров стали появляться один за другим.
 873  Они отличаются от поколения к поколению, от класса к классу, от серии к серии.
 874  Но для внешней людей их объединили в две линейки: 
 875  <ul>
 876      <li><b>Ascend</b> для датацентров</li>
 877      <li><b>Solar</b> для провайдеров и операторов</li>
 878  </ul>
 879  
 880  <a name="SISCO"></a>
 881  <h3>Cisco</h3>
 882  Можно сказать, что новейшие линейки программируемых чипов это:
 883  <ul>
 884      <li><b>Cisco Silicon One</b>, установленный в линейку <a href="https://www.cisco.com/c/en/us/products/routers/8000-series-routers/index.html#~services" target="_blank">Cisco 8000</a>.</li>
 885      <li><b>UADP</b> - Unified Access Data Plane - программируемый ASIC для каталист и некоторых нексусов</li>
 886      <li><b>QFP</b> - Quantum Flow Processor - для ASR и ESP</li>
 887  </ul>
 888  
 889  А в глубине веков начинается такой, зоопарк, что я просто кину несколько, даже не пытаясь докопаться до глубин:
 890  <ul>
 891      <li>Sasquatch, Strider - каталисты 29хх и 3ххх</li>
 892      <li>K1, K2, K5, K10 - каталисты 4000 и 4500</li>
 893      <li>EARL1>EARL8 - ещё разнообразные каталисты и Nexus 7000</li>
 894      <li>Monticello - Nexus 3548</li>
 895      <li>Big Sur - Nexus 6000</li>
 896      <li>F3 - Nexus 7000/7700</li>
 897      <li>nPower X1 - сетевой процессор для NCS.</li>
 898  </ul>
 899  
 900  <a href="https://www.ciscolive.com/c/dam/r/ciscolive/us/docs/2016/pdf/BRKARC-3467.pdf" target="_blank">Замечательные слайды</a>, кстати, о производстве цискиных чипов и их устройстве.
 901  
 902  И <a href="https://people.ucsc.edu/~warner/Bufs/BRKDCN-3734.pdf" target="_blank">слайды</a> про использование рыночных чипов в нексусах и их (чипов) архитектуру.
 903  
 904  <a name="OURS"></a>
 905  <h3>Отечественная микроэлектроника</h3>
 906  Похвастаться терабитами, увы не можем, но вот есть 88Гб/с L3-коммутатор от "Цифровых решений" с поддержкой 1Гб/с, 10 Гб/с портов на собственном FPGA: <a href="https://dsol.ru/telecommunication/switches/" target="_blank">Феникс-1/10G</a>.
 907  Обещали на базе этого FPGA потом выпустить ASIC, но чем история закончилась неизвестно.
 908  
 909  
 910  <hr>
 911  <a name="MERCHANTS_VS_CUSTOMERS"></a>
 912  <h2>Merchant vs Custom</h2>
 913  Несмотря на всё вышеперечисленное, вендоры, конечно же, используют рыночные чипы. Те же Nexus (3xxx) или NCS5500 используют бродкомовские, инновиумские и барефутовские чипы.
 914  Juniper QFX5xxx и Huawei Cloud Engine - бродкомовские.
 915  
 916  <h3>За</h3>
 917  Что заставляет их использовать рыночные вместо собственных?
 918  Ну тупо проще взять готовенькое, впаять в плату и продать. Пресловутый Time To Market - хотя и с оговорками.
 919  Экономия ресурсов на разработке такой сложной штуки, как микросхема по технологии 7нм с производительностью 25,6 Тб/с.
 920  Компания, которая сосредоточена на разработке только чипов, развивает их гораздо быстрее как в плане производительности, так и функциональности.
 921  Кто-то уже постарался и собрал информацию о том, какие функции нужны клиентам и все их реализовал
 922  
 923  <h3>Против</h3>
 924  В таком случае, что вендоров заставляет делать свои чипы, раз всё так хорошо?
 925  
 926  А вот и оговорки с TTM - внести изменения в свой ASIC и выпустить следующую исправленную версию - проще и быстрее, чем запускать бюрократический маховик большой сторонней компании. 
 927  
 928  Кроме того до недавних пор не существовало программируемых рыночных чипов - вендору нужно было полагаться на фиксированный пайплайн или весьма урезанный SDK, предоставляемый поставщиком.
 929  И производители сетевого оборудования сами начали учиться это делать, чтобы новые функции внедрять не перепаиванием асиков, а релизом новой версии софта.
 930  
 931  Кроме того, едва ли бродком возьмётся за реализацию проприетарных протоколов или других функций, которые нужны одному покупателю - это же массовый рынок.
 932  
 933  Никуда не спрятать вопрос безопасности. Тут своё родное - знаешь каждую закладочку.
 934  
 935  Не всегда может устроить реализация QoS на рыночных чипах. На своих можно замутить любые мутки.
 936  
 937  Свой SDK - свои разработчики, которые его поправят. Чужой SDK - чужие баги, давайте сдавать, решать, тестировать - времени требуется значительно больше.
 938  
 939  В общем, хорошо, что мы находимся сейчас в ситуации высококонкурентного рынка, и мы каждые полтора-два года можем получать ещё более мощные коммутаторы по ещё более низким ценам. 
 940  
 941  <hr>
 942  Ну а если вдруг вам надоели все эти наши Клозы и масс-маркет-силиконы, и душа просит чего-то совсем экзотического, то вот почитайте, как строятся <a href="https://fuse.wikichip.org/news/3293/inside-rosetta-the-engine-behind-crays-slingshot-exascale-era-interconnect/" target="_blank">суперкомпьютеры для High Performance Computing'а</a>.
 943  
 944  <hr>
 945  
 946  
 947  <a name="LINKS"></a>
 948  <h1>Полезные ссылки</h1>
 949  В этот раз хоть под кат убирай. Но, поверьте, я оставил тут только самые хорошие источники, прочитанные лично моими глазами и отобранные лично моими руками.
 950  
 951  <ul>
 952      <li>
 953      <b>Архитектура сетевых устройств</b>
 954      <ul>
 955          <li>
 956              <a href="https://www.cisco.com/c/dam/global/hr_hr/assets/ciscoconnect/2013/pdfs/Anatomy_of_Core_Network_Elements_Josef_Ungerman.pdf" target="_blank">Anatomy of Internet Routers</a>
 957          </li>
 958          <li>
 959              <a href="https://people.ucsc.edu/~warner/Bufs/BRKDCN-3734.pdf" target="_blank">Cisco Nexus 3000 Switch Architecture</a>
 960          </li>
 961          <li>
 962              <a href="https://habr.com/ru/post/307696/" target="_blank">Juniper Hardware Architecture</a>
 963          </li>
 964          <li>
 965              <a href="https://www.amazon.com/Hardware-Defined-Networking-Brian-Petersen/dp/B075LY9CNM" target="_blank">Hardware Defined Networking</a>
 966          </li>
 967          <li>
 968              <a href="https://linkmeup.ru/blog/401.html" target="_blank">Как сделать коммутатор?</a>
 969          </li>
 970          <li>
 971              <a href="https://linkmeup.ru/blog/312.html" target="_blank">Сети для самых маленьких. Часть четырнадцатая. Путь пакета</a>
 972          </li>
 973      </ul>
 974      </li>
 975      <li>
 976      <b>Архитектура ASIC</b>
 977      <ul>
 978          <li>
 979              <a href="https://www.youtube.com/watch?v=Ti3t9OAZL3g" target="_blank">Packet Pushers. Understanding ASICs For Network Engineers (Pete Lumbis)</a>
 980          </li>
 981          <li>
 982              <a href="https://www.ciscolive.com/c/dam/r/ciscolive/us/docs/2016/pdf/BRKARC-3467.pdf" target="_blank">Cisco Enterprise ASICs</a>
 983          </li>
 984          <li>
 985              <a href="https://people.ucsc.edu/~warner/Bufs/CSG-DNX-Switching-J2%20Feb%2016%202018.pdf" target="_blank">Broadcom Ships Jericho2</a>
 986          </li>
 987          <li>
 988              <a href="https://www.nextplatform.com/2019/12/12/broadcom-launches-another-tomahawk-into-the-datacenter/" target="_blank">Broadcom Launches Another Tomahawk Into The Datacenter</a>
 989          </li>
 990          <li>
 991              <a href="https://platformlab.stanford.edu/Seminar%20Talks/programming_line_rate_switches.pdf" target="_blank">Programmable Pipeline</a>
 992          </li>
 993          <li>
 994              <a href="https://seekingalpha.com/article/4276568-important-development-of-this-century" target="_blank">The Most Important Development Of This Century</a>
 995          </li>
 996          </ul>
 997      </li>
 998      <li>
 999      <b>Программируемость</b>
1000      <ul>
1001          <li>
1002              <a href="http://klamath.stanford.edu/~nickm/papers/ancs48-gibb.pdf" target="_blank">Design Principles for Packet Parsers</a>.
1003          </li>
1004          <li>
1005              <a href="https://www2.cs.duke.edu/courses/fall19/compsci514/papers/rmt-sigcomm2013.pdf" target="_blank">Fast Programmable Match-Action Processing in Hardware for SDN</a>
1006          </li>
1007          <li>
1008              <a href="https://www.hotchips.org/wp-content/uploads/hc_archives/hc29/HC29.20-Tutorials-Pub/HC29.20.1-P4-Soft-Net-Pub/HC29.21.100-P4-Tutorial.pdf">P4 Tutorial, Hot Chips 2017</a>
1009          </li>
1010      </ul>
1011      </li>
1012      <li>
1013      Ну и немного мотивационных видео от Broadcom
1014      <ul>
1015          <li>
1016              <a href="https://www.youtube.com/watch?v=t_fwyKs1wJ0&" target="_blank">Introduction to Broadcom's Switch Portfolio</a>
1017          </li>
1018          <li>
1019              <a href="https://www.youtube.com/watch?v=2HvxxK39BXM" target="_blank">Broadcom Trident4: Disrupting the Enterprise Data Center & Campus</a>
1020          </li>
1021          <li>
1022              <a href="https://www.youtube.com/watch?v=B-COGMbaUg4" target="_blank">Broadcom Tomahawk4: Industry's Highest Bandwidth Chip</a>
1023          </li>
1024          <li>
1025              <a href="https://www.youtube.com/watch?v=JUgyaSoErlQ" target="_blank">Jericho2: Driving Merchant Silicon Revolution</a>
1026          </li>
1027      </ul>
1028      </li>
1029  </ul>
1030  <hr>
1031  
1032  <h1>Заключение</h1>
1033  Что ещё сказать после семидесяти пяти тысяч символов? Только то, что многое из того, что вы прочитали в этот раз - частные случаи, которые могут быть (и будут) несправедливых в других ситуациях.
1034  Как только сетевой инженер смещает свой фокус со стандартизированных протоколов в область обработки пакетов, он падает в пропасть бесконечных компромиссов, где нет универсальных ответов, нет RFC, нет исчерпывающих мануалов. И чем <a href="https://pikabu.ru/story/naskolko_gluboka_yeta_peshchera_7041398" target="_blank">глубже</a> он падает, тем страшнее становится разнообразие деталей и нюансов.
1035  
1036  Следом за этой статьёй об интеллекте сети выйдет следующая, посвящённая памяти сети и буферам, где я разберу, как пакет в сети сохранить, но не похоронить.
1037  Собственно с короткой заметки о буферах и начались эти две циклопические публикации. Сначала разбираешься как хранятся пакеты в чипе, потом смотришь, где располагается память, потом как устроен кристалл микросхемы, следом узнаёшь про SerDes'ы и Silicon Photonics. Здесь бы и тормознуть, но верёвка уже оборвалась. 
1038  <hr>
1039  
1040  
1041  <h1>Спасибы</h1>
1042  <ul>
1043      <li>Андрею Глазкову (glazgoo) за рецензию и дельные замечания о коммерческих чипах</li>
1044      <li>Михаилу Соколову (insektazz) за ликбез по устройству чипов, SerDes и Silicon Photonics</li>
1045      <li>Александру Клименко (v0lk) за обнаружение точек роста в вопросах Pipeline'ов</li>
1046      <li>Дмитрию Афанасьеву (fl0w) за дополнения ко всем частям статьи</li>
1047      <li>Артёму Чернобаю за КДПВ</li>
1048  </ul>