Skip to content

VPP_Usability_Track

Dave Wallace edited this page Apr 11, 2026 · 1 revision

WORK-IN-PROGRESS - This is a planning page for addressing VPP usability aspects

Goals

  1. VPP working out of the box for most/all baseline use cases.
  2. Profiled by target VPP consumers - use cases, users.
  • Use1 - OPNFV/FDS
  • Use2 - Programmable Virtual Forwarder
  • Use3 - OpenStack NFVI
  • Use4 - vSwitch for VMs

VPP Use Case Requirements

Functional requirements of target VPP consumers - wip - current snapshot:

  1. Use1 - OPNFV/FDS - VXLAN+L2BD+vhost, VLAN+L2BD+vhost, BVI, VRF, IPv4, IPv6, SNAT, ACL/classifier
  2. Use2 - Programmable Virtual Forwarder - VXLAN+L2BD+vhost, IPv4, IPv6, more TBC
  3. Use3 - OpenStack NFVI - VXLAN+L2BD+vhost
  4. Use4 - vSwitch for VMs - VLAN+L2BD+vhost, high-density VNF VMs (30VMs, 102vhost)

VPP User Guide - Outline

Outline of user guide that needs to be produced:

  1. Installation per Linux distro - Ubuntu, Centos, RHEL, other - Ed, Sean
  • Packaging

  • Manual install - ??

  • Automated install of VPP bench-in-a-box - Ed, Sean

    • Target installation sequence:

        1. Hugepages and CPU isolation
        • a) Setup Hugepages and CPU isolation
        • b) Reboot
        • c) Validate Hugepages and CPU isolation
        1. Download and build VPP (I am told we are building rather than apt/yumming packages because of lack of python api packages)
        1. Configure /etc/vpp/startup.conf
        1. Validating VPP python api is working
        1. Devstack
        • a) Munging ML2 driver to match vpp python api (what needs to be fixed upstream so we don’t have to do this)?
        1. Configure various neutron and nova bits
        1. Install Trex
        • a) Download DPDK and build it for trex
        • b) Download Trex and build it
        1. Configure and run trex
    • Required work

        1. Fix whatever is causing us to have to munge the ML2 driver to match vpp
        1. Get vpp python api’s packaged so we just have to apt/yum install vpp and vpp-python-api
        1. Get Trex packaged (together with whatever DPDK munging has to happen) so it can simply be apt/yum installed
        1. Get puppet/ansible modules for vpp/trex sufficient to handle their configuration
    • Once required work done, user would follow simple few steps

        1. apt/yum install puppet/ansible
        1. curl ${url to openstack_vpp_performance_demo.pp}
        1. sudo puppet apply openstack_vpp_performance_demo.pp
        1. Reboot
        1. Run a script that fires up the performance demo (stacks/munges, neutron/nova bits, starts trex traffic)
  1. Environment - MK, FB
  • Linux environment fundamentals

  • SW Dependencies

    • Linux kernel ver
    • QEMU ver
    • DPDK ver
  • HW Dependencies

    • x86_64 microarchitectures
    • NICs
  1. Initial configuration - MK, PM, DM for questions
  • Startup configuration - startup.conf ...
  • Interfaces
  1. Optimizing VPP performance - MK, PM, PF&DM for questions
  • Tuning performance
  • VM and vhost-user considerations
  • Useful host performance telemetry
  • Useful VPP performance telemetry
  1. Sample use cases - Chris Metz with team will work it
  • L2 switching

    • with VMs (vhost)
    • with tunnels (vxlan, lisp-gpe)
    • with security-groups
  • IP routed forwarding

    • with VMs (vhost)
    • with tunnels (vxlan, lisp-gpe)
    • with security-filters - iacl, cop-whitelist, cop-blacklist
  • <structure differently?>

  1. Doc Generation and Online Presentation

Programmer's Guide - Outline

Programmer's guide - KRB for TOC, OT to help

  1. VPP API guide

Tester's Guide - Outline

  1. Running VPP tests
  • vpp make tests

    • sphinx auto-generated docs in place now in vpp/build-root/test-doc/build/html
  • csit virl functional tests

    • sphinx auto-generated docs are wip - Tibor Frank
  • csit perf tests

    • sphinx auto-generated docs are wip - Tibor Frank
  1. Programming VPP tests
  • vpp make tests

    • sphinx auto-generated docs in place now in vpp/build-root/test-doc/build/html
  • csit virl functional tests

  • csit perf tests

VPP vhost usability

  1. VPP vhost test requirements
  1. VPP vhost VM use cases
  2. VPP vhost VM negative scenarios
  • VPP disconnects
  • VM disconnects
  1. qemu hardening for vhost
  1. Other fixes:
  • Improved packet tracing for troubleshooting: commit:116ea4b2a157

VPP Performance Considerations

Here initial points to be addressed for optimizing VPP performance on specific compute HW configurations:

  1. cpu core configuration and vpp thread mappings
  • phy interfaces can be placed to thread/core
  • vhost interfaces are round-robined - new feature for placement
    • do after multi-queue patch by Pierre
  1. vhost - qsz, cpu jitter, reconnect, interop qemu-virtio
  • hard to install, doesn't work all the time, crashes
  1. dpdk - performance with selection of NICs
  • more detailed documentation about baremetal installations

    • vs. just Vagrant
  • Added a vhost test script in vppsb/vhost-test

  • dpdk new rls setup recommendations - per NIC basis

  • dpdk.org is not publishing performance numbers

  • csit can't address it - need manual tests and analysis

  1. vpp self-diagnostics for optimal setup verification

Minimal setup installation for vhost+VM connectivity

Minimal setup installation for vhost+VM connectivity:

  1. TRex
  2. ansible scripts developed in CSIT
  3. Consumability of CSIT-perf RF and python libraries

Important Test Areas

Listing of important areas to increase VPP test coverage -MK

  1. negative tests - add/remove interfaces/routes/MAC entries
  2. box-full tests NIC-NIC
  3. box-full tests NIC-VM-NIC
  4. stress-tests - add/remove VMs
  5. negative weird setups - mixed L2BD, IRB, IPv4, IPv6 forwarding
  6. soak-tests
  7. tap devices - add/remove
  8. negative stress/weird tests

VPP Diagnostics and telemetry

Following VPP diagnostics and telemetry aspects need to be addressed:

  1. live health and performance metrics
  • compute HW
  • Linux kernel
  • VM guest
  1. collectd + influxdb + grafana
  • VPP interface counters
  • VPP vector size

Clone this wiki locally