Skip to content

Cnuas Virtual AI HPC Infrastructure Datasheet

Item Value
Part Cnuas Virtual AI HPC Infrastructure
Type Software-emulated virtual AI and HPC infrastructure
Version Platform 2026.07 (fd0f896-dirty)
Status Active development
Product cnuas.io

1. Overview

Cnuas (Irish Gaeilge for "cluster") is the Cnuas Virtual AI HPC Infrastructure, a 100% software-emulated virtual AI and HPC infrastructure for teaching and developing HPC, AI, and RDMA networking (RoCEv2 and native InfiniBand) without physical GPU clusters or InfiniBand switches. Every device is a QEMU/userspace model presented to unmodified guest software, so a virtual GPU or NIC behaves like the real part it emulates. Cnuas is developed under the internal Cnuas engineering programme.

It composes four emulated device families, CnuasSwitch (TOR fabric switch), CnuasNIC (RDMA NIC), CnuasGPU (SIMT accelerator), and CnuasLink (GPU fabric), over a forked QEMU and a forked Linux kernel, orchestrated as VMs on a single Ubuntu management host.

Key features

  • Full RDMA fabric, RoCEv2 and native InfiniBand, end to end.
  • SIMT virtual GPUs with a CUDA-style runtime and multi-architecture SIMD backends.
  • Separate GPU-to-GPU fabric (CnuasLink) modelling an NVSwitch/NVLink-class interconnect.
  • In-switch Subnet Manager, the fabric comes up without external opensm.
  • Runs on a single commodity x86-64 host; no special hardware required.
  • Consistent management plane spanning CLIs, JSON control sockets, and a browser dashboard.
  • Multi-rack topology modelling on the Open Compute Project Open Rack v3 reference.

2. Rack-level block diagram

Two-rack reference deployment. Each rack has a CnuasSwitch top-of-rack (TOR) for the RoCE/IB fabric and a rack-local CnuasLink switch for the GPU fabric. VMs attach to both fabrics; racks are joined by an inter-TOR link.

flowchart LR subgraph RACK_A["Rack A (ORv3, 24 OU)"] direction TB TOR_A["cnuas-vswitchd A<br/>(CnuasSwitch TOR)"] LINK_A["cnuasgpu-link-switchd A<br/>(CnuasLink, rack-local)"] VMA0["vm-a0"] --- TOR_A VMA1["vm-a1"] --- TOR_A VMA2["vm-a2"] --- TOR_A VMA0 -. GPU peer .- LINK_A VMA1 -. GPU peer .- LINK_A VMA2 -. GPU peer .- LINK_A end subgraph RACK_B["Rack B (ORv3, 24 OU)"] direction TB TOR_B["cnuas-vswitchd B<br/>(CnuasSwitch TOR)"] LINK_B["cnuasgpu-link-switchd B<br/>(CnuasLink, rack-local)"] VMB0["vm-b0"] --- TOR_B VMB1["vm-b1"] --- TOR_B VMB2["vm-b2"] --- TOR_B VMB0 -. GPU peer .- LINK_B VMB1 -. GPU peer .- LINK_B VMB2 -. GPU peer .- LINK_B end TOR_A ===|inter-TOR fabric link| TOR_B classDef tor fill:#dbeafe,stroke:#1e40af,color:#1e3a8a classDef link fill:#fce7f3,stroke:#9d174d,color:#831843 classDef vm fill:#fef3c7,stroke:#b45309,color:#78350f class TOR_A,TOR_B tor class LINK_A,LINK_B link class VMA0,VMA1,VMA2,VMB0,VMB1,VMB2 vm

2.1 Rack elevation (ORv3, 24 OU)

Logical OU (OpenU) slot assignment for a single rack. CnuasSwitch (TOR) and the rack-local CnuasLink switch occupy the top OUs; compute VMs fill the remainder. Two such racks form the reference deployment above.

