The New Frontier of Industrial Real-time Control

Industry 4.0 demands uncompromising precision and speed. Traditional industrial networks often struggle with the dynamic, virtualized environments of modern cloud-native infrastructures. This is where orchestrating Time-Sensitive Networking (TSN) with eBPF and Kube-Virt becomes crucial. Specifically, eBPF TSN orchestration Kube-Virt offers a powerful solution for deterministic, low-latency communication in virtualized industrial control systems. It enables real-time performance even in complex, distributed architectures.

What is eBPF TSN orchestration Kube-Virt?

This innovative approach combines three powerful technologies to achieve real-time capabilities within cloud-native industrial environments. At its core, it addresses the challenge of running hard real-time applications, traditionally confined to specialized hardware, on standard virtualized platforms. Think of it like a high-precision railway switchyard: Kube-Virt provides the robust tracks for critical industrial applications, TSN acts as the strict timetable ensuring trains run exactly on schedule, and eBPF is the intelligent signal system dynamically adjusting switches to prevent delays and collisions, guaranteeing precise packet delivery. It solves the problem of non-deterministic latency and jitter in virtualized industrial communication. Industrial IoT architects, platform engineers, and embedded systems developers are rapidly adopting this method. It directly supersedes previous solutions reliant on expensive, proprietary hardware or less flexible real-time extensions.

Why eBPF TSN orchestration Kube-Virt Matters in 2026

The shift towards virtualized and cloud-native infrastructure at the industrial edge brings significant challenges, particularly for time-critical operations. The integration of eBPF TSN orchestration Kube-Virt directly addresses several acute pain points in this evolving landscape.

Firstly, it resolves the issue of unpredictable network latency in virtual machines running industrial applications. Standard Ethernet lacks the determinism required for tasks like robotic control or synchronized motion. Secondly, it drastically reduces hardware vendor lock-in, allowing industrial facilities to run diverse real-time operating systems (RTOS) and proprietary control logic on common Kubernetes infrastructure. For instance, companies like Siemens and Rockwell Automation, while having their own solutions, also benefit from the flexibility this open approach offers.

This combined technology delivers substantial performance improvements, often achieving sub-millisecond latencies for critical control loops, which can represent a 50-70% reduction in jitter compared to non-TSN virtualized setups. It also offers cost advantages by reducing the need for specialized, expensive real-time hardware. Furthermore, by consolidating workloads onto Kube-Virt, security patching and deployment become more streamlined, improving the overall security posture and developer experience (DX). This allows platform engineers to manage both IT and OT workloads from a unified control plane.

Core Concepts and Architecture

This section delves into the foundational technologies and their synergy.

Introduction to Time-Sensitive Networking (TSN) principles and standards (IEEE 802.1Q)

Time-Sensitive Networking (TSN) is a collection of IEEE 802.1Q standards extending standard Ethernet to provide deterministic communication. These standards introduce mechanisms for bounded latency, low-loss, and guaranteed bandwidth. TSN ensures that critical data packets arrive on time, every time, by managing network traffic with precise scheduling and shaping.

TSN works by implementing traffic classes, time synchronization (IEEE 802.1AS), scheduled traffic (IEEE 802.1Qbv), and preemption (IEEE 802.1Qbu/br). Network devices apply these rules to prioritize real-time traffic over best-effort data. For example, a factory robot’s control signals will always take precedence over an IP camera’s video stream.

# Example: Configuring a basic qdisc (Quality of Service discipline) for TSN-like behavior
# This is illustrative, a full TSN setup requires specialized hardware and kernel modules.
# It prioritizes traffic on interface eth0 with a priority queue.
sudo tc qdisc add dev eth0 root handle 1: htb default 12
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
sudo tc class add dev eth0 parent 1: classid 1:12 htb rate 10mbit ceil 100mbit
sudo tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 80 0xffff flowid 1:12
# This simple setup diverts HTTP traffic (port 80) to a lower priority class.

A common misconception is that TSN entirely replaces standard Ethernet. Instead, TSN enhances existing Ethernet infrastructure, providing deterministic capabilities alongside traditional best-effort traffic. It adds specific features, rather than creating a completely new network layer.

