Verschiedene Hersteller versprechen mit SmartNICs bahnbrechende Fortschritte im Bereich der Netzwerkdatenverarbeitung. Denn über Server-Performance oder Netzwerkdurchsatz allein lassen sich Anforderungen moderner Rechenzentren oft nicht mehr bewältigen. Die intelligenten Netzwerkkarten lassen sich programmieren und nehmen dem Betriebssystem Teile der TCP/IP-Verarbeitung ab.
Den größten Schub haben SmartNICs durch das 3-D-Rendering erhalten. Dies ist insofern eine interessante Aufgabe, als dass die zu erledigenden Berechnungen im Allgemeinen ähnlich sind. Daraus folgt, dass sie sich durch hochoptimierte Prozessoren, die mit ihrer einfachen Architektur schneller als normale CPUs arbeiten, geradezu ideal abarbeiten lassen. Hier ergibt sich eine Analogie zum IT-Betrieb, denn die im TCP/IP- beziehungsweise Netzwerkbereich auftretenden Aufgaben sind ebenfalls sehr ähnlich sowie einfach. Dabei gilt es, Payloads zu verpacken und mit Headern zu versehen sowie eingehende Pakete zu verteilen. Gelegentlich fällt darüber hinaus noch das Berechnen einer Prüfsumme an – kurzum nichts, worüber ein heutiger Prozessor in die Knie ginge.
Bei Überlegungen zu SmartNICs ist es empfehlenswert, ein wenig Hintergrundwissen zu den verschiedenen Prozessortypen zu haben. Als Erstes haben wir den General-Purpose-Prozessor, die gute, alte "CPU", also eine auf ARM oder x86 basierte Recheneinheit, die beliebig komplizierte Programme ausführt. Der FPGA (Field Programmable Gate Array) ist ein "Feld" aus Logikgattern (Schaltkreise für boolesche Funktionen), das ein als Bit- oder Byte-Stream bezeichnetes Programm konfiguriert. Ein FPGA nimmt dann entweder eine als "Softcore" bezeichnete CPU oder aber eine beliebige andere Digitalschaltung auf. Zu guter Letzt gibt es ASIC (Application Specific Integrated Circuit). Dies ist im Allgemeinen eine Gatterschaltung, die eine bestimmte Aufgabe wie zum Beispiel das Encodieren von Filmmaterial sehr schnell erledigt, aber nicht programmierbar ist.
TCP beschleunigen
Die einfachste Art der Kommunikation bei TCP/IP ist das "Bit-Banging". Dies beschreibt, dass die CPU permanent einen physischen Pin ein- und ausschaltet, um eine nicht in Hardware vorhandene Schnittstelle zu emulieren. Eine fortschrittlichere Methode besteht darin, das physische Ein- und Ausschalten der Pins stattdessen an eine dedizierte Hardware-Einheit auszulagern. An dieser Stelle lässt sich der Haupt-CPU Arbeit abnehmen, indem ein NIC die TCP-Kommunikation bis zu einem gewissen Grad in Hardware erledigt. Dazu ist es übrigens nicht unbedingt notwendig, einen "vollwertigen" ASIC zu verwenden – aufgrund der vergleichsweise geringen Komplexität bietet sich auch eine kleinere CPU an, die kostengünstig, energiesparend und auf dem NIC sitzend für die Verarbeitung der Daten sorgt.
Den größten Schub haben SmartNICs durch das 3-D-Rendering erhalten. Dies ist insofern eine interessante Aufgabe, als dass die zu erledigenden Berechnungen im Allgemeinen ähnlich sind. Daraus folgt, dass sie sich durch hochoptimierte Prozessoren, die mit ihrer einfachen Architektur schneller als normale CPUs arbeiten, geradezu ideal abarbeiten lassen. Hier ergibt sich eine Analogie zum IT-Betrieb, denn die im TCP/IP- beziehungsweise Netzwerkbereich auftretenden Aufgaben sind ebenfalls sehr ähnlich sowie einfach. Dabei gilt es, Payloads zu verpacken und mit Headern zu versehen sowie eingehende Pakete zu verteilen. Gelegentlich fällt darüber hinaus noch das Berechnen einer Prüfsumme an – kurzum nichts, worüber ein heutiger Prozessor in die Knie ginge.
Bei Überlegungen zu SmartNICs ist es empfehlenswert, ein wenig Hintergrundwissen zu den verschiedenen Prozessortypen zu haben. Als Erstes haben wir den General-Purpose-Prozessor, die gute, alte "CPU", also eine auf ARM oder x86 basierte Recheneinheit, die beliebig komplizierte Programme ausführt. Der FPGA (Field Programmable Gate Array) ist ein "Feld" aus Logikgattern (Schaltkreise für boolesche Funktionen), das ein als Bit- oder Byte-Stream bezeichnetes Programm konfiguriert. Ein FPGA nimmt dann entweder eine als "Softcore" bezeichnete CPU oder aber eine beliebige andere Digitalschaltung auf. Zu guter Letzt gibt es ASIC (Application Specific Integrated Circuit). Dies ist im Allgemeinen eine Gatterschaltung, die eine bestimmte Aufgabe wie zum Beispiel das Encodieren von Filmmaterial sehr schnell erledigt, aber nicht programmierbar ist.
TCP beschleunigen
Die einfachste Art der Kommunikation bei TCP/IP ist das "Bit-Banging". Dies beschreibt, dass die CPU permanent einen physischen Pin ein- und ausschaltet, um eine nicht in Hardware vorhandene Schnittstelle zu emulieren. Eine fortschrittlichere Methode besteht darin, das physische Ein- und Ausschalten der Pins stattdessen an eine dedizierte Hardware-Einheit auszulagern. An dieser Stelle lässt sich der Haupt-CPU Arbeit abnehmen, indem ein NIC die TCP-Kommunikation bis zu einem gewissen Grad in Hardware erledigt. Dazu ist es übrigens nicht unbedingt notwendig, einen "vollwertigen" ASIC zu verwenden – aufgrund der vergleichsweise geringen Komplexität bietet sich auch eine kleinere CPU an, die kostengünstig, energiesparend und auf dem NIC sitzend für die Verarbeitung der Daten sorgt.
Dieses sogenannte "Offloading" von TCP-Stack-Operationen ist seit den frühen Zweitausendern möglich. Ein Beispiel dafür ist Dell, das 2004 zwei klassische Arten der Entlastung propagierte [1]. Maßnahme eins beschäftigte sich damals damit, mehr oder weniger umfangreiche Checksum-Berechnungen vom Hauptprozessor in Richtung NIC zu verlagern. Punkt zwei ist der "Large Send Offload" (LSO), bei dem ein Netzwerk-Chip einen mehr oder weniger großen Puffer mitbringt, in den der Hostprozessor die zu sendenden Daten hineinkopiert. Das Paketieren und sonstige Aufgaben, die MTU und Co. einbringen, erledigt dann die Hardware.
Im Bereich des TCP-Offloading gibt es für Administratoren eigentlich nicht viel zu tun: Wer nicht die billigsten Netzwerk-Controller kauft, sondern auf Enterprise-Technologie setzt, bekommt das Feature normalerweise kostenlos mitgeliefert. Achten Sie lediglich darauf, es in den Treibern und Netzwerkeinstellungen zu aktivieren.
Die Kommunikation zwischen NIC und Hostprozessor erfolgt nicht durch Polling, sondern durch Interrupts, was recht viele CPU-Ressourcen beansprucht (Starten und Abtragen der Interrupt-Service-Routine). In diesem Umfeld schob im Laufe der letzten Jahre insbesondere das Unternehmen XILINX eine ganze Gruppe von FPGA-Patenten und -Technologien auf den Markt, die sich um die Erledigung von immer mehr Aufgaben auf dem NIC kümmerten. Neben der – oft eher minimalen – Einsparung bei der Rechenleistung profitierten diese Systeme davon, dass erstens die Latenz für die Kommunikation wegfällt und sich zweitens der Hauptprozessor Interrupts erspart.
Parallel dazu optimierten die Hersteller die Netzwerk-Stacks ihrer Betriebssysteme immer stärker, um das früher notwendige mehrstufige Kopieren der angelieferten Daten – erst aus dem Puffer in den Kernel, dann in den Netzwerkstack, dann zur Applikation – zu eliminieren.
Alternative TCP-IP-Stacks
Für die maximale Performance der Hardware ist der in Linux und Co. enthaltene TCP-IP-Stack nicht optimal. Unter [2] findet sich eine Liste von Alternativen, deren Einsatz Sie vor der Anschaffung zusätzlicher Hardware evaluieren sollten. Das im Hause TENCENT entwickelte F-Stack [3] ist dabei besonders interessant.
TCP-Berechnungen verringern
Eine sehr interessanter Ansatz ist das im Quellcode bereitstehende AccelTCP [4], das entweder eine Agilio-LX- oder -CX-Netzwerkkarte voraussetzt. Die von den Entwicklern durchgeführte Analyse ist vor allem deshalb interessant, weil sie sich auch mit der Frage auseinandersetzt, was eigentlich an der Verarbeitung von Netzwerkkommunikation teuer ist. Das durchaus überraschende Ergebnis besagt, dass das Aufbauen und Abtragen der TCP-Verbindungen für den Großteil der Last sorgen. Langlebige Verbindungen reduzieren also die CPU-Workload.
Die Innovation des Verfahrens ist, dass es dem SmartNIC nicht die komplette Verarbeitung der TCP/IP-Verbindung aufbürdet. Stattdessen unterteilen die Entwickler die zu erledigenden Aufgaben in zwei Gruppen namens "Central" und "Peripheral". Letztere waren dabei Jobs, die sich primär um die Erfüllung der Bedingungen des TCP/IP-Protokolls kümmerten und für die Applikationslogik wenig Belang aufwiesen. Der Sinn der Offloading-Strategie besteht darin, die Housekeeping-Aktivitäten so gut wie möglich am SmartNIC durchzuführen und so Interrupt-Bearbeitung und andere Rechenleistungsfresser einzusparen. Interessanterweise setzt die Nutzung von AccelTCP die Mithilfe des Entwicklers voraus: Auf Seiten der Applikation steht ein dediziertes TCP-IP-Interface zur Verfügung, dessen Einbindung unbedingt erforderlich ist.
In Tests gegen den hochoptimierten MTCP-Stack [5] erreicht die Software dabei eine wesentliche Steigerung der für Redis zur Verfügung stehenden Rechenleistung. Nutzte ein im Kernel-Thread positionierter TCP-Stack 56 Prozent seiner Rechenleistung für das Protokoll, so fiel dieser Anteil bei Nutzung von AccelTCP auf nur noch 14 Prozent.
Aus wirtschaftlicher Sicht ist die Studie ebenfalls interessant, weil sie verschiedene Xeon-Prozessoren gegen eine mit 1750 US-Dollar bepreiste Agilio-LX-Karte verglich. Die Kosteneffizienz ergab dabei einen Wert von 1 zu 1,93 – das Hinzufügen des auf Netronome-Technologie basierenden SmartNIC führte aus Sicht der Hardware-Anschaffungskosten zu einer wesentlich reduzierten Total Cost of Ownership. Da die vorliegende Studie den Energieverbrauch nicht berücksichtigte, ist davon auszugehen, dass die Verwendung eines SmartNIC in vielen Fällen nicht unerhebliche weitere Kosteneinsparungen auf diesem Gebiet mit sich bringt.
SmartNICs programmieren
Der angelsächsische Bereich [6] spricht nur dann von einem SmartNIC, wenn es sich um eine Netzwerkkarte handelt, die nach der Auslieferung zusätzliche Software aufnimmt. Zur Realisierung einer derartigen Netzwerkkarte stehen dem Hardwarehersteller drei Möglichkeiten zur Verfügung. Einerseits lässt sich ein ganzes Rudel Rechenkerne wie kleine ARM- oder RISC-V-Kerne auf eine Karte packen und ihnen die gemeinsame Interaktion mit dem physischen Ethernet-Transciever ermöglichen. Vorteil dieser Architektur ist, dass die Programmierung oft direkt in C erfolgt.
Möglichkeit Nummer zwei ist die Verwendung von FPGAs. Der Entwickler des Bitstreams hat die Möglichkeit, sowohl Softcores als auch Gatterschaltungen auszuführen. Angemerkt sei, dass der Administrator hier in die Rolle des Anwenders gedrückt wird – Verilog und Co sind Programmiersprachen, deren Komplexität nicht zu unterschätzen ist.
Zu guter Letzt gibt es den Begriff des FPC (Flow Processing Core). Im Prinzip handelt es sich um einen ASIC-Chip, der sich in einer mehr oder weniger proprietären Programmiersprache mit Kommandos versorgen lässt. Angemerkt sei, dass Systeme dieser Architekturtypen zwei und drei solche Chips und mitunter auch einen oder mehrere Mikrocontroller mitbringen, die als eine Art "Master Controller" agieren. Ein derartiger Chip hat mit den eigentlichen Netzwerkpaketen gar nichts zu tun und kümmert sich stattdessen darum, beispielsweise FPGAs mit einem Bitstream zu versorgen oder die für die ASICs notwendigen Startbedingungen zu schaffen.
SmartNIC-Ansätze unterschiedlicher Hersteller
Bei den auf dem Markt befindlichen Implementierungen geht es immer darum, der Haupt-CPU erstens Rechenzyklen und zweitens Latenz abzunehmen. Alle hier besprochenen Systeme verbinden die Ethernet-Controller direkt mit dem Rechenelement, der Umweg über den PCIe-Bus entfällt ersatzlos. Schon diese Optimierung sorgt in vielen Fällen für eine Performancesteigerung, da die Interrupt-Verarbeitung eine rechenleistungsteure Operation darstellt.
Als ersten Kandidaten wollen wir uns Netronome ansehen, dessen Karten uns schon als Basis für die Realisierung des beschleunigten TCP/IP-Stacks begegnet sind. Auch wenn Netronome im Laufe der letzten Monate Kartenversionen mit einem ARM-Prozessor auf den Markt gebracht hat, nutzt der Hauptteil der Netzwerkkarten des Unternehmens nach wie vor einen als NFP4000 bezeichneten hauseigenen Prozessor für Netzwerkaufgaben. Die in Bild 1 gezeigte Architektur offenbart, dass wir es mit zwei auf bestimmte Aufgaben dedizierten Kerntypen zu tun haben. Die beiden Teile des ASIC-Chips lassen sich vom Administrator oder Treiberentwickler mit P4-Skripten versorgen und teilen sich die Arbeit analog zu Textur- und Geometrie-Shader auf einer GPU auf.
Der Grafikkarten-Hersteller NVIDIA hat im Laufe der letzten Jahre nicht nur ARM zugekauft, sondern erwarb auch das SmartNIC-Haus Mellanox. Dessen einst auf MIPS-Prozessoren basiertes und mittlerweile auf ARMv8-Chips umgestelltes Bluefield 2 ist ein General-Purpose-Prozessor, der seine ARM-Rechenkerne allerdings direkt mit der Ethernet-PHY verbindet und den Hostprozessor somit entlastet. Interessant ist, dass NVIDIA bisher mehr oder weniger konsequent auf C als Programmiersprache setzt. Dies ist insofern eine Besonderheit, als dass die anderen Anbieter auf Sonder-Rechenkerne setzen, die auf das Programmiersystem P4 zugeschnitten sind.
Broadcom ist neben seinen Raspberry-Pi-Aktivitäten auch einer der Marktführer im Bereich klassischer NICs. Der BCM58800-SmartNIC besteht dabei aus acht ARMv8-Kernen, die er mit bis zu 3 GHz taktet. Der Hersteller spendiert seinem Prozessor allerdings noch eine als TruFlow bezeichnete Beschleunigungsengine, die sich um die Abarbeitung von P4-Workloads kümmert. Zum Zeitpunkt der Drucklegung findet sich über diese Technologie allerdings nur, dass sie existiert – was TruFlow treibt, ist selbst in der Elektronikpresse nicht genau herauszufinden.
Damit sind wir auch schon bei den großen Chiphäusern angekommen. Intel realisiert seinen N3000-SmartNIC in einer Mehrchip-Architektur. Zwei der schon aus normalen NICs bekannten Controller sind dabei mit einem FPGA verbunden, der mehr oder weniger beliebige Rechenaufgaben erledigt. Intel verspricht in der Dokumentation dabei eine ganze Gruppe von Funktionen, die sogar bis zur Realisierung von Kernnetzwerken für 5G-Systeme reichen. Angelsächsische Quellen zweifeln allerdings, inwiefern die FPGA-Software für diese Anwendungsfälle ausgereift ist.
Der Anbieter Xilinx wählt ebenfalls einen auf FPGAs basierten Ansatz, spendiert dem Endanwender allerdings wesentlich mehr Gatterzellen, was zu einer höheren Flexibilität der in den FPGAs programmierbaren Gatterschaltungen beiträgt.
Dieser kurze Überblick zeigt, dass es eine Vielzahl konkurrierender Architekturen gibt. Analog zur Entwicklung der Cross-Plattform-Frameworks gab es auch im Bereich der SmartNICs Standardisierungsversuche, die mittlerweile zu einigen etablierten Programmiersystemen führten. Das mit Abstand populärste ist dabei ein als P4 bezeichnetes System (Programming Protocol-Independent Packet Processors) und geht auf den Namen eines Papers zurück, das im Jahr 2014 erstmals veröffentlicht wurde. Im Grunde genommen ist ein P4-Programm eine Art Datenfluss-Kontrollsoftware, die die Weiterleitung von Paketen durch das NIC-Interface beschreibt. P4 arbeitet dabei im Allgemeinen auf Ebene vier des OSI-Modells. Eine Schnelleinführung in die Programmierung und Arbeit mit P4 liefert [7].
Mit dem DPDK [8] steht eine alternative Programmierumgebung zur Verfügung, die sowohl die Arbeit auf OSI-Level vier als auch auf Level sieben erlaubt. Im Prinzip handelt es sich dabei um eine Art Kernel-Bypass, der das Umgehen des Linux-Kernel-Stacks erlaubt. Interessant ist in diesem Zusammenhang vor allem, dass sich DPDK nicht auf die Host-Seite beschränkt. Unter [9] gibt es beispielsweise einen Compiler, der die Zusammenarbeit zwischen DPDK und P4 auf der Hardware erleichtert.
Bewährt bislang nur im Enterprise
Nun haben wir einen Überblick dessen, was an SmartNIC-Technologie am Markt zur Verfügung steht. Wie so oft gilt allerdings auch hier, dass nicht alles, was beim Großrechner-Ausstatter des Vertrauens erhältlich ist, in Ihr Datacenter gehört. SmartNICs sind derzeit – insbesondere ob der kleinen Verkaufsvolumen – wesentlich teurer als herkömmliche Netzwerkkarten. Zudem zeigen sich die Hersteller durch die Bank im Bezug auf Preise nicht besonders kommunikativ.
Doch die wichtigste Überlegung ist, ob Ihre Applikation von einem SmartNIC spürbar profitiert. Angemerkt sei in diesem Zusammenhang, dass sie bei der Bewertung pro und contra SmartNIC nicht ausschließlich an die CPU-Zyklen denken dürfen – in vielen Fällen bringt die Verwendung eine reduzierte Systemlatenz.
Eine Entscheidung für das Deployment von SmartNICs ist allerdings nur die halbe Miete. Ein SmartNIC ist ein Produkt, das mit sehr hohem Beratungsaufwand einhergeht. Schon aus diesem Grund ist es unbedingt erforderlich, mit mehreren Lieferanten Kontakt aufzunehmen, Angebote einzuholen und Proofs of Concept durchzuführen.
Für kleine Unternehmen gilt leider, dass SmartNICs Produkte sind, deren Deployment eine Zusammenarbeit mit dem Hersteller voraussetzt. Daraus folgt oft, dass ein SmartNIC-Hersteller nur wenig Interesse hat, teure Außendienstler zur Befriedigung eines Kunden einzusetzen, der am Ende vielleicht zehn Chips abnimmt.
Zu guter Letzt sei noch darauf hingewiesen, dass SmartNICs unserer Ansicht nach außerhalb von Enterprise-Rechenzentren immer noch ein "unerprobtes" Feld sind. Rechnen Sie im Rahmen des Deployments also mit der einen oder anderen Hackelei und lassen Sie sich nicht auf zu enge Deadlines festnageln.
Fazit
SmartNICs bringen mehr Leistung ins RZ und unterstützen zudem Software-definierte Netzwerke optimal. Eine Verlockung, der so mancher IT-Verantwortliche nur schwer widerstehen kann. Gleichzeitig ist dies aber noch ein recht junger Markt und für kleine und mittlere Unternehmen stellen sich die Fragen, ob sich die Anschaffungskosten rechnen und ob das IT-Team die technischen Herausforderungen der SmartNIC-Integration leisten kann.