flowchart TB subgraph RACK["Rack A - Open Rack v3 (24 OU)"] direction TB OU24["OU 24 - CnuasSwitch TOR (cnuas-vswitchd) - RoCE/IB fabric"] OU23["OU 23 - CnuasLink switch (cnuasgpu-link-switchd) - GPU fabric"] OU22["OU 22 - Management / control plane (cnuas-webui, cnuas-cli)"] OU21["OU 20-21 - Power shelf / busbar (ORv3)"] C1["OU 16-19 - compute vm-a0 (CnuasNIC + CnuasGPU)"] C2["OU 12-15 - compute vm-a1 (CnuasNIC + CnuasGPU)"] C3["OU 08-11 - compute vm-a2 (CnuasNIC + CnuasGPU)"] C4["OU 04-07 - compute vm-a3 (CnuasNIC + CnuasGPU)"] C5["OU 01-03 - storage / spare"] OU24 --> OU23 --> OU22 --> OU21 --> C1 --> C2 --> C3 --> C4 --> C5 end classDef tor fill:#dbeafe,stroke:#1e40af,color:#1e3a8a classDef link fill:#fce7f3,stroke:#9d174d,color:#831843 classDef mgmt fill:#ede9fe,stroke:#6d28d9,color:#4c1d95 classDef pwr fill:#e5e7eb,stroke:#4b5563,color:#1f2937 classDef comp fill:#fef3c7,stroke:#b45309,color:#78350f class OU24 tor class OU23 link class OU22 mgmt class OU21,C5 pwr class C1,C2,C3,C4 comp

3. Host / node block diagram

Inside a single physical host, the switch daemons run in host userspace; each VM is a QEMU process exposing a cnuas-vnic (NIC) and a cnuasgpu (GPU) PCIe device. Devices connect to the daemons over UNIX-domain sockets (UDS).

flowchart TB subgraph HOST["HOST - cnuas1 (bare-metal, Ubuntu 24.04)"] direction TB subgraph DAEMONS["Userspace daemons"] direction LR CNUASSWITCH["cnuas-vswitchd<br/>(CnuasSwitch)<br/>10 SEQPACKET ports<br/>FDB + classifier + DCB + SM<br/>/var/run/cnuas/"] CNUASLINK["cnuasgpu-link-switchd<br/>(CnuasLink)<br/>8 SEQPACKET ports<br/>NVSwitch-equivalent<br/>/var/run/cnuaslink/"] end subgraph VMA["QEMU vm-a"] direction TB VMA_NIC["-device cnuas-vnic<br/>(RoCE-IB NIC)"] VMA_GPU["-device cnuasgpu<br/>(GPU + CnuasLink endpoint)"] VMA_KMOD["Guest kernel:<br/>cnuas_net.ko + cnuas_ib.ko<br/>cnuasgpu.ko"] VMA_USR["Guest userspace:<br/>libcnuas-rdmav34.so<br/>libcnuasrt.so<br/>perftest / pingpong / apps"] VMA_NIC --- VMA_KMOD VMA_GPU --- VMA_KMOD VMA_KMOD --- VMA_USR end subgraph VMB["QEMU vm-b"] direction TB VMB_NIC["-device cnuas-vnic"] VMB_GPU["-device cnuasgpu"] VMB_KMOD["Guest kernel:<br/>cnuas_net.ko + cnuas_ib.ko<br/>cnuasgpu.ko"] VMB_USR["Guest userspace:<br/>libcnuas-rdmav34.so<br/>libcnuasrt.so"] VMB_NIC --- VMB_KMOD VMB_GPU --- VMB_KMOD VMB_KMOD --- VMB_USR end CNUASSWITCH ===|UDS port_0| VMA_NIC CNUASSWITCH ===|UDS port_1| VMB_NIC CNUASLINK -.->|UDS port_0| VMA_GPU CNUASLINK -.->|UDS port_1| VMB_GPU end classDef daemon fill:#dbeafe,stroke:#1e40af,color:#1e3a8a classDef vm fill:#fef3c7,stroke:#b45309,color:#78350f classDef nic fill:#dcfce7,stroke:#166534,color:#14532d classDef gpu fill:#fce7f3,stroke:#9d174d,color:#831843 class CNUASSWITCH,CNUASLINK daemon class VMA,VMB vm class VMA_NIC,VMB_NIC nic class VMA_GPU,VMB_GPU gpu

