Everyone is talking about SmartNICs but without ever answering one simple question: what is a “SmartNIC” and what do they do? Now a NIC of course stands for a “Network Interface Card”; practically speaking a NIC is a PCIe card that plugs into server or storage box to enable connectivity to an Ethernet network. A SmartNIC goes beyond simple connectivity, and implements network traffic processing on the NIC that would necessarily be performed by the CPU in the case of a foundational NIC.
Some vendors’ definition of a SmartNIC is focused entirely on the implementation. But this is problematic as different vendors have different architectures and thus a SmartNICs can be ASIC, FPGA, and System-on-a-Chip (SOC) based. Naturally vendors who make just one kind of NIC seem to insist that only the type of NIC they make should qualify as a SmartNIC. :
There are various tradeoffs between these different implementations with regards to cost, ease of programming, and flexibility. An ASIC is very cost effective and may deliver the best price performance, but it suffers from limited flexibility. While an ASIC-based NIC (like the Mellanox ConnectX-5) can have a programmable data path that is relatively simple to configure, ultimately functionality will have limitations based on what functions are defined within the ASIC, and that can prevent certain workloads from being supported. An FPGA NIC (like the Mellanox Innova-2 Flex) by contrast is highly programmable and with enough time and effort can be made to support almost any functionality relatively efficiently (within the constraints of the available gates). However FPGAs are notoriously difficult to program and expensive. So for the more complex use cases, the SOC (like the Mellanox BlueField SmartNIC) provides what appears to be the best SmartNIC implementation option: good price performance, easy to program, and highly flexible.
But focusing on how a particular vendor implements a SmartNIC doesn’t really do justice to addressing exactly what it is capable of or how it should be ideally architected. In the case of Mellanox we actually have products that could be classified as ‘SmartNIC’ based on each of these architectures – and in fact customers use each of these products for different workloads depending on their needs. So the focus on implementation – i.e. ASIC vs. FPGA vs. SoC – reverses the ‘form follows function’ philosophy that underlies the best architectural achievements.
So rather than focusing on implementation, I think this PC Magazine entry gives a pretty good working definition of what makes a NIC a SmartNIC:
SmartNIC: A network interface card (network adapter) that offloads processing tasks that the system CPU would normally handle. Using its own on-board processor, the SmartNIC may be able to perform any combination of encryption/decryption, firewall, TCP/IP and HTTP processing. SmartNICs are ideally suited for high-traffic Web servers.
There are two things I like about this definition. One it focuses on the function more than the form, but secondly it hints at this form with the statement “…using its own on-board processor … to perform any combination of …” network processing tasks. So the embedded processor is key to achieving the flexibility to perform almost any networking function. I would just modernize that definition in two ways: First SmartNICs might also perform network, storage or GPU virtualization. Second, SmartNICs are also ideally suited for telco, security, machine learning, software-defined storage, and hyperconverged infrastructure servers—not just Web servers.
So let’s look at some of the functions that network adapters can support and use the ability to accelerate different workloads to differentiate three categories of NICs:
Here I’ve defined three classes of NICs: foundational NIC, intelligent NIC (iNIC), and SmartNIC, based on their ability to accelerate specific functionality. The basic, or foundational NIC simply moves network traffic and has few or no offloads, other than possibly SRIOV and basic TCP acceleration, so it doesn’t save any CPU cycles and can’t offload packet steering or traffic flows. At Mellanox we don’t even sell a foundational NIC any more with our ConnectX adapter family featuring a programmable data path and accelerate a whole range of functions that first became important in public cloud use cases. For this reason I’ve defined this type of NIC as an “intelligent NIC” (iNIC) although today on-premise enterprise, telco and private clouds are just as likely as public cloud providers to need this type of programmability and acceleration functionality. So another name for it could be “smart NIC” or “smarter NIC” without the capital “S.”
In many cases customers tell us they need SmartNIC capabilities that are being offered by a competitor with either an FPGA or a NIC combined with custom, proprietary processing engines. But when customers really look at the functions they need for their specific workloads, ultimately they decide that the ConnectX family of iNICs provides all the function, performance, and flexibility of other so-called SmartNICs at a fraction of the power and cost. So by the definition of SmartNIC that some competitors use – our ConnectX NICs are indeed SmartNICs, though we might call them intelligent NICs or smarter NICs. Our FPGA NIC (Innova) is alsoa SmartNIC in the classic sense, and our SoC NIC (using BlueField) is the smartest of SmartNICs, to the extent that we could call them Genius NICs
So what is a SmartNIC? A SmartNIC is a network adapter that accelerates functionality and offloads it from the server (or storage) CPU.
But as to how one should build a SmartNIC and which SmartNIC is the best for each workload—the devil is in the details and it’s important to dig into exactly what data path and virtualization accelerations are available and how they can be used. I’ll do this in my next blog.