Loading DPL Applications
NVIDIA DPL programs are deployed to the NVIDIA® BlueField® networking platform (DPU or SuperNIC) using the P4Runtime API. This allows platform-independent, standards-based integration with SDN controllers.
The DPL compiler generates a pipeline binary optimized for execution on BlueField. Pipeline loading and control—such as installing the program and populating P4 tables—are handled via the P4Runtime API, an open and well-defined interface.
The P4Runtime server, running on the BlueField device, enables a P4 Controller to:
Connect over gRPC
Set the
ForwardingPipelineConfig
(i.e., install the compiled DPL binary andp4info
)Query the device for its current pipeline config and table state
Maintain runtime P4 tables as defined in the DPL source
This model enables integration with open-source, proprietary, or custom-built controllers in a standardized way.
Before loading a DPL application, ensure the following services and components are properly set up:
DPL Runtime Service is running and configured on the BlueField (Arm side). See the DPL Container Deployment page for setup instructions.
DPL Development Container and the
p4runtime_sh.sh
launch script are installed on the host. See the DPL Installation Guide for more details.
A DPL application can be loaded using:
A custom P4Runtime controller
In the following example, we'll be using the P4Runtime controller bundled within the DPL Development Container.
Using p4runtime_sh.sh Script
./p4runtime_sh.sh help
usage: ./p4runtime_sh.sh [help] [-i <docker image>] [-a <dpl_rtd_ip:port>] -p <program_folder> -d <device ID> [OPTIONS]
For example:
./p4runtime_sh.sh -p /root/hello_packet/_out -a 192.168.1.100:9559 -d 1000
Arguments:
-i
- The pulled DPL Development Container image.-p
- Directory that holds the DPL program compilation outputs (Compiling DPL Applications).-a
- Address of the DPL Runtime daemon and the P4Runtime port as specified in the DPL Runtime DPL Service Configuration.-d
– ID of the target device--mount - (Optional) Additional volume to mount to the container. Can be used multiple times.
The "-i
" and the "-a
" arguments are only required if they were not configured in the scripts_config.sh
as documented at DPL Installation Guide (Configuring Launch Scripts)
The examples below assumes that everything was pre-configured in scripts_config.sh
.
Example Command
./p4runtime_sh.sh -d 1000 -p /root/hello_packet/_out
p4runtime_sh python application
After successfully loading a program, the script launches an interactive Python shell (p4runtime_sh
python application) connected to the P4Runtime server on the dpl-rt-service running on the DPU.
From here, you can inspect and manage tables entries using this tool. For more details about using the p4runtime_sh
application see:
Our P4 Runtime Controller documentation.
Official p4runtime-shell project documentation.
DPL table entries are added via a P4Runtime controller, which may run remotely or locally on BlueField.
The standard gRPC-based controller model supports ~50K rule insertions per second
For use cases requiring high-speed (1M+) rule insertions, NVIDIA is introducing a bulk insertion API extension to the P4Runtime protobuf specification
NoteThis feature is planned for future releases.
Loading a program might fail when the dpl-rt-service processes the compiled program due to various reasons (mostly configuration issues), in such cases, you might see error message like:
Program load failure example
# ./scripts/p4runtime_sh.sh --device-id 1000 -p tables/_out/
CRITICAL:root:Error when setting config
CRITICAL:root:P4Runtime RPC error (INVALID_ARGUMENT): Error setting program: Failed creating P4 tables
Refer to the following for troubleshooting common issue:
Checkpoint | Guidance/Command |
Inspect the dpl-rt-service log for more error details | There are two methods to get the dpl-rt-service log:
Look for the last info and error messages at the end of the log file. |
Inspecting the current dpl-rt-service configurations | Using the dpl_admin utility:
Verify that all required ports are present with the expected IDs. The devices and ports correspond to the |
Inspecting the DPU Non-volatile configurations (nvconfig) | Using the dpl_admin utility:
Check if there are missing required firmware settings per DPL Runtime Service (Firmware Settings) |
The dpl-rt-service log contains error message like:
| This means that the DPL program refers to a port ID that does not exist in the device configuration files. Fix the program to use the correct port ID(s), and/or update the |
The dpl-rt-service log contains error message like:
| This means that the DPU does not have a Firmware version that meets the minimum required version. Upgrade the DOCA and/or the Firmware version on the DPU to the minimum required version as documented at DPL Runtime Service (Software Prerequisites) |