4. Guest software stack

Per-VM stack, from application down to the QEMU device backends. The RDMA path uses stock libibverbs, which dlopen()s the CnuasNIC provider; the GPU path uses libcnuasrt over the cnuasgpu.ko char device.

flowchart TB subgraph VM["VM - vm-a (Ubuntu 24.04 guest)"] direction TB subgraph APP["Application layer"] direction LR APP_PERF["perftest, pingpong"] APP_USER["user code:<br/>MPI / libfabric / NCCL / UCX"] end subgraph LIB["Userspace libraries"] direction LR LIB_VERBS["libibverbs.so.1<br/>(stock rdma-core)"] LIB_PROV["libcnuas-rdmav34.so<br/>(CnuasNIC provider)"] LIB_CART["libcnuasrt.so + libcnuasdev.so<br/>(CnuasGPU runtime)"] end subgraph KMOD["Guest kernel modules"] direction LR KMOD_NET["cnuas_net.ko<br/>netdev driver"] KMOD_IB["cnuas_ib.ko<br/>IB-core RDMA driver"] KMOD_GPU["cnuasgpu.ko<br/>GPU char driver<br/>/dev/cnuasgpu0"] end subgraph QEMU["QEMU device backends"] direction LR QEMU_NIC["cnuas_vnic.c<br/>PCIe + MMIO + IRQ<br/>UDS to CnuasSwitch"] QEMU_GPU["cnuasgpu PCI device<br/>+ CnuasLink endpoint<br/>UDS to CnuasLink"] end APP_PERF --> LIB_VERBS APP_USER --> LIB_VERBS APP_USER --> LIB_CART LIB_VERBS --> LIB_PROV LIB_PROV --> KMOD_IB LIB_VERBS --> KMOD_IB LIB_CART --> KMOD_GPU KMOD_IB --> KMOD_NET KMOD_NET --> QEMU_NIC KMOD_GPU --> QEMU_GPU end classDef app fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d classDef lib fill:#e0e7ff,stroke:#3730a3,color:#1e1b4b classDef kmod fill:#fef3c7,stroke:#92400e,color:#78350f classDef qemu fill:#dcfce7,stroke:#166534,color:#14532d class APP_PERF,APP_USER app class LIB_VERBS,LIB_PROV,LIB_CART lib class KMOD_NET,KMOD_IB,KMOD_GPU kmod class QEMU_NIC,QEMU_GPU qemu

5. Platform specifications

Parameter Value
Emulation model QEMU custom PCIe devices + userspace switch daemons
Host OS Ubuntu 24.04 LTS (x86-64)
Guest kernel Linux fork cnuas-v6.19.0 (6.19.0-cnuas+)
Hypervisor QEMU fork cnuas-qemu-v0.1.0
Inter-VM data transport UNIX domain sockets (SOCK_SEQPACKET); ivshmem shared memory (GPU fast path)
Management transport JSON over UNIX/TCP sockets
Reference topology Open Compute Project Open Rack v3 (ORv3), up to 24 OU
Fabric switch ports 10 per CnuasSwitch (8 fabric + uplink + console)
GPU fabric ports 8 per CnuasLink (configurable, max 32)
Build system Bazel (daemons/CLI/WebUI/packaging), Make (kernel, QEMU)
Languages C (GNU C, daemons + kernel), Python 3.11+ (tooling), C++ (QEMU models)
Versioning Semantic versioning per component (cnuas-vMAJOR.MINOR.PATCH)

