Alex Forencich
Ulrich Langenbach
Corundum
From a NIC to a Platform for In-Network Compute
Circuit-Switching Research at UCSD
Networked Systems, IPs and Devices at MLE
PCs
Switch
FPGAs
Packet
Capture
PC
ZCU106
QSGMII
PHY
FPGA
FPGA
FPGA
X86 X86
3
Introduction
Network Interface Controller (NIC) connects
software to the network
NIC functionality is evolving
Line rate increases
Offload networking functions from CPU to NIC
More general: in-network compute
Offload compute to programmable NICs, switches, etc.
Not limited to network stack
Network
Host
Application
OS
Driver
NIC
Application
4
Corundum
Open-source, FPGA-based NIC and platform for in-network compute
A high performance “reference” NIC
Extensible: application block for implementation of custom features
Key applications: hardware prototyping of experimental networks/protocols,
custom compute offload
5
High-Level Features of Corundum
Open-source, high-performance, FPGA-based NIC
PCIe gen 3 x16, multiple 10G/25G/100G Ethernet ports
Fully custom, high-performance DMA engine; Linux driver
Application block for custom logic
Access to network traffic, DMA engine, on-card RAM, PTP time
Fine-grained traffic control
10,000+ hardware queues, customizable schedulers
PTP timestamping and time synchronization
Management features (FW update, etc.)
Wide device support (Xilinx and Intel)
Source code: https://github.com/corundum/corundum
6
Corundum Block Diagram
7
Corundum Block Diagram
8
Corundum Block Diagram
9
Corundum Block Diagram
10
Corundum Block Diagram
11
Corundum Block Diagram
12
Corundum Block Diagram
13
Fine-grained traffic control
10,000+ transmit queues
Each queue is an independent channel between SW and HW
Classify in SW, control in HW
Fine-grained, per-flow or per-destination control
128 bits/queue -> 4096 queues in 2 URAM on US+
Transmit scheduler
Determines which queue to transmit from
Default scheduler is round robin
Can be used to implement traffic shaping, rate limiting, etc.
14
Ports and Interfaces
Hardware support for
multiple uplinks
Multiple physical ports
appear as single OS-level
interface
Ports have separate
schedulers
Migrate or stripe flows across
ports by changing scheduler
settings
Host
Data
Driver
IF Port
Driver
IF Port
NIC
Host
Data Driver
IF
Port
Port
NIC
Traditional NIC: assignment in software
Corundum NIC: assignment in hardware
15
Modular DMA engine
DMA engine split between interface and client modules
Interface connects to host – PCIe, AXI, etc.
Client modules form internal ports – AXI stream, memory-mapped AXI
Clients connected to interface with dual port RAMs
Support both servers (PCIe) and SoCs (AXI) with same core logic
16
Applications
Offload application-specific processing
Datapath for novel transmit schedulers
Instrument Corundum for performance measurements
Direct transceiver access permits physical-layer
measurements and development of new wire protocols
Use core logic as a packet DMA engine in a larger system
Discuss two applications:
TDMA for microsecond circuit switching
PHY layer BER measurement for link characterization
17
Application: TDMA
Scheduler can control queues based on PTP time
Enables sub-microsecond-resolution TDMA
TDMA off
94 Gbps
200 us period, 50% duty cycle TDMA schedule
Guard time 2 us
Using TDMA schedule, can run iperf through
pinwheel switch
Initial test with old FW: 3 Gbps on 10 Gbps link with
low packet loss
18
Application: link-level characterization
In situ link-level measurements
BER measurement capability integrated
into NIC
Measure link-level performance from
vantage point of every NIC in datacenter
Supports time-domain BER
Synchronized over network via PTP
Measure every path through switch
Heat map represents signal at one
receiver through pinwheel switch
19
Open Source
Corundum core logic 100% open-source Verilog
Including 10G/25G MACs, PCIe DMA, AXI, AXI stream, etc.
Device hard IP used for interfacing – PCIe, 100G MAC, serdes
Simulation uses open-source tools
Cocotb + Icarus Verilog
Eventually will use cocotb + Verilator (blocked on Verilator bugs)
Wrote cocotb extensions for AXI, Ethernet, and PCI express
Tox + pytest for CI
Makefiles for build automation
20
Short term work / contributions by MLE
1. Xilinx Zynq UltraScale+ MPSoC Integration
a. Run Linux on the PS ARM connected to the NIC
b. Support some additional platforms, e.g. Fidus Sidewinder-100 and
Trenz TE0808 based
MPSOCPS PL
4x ARM A53
2x ARM R5
ARM
Interconnect
(~ AXI4-MM)
Interface
AXI
DMA
DRAM IF
DRAM
MAC
MAC
MAC
Port
Interface
Port
Interface
Port
Linux Driver
21
Short term work / contributions by MLE
1. Xilinx Zynq UltraScale+ MPSoC Integration (WIP)
2. Intel Device Support
a. Kicked-off by the initial intel support for Stratix 10 MX
b. Optimize RTL to efficiently infer the intended RAM structures
c. Utilize a price-efficient Stratix 10 GX FPGA
22
Short term work / contributions by MLE
1. Xilinx Zynq UltraScale+ MPSoC Integration (WIP)
2. Intel Device Support (WIP)
3. 1 GbE interface support
a. SGMII reference design for ZCU106 (PR pending rebase)
23
Short term work / contributions by MLE
1. Xilinx Zynq UltraScale+ MPSoC Integration (WIP)
2. Intel Device Support (WIP)
3. 1 GbE interface support (WIP)
4. DPDK Driver
to provide one DPDK device per mqnic interface
24
Short term work / contributions by MLE
1. Xilinx Zynq UltraScale+ MPSoC Integration (WIP)
2. Intel Device Support (WIP)
3. 1 GbE interface support (WIP)
4. DPDK Driver (WIP)
5. Add a Traffic Shaper (customization)
a. Enforce per queue (queue group) bandwidth assignments
b. Based on the bucket shaping algorithm
c. Implements a scheduler controller to complement other available
schedulers, e.g. the current upstream round robin scheduler
25
Long-term goals
Core features
RDMA support in core datapath
Variable-length descriptor support
Unified DMA address space (on-card DRAM/HBM)
Device and board support
Improve Intel device support
SoC support
Move board-dependent code from driver to soft core
Simplify porting process
Software
Improved interface to application logic
DPDK driver
26
Thank you
Corundum source code available on GitHub:
https://github.com/corundum/corundum