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>