eBPF for traffic shaping, scheduling, and deterministic packet forwarding in Linux kernels

Extended Berkeley Packet Filter (eBPF) allows safe, programmable code execution within the Linux kernel, without requiring kernel module compilation. It offers an incredibly powerful and flexible way to observe, filter, and manipulate network packets directly at the kernel level. For TSN, eBPF programs can enforce precise traffic shaping and scheduling policies.

eBPF works by loading small, sandboxed programs into the kernel at various hook points, such as network interface drivers or system calls. These programs can then inspect packet headers, modify packet data, or even drop packets based on complex logic. This direct kernel interaction enables ultra-low latency decision-making for real-time traffic. It can be used to implement custom TSN-like scheduling mechanisms or prioritize critical data flows dynamically.

// Example eBPF program snippet (simplified for illustration)
// This program would be compiled with clang/LLVM and loaded via libbpf.
// It demonstrates a basic packet drop based on a specific protocol.
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <bpf/bpf_helpers.h>

SEC("xdp")
int xdp_drop_udp(struct xdp_md *ctx) {
    void *data_end = (void *)(long)ctx->data_end;
    void *data = (void *)(long)ctx->data;
    struct ethhdr *eth = data;

    if (data + sizeof(*eth) > data_end)
        return XDP_PASS; // Pass if too short

    if (eth->h_proto != bpf_htons(ETH_P_IP))
        return XDP_PASS; // Pass if not IP

    struct iphdr *ip = data + sizeof(*eth);
    if (data + sizeof(*eth) + sizeof(*ip) > data_end)
        return XDP_PASS; // Pass if too short

    if (ip->protocol == IPPROTO_UDP) {
        // Drop UDP packets for this example
        // In a real TSN scenario, this might be a complex scheduling decision
        return XDP_DROP;
    }

    return XDP_PASS; // Allow other packets
}
char _license[] SEC("license") = "GPL";

A common pitfall with eBPF is over-complicating programs, leading to performance degradation or difficulty in debugging. It is important to keep eBPF programs concise and focused on specific tasks to maintain kernel efficiency.

Leveraging Kube-Virt for running real-time operating systems (RTOS) and industrial control applications

Kube-Virt extends Kubernetes to run virtual machines (VMs) as first-class citizens alongside containers. It provides a robust, cloud-native platform for managing traditional virtualized workloads. For industrial control, Kube-Virt allows the orchestration of Real-Time Operating Systems (RTOS) and critical industrial applications within a Kubernetes cluster. This brings the benefits of container orchestration, such as scaling and resilience, to VM-based workloads.

Kube-Virt works by defining VirtualMachine (VM) or VirtualMachineInstance (VMI) objects that Kubernetes manages. These VMs can be configured with specific resource guarantees, including CPU pinng and guaranteed memory. Crucially, Kube-Virt supports technologies like CPU isolation, Real-Time Linux (PREEMPT_RT kernel), and SR-IOV (Single Root I/O Virtualization) for network interfaces. These features allow VMs running RTOS, such as VxWorks or Xenomai, to achieve near bare-metal performance regarding latency and determinism.

# Example Kube-Virt VMI definition with real-time specific settings
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
  name: rt-plc-control
spec:
  domain:
    cpu:
      sockets: 1
      cores: 2
      threads: 1
      # Pinning CPU cores for real-time applications
      dedicatedCpuPlacement: true
      isolateEmulatorThread: true
    memory:
      guest: 2Gi
    devices:
      # Example of SR-IOV network interface (requires pre-configured network attachment definition)
      interfaces:
      - name: default
        masquerade: {}
      - name: tsn-interface # Reference to a NetworkAttachmentDefinition
        sriov: {}
      disks:
      - disk:
          bus: virtio
        name: rootdisk
  terminationGracePeriodSeconds: 0
  networks:
  - name: default
    pod: {}
  - name: tsn-interface
    multus:
      networkName: tsn-network
  volumes:
  - name: rootdisk
    containerDisk:
      image: kubevirt/fedora-cloud-container-disk-demo:latest

