- Notifications
You must be signed in to change notification settings - Fork0
Cloud Native Data Plane (CNDP) is a collection of user space libraries to accelerate packet processing for cloud applications.
License
KeithWiles/cndp
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Cloud Native Data Plane (CNDP) is a collection of userspace libraries foraccelerating packet processing for cloud applications. It aims to provide betterperformance than that of standard network socket interfaces by taking advantageof platform technologies such as Intel(R) AVX-512, Intel(R) DSA, CLDEMOTE, etc.The I/O layer is primarily built on AF_XDP, an interface that delivers packetsstraight to userspace, bypassing the kernel networking stack. CNDP provides waysto expose metrics and telemetry with examples to deploy network services onKubernetes.
Cloud Network Function (CNF) and Cloud Application developers: Those whocreate applications based on CNDP. CNDP hides the low-level I/O, allowing thedeveloper to focus on their application.
CNF and Cloud Application consumers: Those who consume the applicationsdeveloped by the CNF developer. CNDP showcases deployment models for theirapplications using Kubernetes.
CNDP follows a set of principles:
Functionality: Provide a framework for cloud native developers that offersfull control of their application.
Usability: Simplify cloud native application development to enable thedeveloper to create applications by providing APIs that abstract thecomplexities of the underlying system while still taking advantage ofacceleration features when available.
Interoperability: The CNDP framework is built primarily on top of AF_XDP.Other interfaces, such as memif, are also supported, however building onAF_XDP ensures it is possible to move an application across environmentswherever AF_XDP is supported.
Portability/stability: CNDP provides ABI stability and a common API toaccess network interfaces.
Performance: Take advantage of platform technologies to accelerate packetprocessing or fall-back to software when acceleration is unavailable.
Observability: Provide observability into the performance and operation ofthe application.
Security: Security for deployment in a cloud environment is critical.
CNDP was created to enable cloud native developers to use AF_XDP and otherinterfaces in a simple way while providing better performance as compared tostandard Linux networking interfaces.
CNDP does not replace DPDK (Data Plane Development Kit), which provides thehighest performance for packet processing. DPDK implements user space drivers,bypassing the kernel drivers. This approach of rewriting drivers is one reasonDPDK achieves the highest performance for packet processing. DPDK alsoimplements a framework to initialize and setup platform resources i.e. scanningPCI bus for devices, allocating memory via hugepages, setting upPrimary/Secondary process support, etc.
In contrast to DPDK, CNDP does not have custom drivers. Instead it expects thekernel drivers to implement AF_XDP, preferably in zero-copy mode. Since thereare no PCIe drivers, there's no PCI bus scanning, and does not requirephysically contiguous and pinned memory. This simplifies deployment for cloudnative applications while gaining the performance benefits provided by AF_XDP.
In order to make contributions to CNDP, you need to have the following installed:
You can install pre-commit by running the following command:
pip install pre-commit
After installing pre-commit, you need to install the pre-commit hooks byrunning the following command:
pre-commit install
To run pre-commit manually
pre-commit run --all-files
The following shows a subset of the directory structure.
.├── ansible# Ansible playbook to install in a system(s)├── containerization# Container configuration and setup scripts for Docker/K8s├── doc# Documentation APIs, guides, getting started, ...├── examples# Example applications to understand how to use CNDP features├── lang# Language bindings and examples│ ├── go# Go Language bindings to CNDP and tools (WIP)│ └── rs# Rust Language bindings for CNDP/Wireguard (WIP)├── lib# Set of libraries for building CNDP applications│ ├── cnet# Userspace network stack│ ├── common# Libraries used by core and applications libraries│ ├── core# Core libraries for CNDP│ ├── include# Common headers for CNDP and applications│ └── usr# User set of libraries that are optional for developer├──test# Unit test framework│ ├── common# Common test code│ ├── fuzz# Fuzzing (WIP)│ └── testcne# Functional unit testing application├── tools# Tools for building CNDP│ └── vscode# Configuration files for vscode└── usrtools# Tools for users ├── cnectl# Remote CLI for CNDP applications └── txgen# Traffic Generator using AF_XDP and CNDP
About
Cloud Native Data Plane (CNDP) is a collection of user space libraries to accelerate packet processing for cloud applications.
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- C89.3%
- Go5.7%
- Rust2.5%
- Meson1.3%
- Shell0.7%
- Python0.2%
- Other0.3%