Skip to content

Linux bare-metal bring-up

Linux is a supported platform alongside FreeBSD 14.3. Bring-up is the same shape on both: reserve hugepages, isolate the worker cores, hand the adapters to the data plane, then start the daemon and confirm the plan it logs.

Distro choice

Rocky or AlmaLinux 9 for telco and regulated environments with long support and tuned real-time profiles; Ubuntu 24.04 LTS for the newest kernel and broadest out-of-box NIC support. The deciding factor is the adapter: confirm its poll-mode driver is supported on the kernel you are standing up, and that you can either pass the device through or expose it via SR-IOV. Either distro carries the isolation and hugepage tooling the data plane needs.

Packages and toolchain

Add protobuf-c only if you are building the gNMI wire transport.

shell
# Rocky / Alma 9
dnf groupinstall -y "Development Tools"
dnf install -y meson ninja-build python3-pyelftools numactl numactl-devel \
               libpcap-devel pkgconf-pkg-config clang tuned

# Ubuntu 24.04 LTS
apt-get install -y build-essential meson ninja-build python3-pyelftools \
                   libnuma-dev libpcap-dev pkg-config clang tuned

Kernel boot parameters

Isolate the worker cores from the scheduler and from IRQs, enable the IOMMU for VFIO, and reserve 1 G hugepages. Leave MAIN and CONTROL cores to the kernel and the control threads. The core lists below follow a six-lcore reference plan — reconcile against show topology after first boot.

text
# Intel
intel_iommu=on iommu=pt \
isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3 irqaffinity=0,1,4,5 \
default_hugepagesz=1G hugepagesz=1G hugepages=8

# AMD: replace the first line with  amd_iommu=on iommu=pt

Verify isolation and hugepages

Check the cmdline took effect, the isolated set matches your worker cores, hugepages are reserved, and the IOMMU came up.

shell
cat /proc/cmdline
cat /sys/devices/system/cpu/isolated     # -> 2-3
grep -i hugepages_total /proc/meminfo
dmesg | grep -i -e DMAR -e IOMMU | head

mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages

Binding NICs

Adapters attach through vfio-pci. The shipped bind script detects the family, excludes the management interface and applies the right attach model — worth using rather than hand-binding, because a mis-bound slot is the most common reason a first start finds no ports.