A common misconception is that simply running an RTOS inside a VM guarantees real-time performance. Without proper resource isolation (CPU pinning, guaranteed memory, SR-IOV) and a host system configured for real-time (e.g., a PREEMPT_RT kernel), virtualization overhead will still introduce unacceptable latency and jitter.

Integration challenges: synchronizing TSN domains with cloud-native orchestration and virtualized network functions

Integrating TSN with cloud-native orchestration presents unique challenges related to time synchronization, network configuration, and dynamic resource allocation. Traditional TSN setups rely on static configurations and specialized hardware. Cloud-native environments, conversely, prioritize flexibility and dynamic changes. Bridging these two paradigms requires careful coordination.

The integration works by translating cloud-native orchestration commands into TSN-compatible configurations. This often involves a TSN controller (e.g., using NETCONF/YANG) that interacts with Kubernetes network plugins (CNIs) and custom resource definitions (CRDs). The controller monitors Kube-Virt VM deployments and provisions appropriate TSN network slices or traffic schedules across the physical network. Precise time synchronization across physical and virtual TSN domains (using protocols like IEEE 802.1AS) is critical. Moreover, network functions virtualized (VNFs) like firewalls or NAT must be TSN-aware or bypassed for critical traffic.

# Example of a hypothetical NetworkAttachmentDefinition for TSN (simplified)
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: tsn-network
spec:
  config: |-
    {
      "cniVersion": "0.3.1",
      "name": "tsn-network",
      "type": "sriov",
      "ipam": {
        "type": "whereabouts",
        "range": "10.0.0.0/24"
      },
      "tsnConfiguration": {
        "scheduleID": "industrial-control-plane",
        "priority": 7,
        "bandwidthReservation": "100Mbps"
      }
    }

A common pitfall is ignoring the need for a dedicated TSN controller or trying to manage TSN configuration purely through standard Kubernetes networking. Kubernetes, by itself, does not natively understand TSN specifics like time-aware scheduling. A specialized orchestrator layer is essential.

Case studies: achieving sub-millisecond latencies for PLC/SCADA communication using eBPF-driven TSN

Achieving sub-millisecond latencies for Programmable Logic Controller (PLC) and Supervisory Control And Data Acquisition (SCADA) communication is a core requirement for many industrial automation tasks. Traditional approaches often rely on dedicated industrial Ethernet protocols on specialized hardware. With eBPF-driven TSN within Kube-Virt, these strict latency requirements become attainable in virtualized environments.

This approach works by deploying RTOS-based PLC/SCADA applications within Kube-Virt VMs, which are configured for CPU isolation and SR-IOV. eBPF programs loaded onto the host kernel intercept and prioritize the critical PLC/SCADA traffic. These eBPF programs can implement custom scheduling algorithms, such as those inspired by TSN’s time-aware shaper (IEEE 802.1Qbv), to ensure that packets from the VMs are forwarded with minimal delay. The TSN network then provides the underlying guarantees for on-time delivery across the physical network.

# Example eBPF command to inspect network packets and filter for specific EtherType (e.g., for EtherCAT)
# This uses 'bpftool' to load an eBPF program (pre-compiled) to capture packets.
# A more complex program would actively schedule.
sudo bpftool prog load my_tsn_filter.o dev eth0 type xdp pin /sys/fs/bpf/xdp_tsn_filter
sudo bpftool net list
# To verify an eBPF program that monitors latency:
sudo bpftool map dump id <map_id_from_earlier>
# This would show statistics on packet arrival times or latency measurements.

A common misconception is that eBPF alone can implement a full TSN solution. While eBPF can implement many TSN-like features (like precise scheduling and filtering) at the host level, it still requires TSN-capable switches and a coordinated approach for end-to-end determinism. It’s a critical component, not a standalone replacement.

Getting Started with eBPF TSN orchestration Kube-Virt: Step-by-Step

This section outlines a practical approach to setting up a proof-of-concept for eBPF TSN orchestration Kube-Virt. We’ll focus on configuring a Linux host for real-time operations, installing Kube-Virt, and deploying a basic VM with a high-priority network interface.