6. Component summary

Component Part / daemon Kernel Userspace Datasheet
Fabric switch cnuas-vswitchd , (host daemon) cnuas-cli, WebUI CnuasSwitch
RDMA NIC cnuas-vnic cnuas_net.ko, cnuas_ib.ko libcnuas-rdmav34.so CnuasNIC
GPU cnuasgpu cnuasgpu.ko (/dev/cnuasgpuN) libcnuasrt.so, libcnuasdev.so, cnuassmi CnuasGPU
GPU fabric cnuasgpu-link-switchd , (host daemon) cnuaslink-cli CnuasLink

6.1 Component versions

Live from each submodule's git tag at documentation build time:

Component Version (git tag)
Cnuas (superproject) fd0f896-dirty
CnuasSwitch v0.1.0-8-gd630c1f
CnuasNIC v0.1.0-26-gbc3a3c9
CnuasGPU v0.2.0-14-ga157b80-dirty
CnuasLink v0.1.0-3-g812f464
Linux kernel fork cnuas-v6.19.0-1-g05f573120df3
QEMU fork cnuas-qemu-v0.1.0-8-ge169f7b1f8

7. Management and control plane

Interface Description
cnuas-cli Switch/fabric management CLI (port status, SM, DCB)
cnuaslink-cli CnuasLink GPU fabric management CLI
cnuassmi / cnuas-smi GPU inventory and telemetry (nvidia-smi style)
cnuas-tools VM lifecycle: image/package build, vm up/down/ssh/console/lab
cnuas-webui Browser dashboard (FastAPI backend + web frontend)
Control sockets JSON over UNIX socket (/var/run/cnuas/, /var/run/cnuaslink/)

8. Host requirements

Requirement Minimum Recommended
CPU x86-64 with AVX2 AVX-512 (for CnuasGPU compute)
Memory 16 GB 64 GB+ (scales with VM count)
Virtualization KVM enabled KVM + nested virt
OS Ubuntu 24.04 LTS Ubuntu 24.04 LTS
Toolchain GCC (GNU C), Make, Bazel, Python 3.11+, pytest + mkdocs-material for docs

9. Roadmap summary

Feature availability at a glance. Full Epic/Task breakdown, status, and the GitHub Projects board are in the Product Roadmap.

Workstream Available today Planned
CnuasNIC (RDMA NIC) RoCEv2 + native IB, RC/UD/SMI/GSI, atomics, SRQ, multicast, ICRC, in-switch SM interop SA path-record, PMA/perfquery, opensm compat
CnuasSwitch (fabric) 10-port RoCE/IB, DCB, FDB/LFT, in-switch Subnet Manager, telemetry Switch-side SA/PMA alignment
CnuasGPU (accelerator) SIMT runtime, libcnuasrt/libcnuasdev, AVX2/AVX-512 SGEMM, multi-GPU Backend dlopen split, device-backend refactor, CnuasIR, FPGA
CnuasLink (GPU fabric) Frame protocol, FDB, discovery, sysfs link state, CLI Collective offload, bandwidth modelling
Platform / tooling VM lifecycle CLI, packaging, submodule split, CI Documentation pass

10. Ordering / integration information

Item Value
Superproject repo PacketFive/cnuas (git submodule superproject)
Submodules linux, qemu, src/cnuasnic, src/cnuasswitch, src/cnuasgpu, src/cnuaslink
License Apache-2.0 with custom amendment rider (see repository LICENSE)
Quick start ./build_and_test.sh
Documentation https://cnuas.io/docs/
Project site https://cnuas.io

11. Revision history

Revision Date Notes
A 2026-07-05 Initial platform datasheet
B 2026-07-05 Added rack/host/stack diagrams, detailed specs, component driver map
C 2026-07-05 Added rack elevation, live version table, roadmap summary