← Home

Cavium CN6640-SNIC10E

The octnic kernel module and boot tooling: oct0 and oct1 as ordinary Linux netdevs.

Status: working. Both ports link at 10 G on a DAC and pass traffic bidirectionally. The card boots with no serial cable and the host brings both NICs up automatically at boot. Hardware-validated on one reference card, never in the field.

This is the Linux page of the Cavium CN6640-SNIC10E docs. The overview, the FAQ and the list of reference documents are on the general page.

Requirements

Quick start

git clone https://github.com/nicologiuliani6/cavium-cn6640-snic10e-octeon-ii-nic
cd cavium-cn6640-snic10e-octeon-ii-nic

# 1) the card's OS image, prebuilt: octboot looks for it here in the repo root
curl -LO https://github.com/nicologiuliani6/cavium-cn6640-snic10e-octeon-ii-nic/releases/latest/download/openwrt-octeon-generic-snic10e-initramfs-kernel.bin

# 2) the host side: builds + installs octnic (DKMS), drops the configs, enables autostart
sudo ./install.sh

# 3) first time on this machine only: persist the card's u-boot env (serial cable, once)
sudo ./scripts/card-prep-hostboot.sh

# 4) every boot, no serial: pushes the image over PCIe, brings up oct0 + oct1
sudo systemctl start cavium-nic
ip -br addr show oct0

Step 4 is what the cavium-nic service runs at every host boot, so after step 3 the card comes up on its own. Steps 1 to 3 are once per machine. The manual equivalent is sudo ./octboot followed by sudo modprobe octnic ports=2; both ports are then ordinary netdevs.

install.sh is also the guided installer described on the general page: if the card is not provisioned yet it offers step 3 itself and asks before writing anything.

Day to day

More in USAGE: module parameters, benchmarking and troubleshooting.

Performance

porthost → peerpeer → host
oct0 (xaui0)9.71 Gb/s8.10 Gb/s
oct1 (xaui1)9.81 Gb/s8.82 Gb/s

iperf3 -P8, MTU 9000, fresh card boot, one port at a time. Both ports loaded in the same direction aggregate to about 10.5 Gb/s: the host-PIO 64 B-TLP wall on a Gen2 ×4 link. Full duplex is the open front: 13.5 Gb/s aggregate with UDP, but TCP suffers under the RX loss. Numbers, method and the tuning behind them: PERFORMANCE.

Troubleshooting

Details in USAGE, troubleshooting.

Known limitations

Questions, or testing on your own board?

Open an issue or a discussion on the repository, or email me@nicologiuliani.site. Results from other boards are especially welcome: everything here was developed against a single card.