Prerequisites

  • Hardware: A server with an Intel or AMD processor (VT-x/AMD-V enabled) and multiple network interfaces, preferably supporting SR-IOV.
  • Operating System: Ubuntu Server 22.04 LTS or Fedora CoreOS.
  • Kernel: Linux kernel configured for real-time (e.g., PREEMPT_RT patch applied or a distribution-provided rt kernel).
  • Tools: kubectl, virtctl, docker (or podman), jq, git, bpftool.
  • Software: Kubernetes cluster (single node for PoC), Kube-Virt installed, Multus CNI, SR-IOV Network Device Plugin, Whereabouts IPAM CNI.

Step-by-Step Configuration

1. Prepare the Host for Real-Time and Kube-Virt

First, ensure your host system is ready for real-time workloads and Kube-Virt. This involves installing the real-time kernel and necessary virtualization packages.

# Install real-time kernel (Example for Ubuntu)
sudo apt update
sudo apt install linux-image-rt-amd64 linux-headers-rt-amd64
sudo reboot

# After reboot, verify kernel
uname -a | grep rt

# Install Kube-Virt prerequisites
sudo apt install qemu-kvm libvirt-daemon-system virtinst bridge-utils
sudo systemctl enable --now libvirtd

# Install Docker/Podman
# (Follow official Docker/Podman installation guides)

Expected output: ...-rt-amd64 in uname -a output.

2. Install Kubernetes and Kube-Virt

Use kind, minikube, or a simple kubeadm setup for a single-node cluster. Then install Kube-Virt.

# Example: Initialize a Kubeadm cluster (single node for PoC)
# (Follow official Kubernetes docs for kubeadm setup)

# Install Kube-Virt operator
export KUBEVIRT_VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -o=jsonpath='{.status.observedKubevirtVersion}')
# Or specify a version if kubevirt is not yet installed:
# KUBEVIRT_VERSION=v0.58.0
kubectl apply -f "https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml"
kubectl apply -f "https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml"

# Wait for Kube-Virt components to be ready
kubectl wait -n kubevirt --for=jsonpath='{.status.phase}'=Deployed kubevirt.kubevirt.io/kubevirt --timeout=10m

Expected output: Kube-Virt pods running in kubevirt namespace.

3. Configure Multus, SR-IOV Network Device Plugin, and Whereabouts

These are essential for advanced networking and SR-IOV.

# Install Multus CNI
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset-thick.yml

# Install SR-IOV Network Device Plugin
# (Refer to official SR-IOV Network Device Plugin GitHub for latest deployment files)
# Example: kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/sriov-network-device-plugin/master/deployments/config.yaml
# You'll need to configure a SR-IOV NetworkNodePolicy if you have SR-IOV capable NICs.

# Install Whereabouts IPAM CNI
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/whereabouts/master/doc/crds/whereabouts.cni.cncf.io_ippools.yaml
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/whereabouts/master/doc/crds/whereabouts.cni.cncf.io_overlappingrangeipreservations.yaml
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/whereabouts/master/daemonset-install.yaml

Common Error: Pods failing to schedule due to no nodes available to schedule pods. This often means your SR-IOV NetworkNodePolicy is misconfigured or your hardware does not support SR-IOV as expected. Resolution: Double-check lshw -c network for SR-IOV capabilities and review the plugin’s logs (kubectl logs -n kube-system -l app=sriov-network-device-plugin). Ensure you have created SriovNetwork and SriovNetworkNodePolicy objects correctly.

4. Define a TSN-enabled Network Attachment Definition

Create a NetworkAttachmentDefinition that configures a high-priority SR-IOV network.

# tsn-network-nad.yaml
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: tsn-high-priority
spec:
  config: '{
      "cniVersion": "0.3.1",
      "name": "tsn-high-priority",
      "type": "sriov",
      "ipam": {
        "type": "whereabouts",
        "range": "192.168.10.0/24"
      },
      "tuning": {
        "tx-queues": 4,
        "rx-queues": 4
      }
    }'
---
# Example: Basic SR-IOV Network and Node Policy (replace `enpXsY` with your actual NIC name)
# sriov-config.yaml
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: tsn-network-sriov
  namespace: default
spec:
  ipam: '{ "type": "host-local", "subnet": "192.168.10.0/24" }'
  networkNamespace: default
  resourceName: tsn-vf
  vlan: 100
  # Ensure the IPAM matches the one in NetworkAttachmentDefinition if you want IP management here.
---
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: policy-tsn-vfs
  namespace: default
spec:
  resourceName: tsn-vf
  nodeSelector:
    kubernetes.io/hostname: your-node-name # IMPORTANT: Replace with your node's hostname
  numVfs: 2 # Number of Virtual Functions to create
  nicSelector:
    pfNames: ["enp1s0f0"] # IMPORTANT: Replace with your SR-IOV physical function interface name
  isRdma: false
  priority: 99
kubectl apply -f tsn-network-nad.yaml
kubectl apply -f sriov-config.yaml

Expected output: NetworkAttachmentDefinition tsn-high-priority created and SR-IOV VFs are provisioned. Check kubectl get SriovNetworkNodePolicy and kubectl describe node <your-node-name> for tsn-vf resources.

5. Deploy a Kube-Virt VM with the TSN Network Interface

Finally, deploy your real-time VM with the configured network.

# rt-vm.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: industrial-controller-vm
spec:
  running: true
  template:
    metadata:
      labels:
        app: industrial-controller
    spec:
      domain:
        cpu:
          sockets: 1
          cores: 1
          threads: 1
          dedicatedCpuPlacement: true # Ensure CPU isolation
          isolateEmulatorThread: true
        memory:
          guest: 1Gi
        devices:
          interfaces:
          - name: default
            masquerade: {}
          - name: tsn-interface
            sriov: {} # Use the SR-IOV VF created by the NetworkAttachmentDefinition
      networks:
      - name: default
        pod: {}
      - name: tsn-interface
        multus:
          networkName: tsn-high-priority # Reference the NetworkAttachmentDefinition
      volumes:
      - name: containerdisk
        containerDisk:
          image: quay.io/containerdisks/fedora-coreos:stable # Or your RTOS image
kubectl apply -f rt-vm.yaml
kubectl wait -n default --for=jsonpath='{.status.phase}'=Running virtualmachineinstance/industrial-controller-vm --timeout=5m

Expected output: The industrial-controller-vm VirtualMachineInstance should transition to Running state. You can connect to it using virtctl console industrial-controller-vm to verify its network interfaces. Within the VM, you should see a network interface configured with the 192.168.10.x IP address, directly exposed via SR-IOV.

This setup provides a foundation for running real-time applications within Kube-Virt. The next step would be to load eBPF programs on the host kernel to further enhance traffic scheduling for your VM’s critical data, interacting with the SR-IOV VFs.

Real-World Example

A major automotive manufacturer faced challenges with scaling their robotic assembly lines while maintaining sub-100 microsecond synchronization between robotic arms. Their existing setup used proprietary industrial PCs directly connected via EtherCAT, limiting flexibility and requiring significant manual re-configuration for line changes. Upgrading hardware was costly and time-consuming.

By adopting eBPF TSN orchestration Kube-Virt, they migrated their robotic control logic into Kube-Virt VMs running a real-time Linux kernel. The VMs were configured with CPU pinning and SR-IOV network interfaces for direct access to the physical network. On the Kubernetes host nodes, custom eBPF programs were deployed. These programs were specifically designed to prioritize and schedule EtherCAT packets originating from the VMs, ensuring they bypassed general network processing and received deterministic forwarding.

Before: Each robot controller was a dedicated, expensive industrial PC with hardwired EtherCAT. Modifications required physical changes and extensive re-certification. Latency variation (jitter) was acceptable but limited future expansion.

After: The robotic control systems ran as VMs on standard Kubernetes infrastructure. The eBPF TSN orchestration Kube-Virt layer delivered deterministic sub-50 microsecond latency for EtherCAT communication. This allowed the manufacturer to dynamically reconfigure assembly lines through software, drastically reducing deployment times for new products by 80%. Furthermore, they observed a 30% reduction in hardware costs by moving to commodity servers, while increasing system resilience due to Kubernetes’ self-healing capabilities. This approach provided the agility of cloud-native systems with the performance of dedicated hardware.

eBPF TSN orchestration Kube-Virt vs Alternatives

Feature / Dimension eBPF TSN orchestration Kube-Virt Dedicated Industrial PCs / RTOS with hardware TSN switches Cloud-native with standard networking & software RTOS extensions
Determinism/Latency Excellent (sub-ms to tens of µs) via eBPF + SR-IOV + RT-VMs Excellent (tens of µs) via dedicated hardware Poor to Fair (ms to tens of ms) due to virtualization overhead
Flexibility/Agility High (software-defined, dynamic orchestration) Low (static, hardware-bound configuration) Very High (containerization, rapid deployment)
Cost Moderate (commodity hardware + software tooling) High (specialized, proprietary hardware) Low (commodity hardware, open-source software)
Scalability High (Kubernetes-native scaling of VMs) Low (manual scaling, per-device configuration) High (Kubernetes-native scaling of containers)
Management Complexity High (eBPF, Kube-Virt, TSN controllers) Moderate (vendor-specific tools, often manual) Moderate (standard Kubernetes management)
Ecosystem Maturity Evolving, but rapidly maturing Mature, well-established Mature (for non-real-time), emerging (for real-time)
Vendor Lock-in Low (open-source foundations) High (proprietary hardware/software stacks) Low (open-source cloud-native stack)

Common Pitfalls and Best Practices

Pitfall Best Practice
Inadequate Host Kernel for Real-time Always use a PREEMPT_RT patched kernel or a distribution-provided rt kernel for the Kubernetes host. Verify with uname -a.
Insufficient CPU Pinning or Isolation Ensure Kube-Virt VMs have dedicatedCpuPlacement: true and isolateEmulatorThread: true. Reserve a dedicated core for the host OS and Kube-Virt processes, leaving others for real-time VMs.
Ignoring Network Resource Allocation Use SR-IOV for critical VM network interfaces instead of virtio-net or masquerade. This bypasses much of the software-defined networking stack for deterministic I/O.
Over-reliance on Default Kubernetes Networking Understand that standard Kubernetes CNIs are not TSN-aware. Supplement with Multus CNI, SR-IOV Network Device Plugin, and potentially a dedicated TSN orchestrator for end-to-end determinism.
Complex eBPF Programs Keep eBPF programs as simple and efficient as possible. Complex logic can introduce latency. Profile eBPF code thoroughly to ensure it meets performance targets.
Lack of Time Synchronization Across Domains Implement robust time synchronization (e.g., PTP – Precision Time Protocol, IEEE 802.1AS) across all physical and virtual network elements involved in the TSN domain.

Any Known Issues and Resolutions

  1. Issue: Real-time VM performance degrades unexpectedly under load, despite CPU pinning.
    Resolution: This often indicates interference from non-real-time processes or insufficient isolation. Verify that kernel.sched_rt_runtime_us is configured (e.g., -1 for unlimited real-time CPU time) and that isolcpus kernel boot parameters are used to prevent the host OS scheduler from using critical CPU cores. Check the Kube-Virt VirtualMachineInstance configuration for correct dedicatedCpuPlacement and isolateEmulatorThread settings. Ensure there are no noisy neighbor containers or other VMs on shared resources.
  2. Issue: SR-IOV network interfaces are not showing up inside the Kube-Virt VM, or the VF (Virtual Function) is not correctly assigned.
    Resolution: First, check the host machine for SR-IOV support and that VFs are created (ip link show on the host should show vf entries under your physical NIC). Verify the SriovNetworkNodePolicy and SriovNetwork Kubernetes objects are correctly applied and that the resourceName specified matches the one requested by the NetworkAttachmentDefinition and the VirtualMachine. Inspect the SR-IOV Network Device Plugin logs for errors during VF allocation. A common mistake is having incorrect pfNames in the SriovNetworkNodePolicy.
  3. Issue: Network packets from the RT-VM are not being prioritized by the eBPF program