2. DPDK Release 24.11
2.1. New Features
Added new bit manipulation API.
Extended support for bit-level operations on single 32 and 64-bit words in
<rte_bitops.h>
with semantically well-defined functions.rte_bit_[test|set|clear|assign|flip]
functions provide excellent performance (by avoiding restricting the compiler and CPU), but give no guarantees in relation to memory ordering or atomicity.rte_bit_atomic_*
provide atomic bit-level operations including the possibility to specify memory ordering constraints.
The new public API elements are polymorphic, using the _Generic-based macros (for C) and function overloading (in C++ translation units).
Added multi-word bitset API.
Introduced a new multi-word bitset API to the EAL.
The RTE bitset is optimized for scenarios where the bitset size exceeds the capacity of a single word (e.g., larger than 64 bits), but is not large enough to justify the overhead and complexity of the more scalable, yet slower,
<rte_bitmap.h>
API.This addition provides an efficient and straightforward alternative for handling bitsets of intermediate size.
Added a per-lcore static memory allocation facility.
Added EAL API
<rte_lcore_var.h>
for statically allocating small, frequently-accessed data structures, for which one instance should exist for each EAL thread and registered non-EAL thread.With lcore variables, data is organized spatially on a per-lcore id basis, rather than per library or PMD, avoiding the need for cache aligning (or RTE_CACHE_GUARDing) data structures, which in turn reduces CPU cache internal fragmentation and improves performance.
Lcore variables are similar to thread-local storage (TLS, e.g. C11
_Thread_local
), but decouples the values’ life times from those of the threads.Extended service cores statistics.
Two new per-service counters are added to the service cores framework.
RTE_SERVICE_ATTR_IDLE_CALL_COUNT
tracks the number of service function invocations where no actual work was performed.RTE_SERVICE_ATTR_ERROR_CALL_COUNT
tracks the number of invocations resulting in an error.
The new statistics are useful for debugging and profiling.
Hardened rte_malloc and related functions.
Added function attributes to
rte_malloc
and similar functions that can catch some obvious bugs at compile time (with GCC 11.0 or later). For example, callingfree
on a pointer that was allocated withrte_malloc
(and vice versa); freeing the same pointer twice in the same routine or freeing an object that was not created by allocation.Updated logging library.
The log subsystem is initialized earlier in startup so all messages go through the library.
If the application is a systemd service and the log output is being sent to standard error then DPDK will switch to journal native protocol. This allows more data such as severity to be sent.
The syslog option has changed. By default, messages are no longer sent to syslog unless the
--syslog
option is specified. Syslog is also supported on FreeBSD (but not on Windows).Log messages can be timestamped with
--log-timestamp
option.Log messages can be colorized with the
--log-color
option.
Updated Marvell cnxk mempool driver.
Added mempool driver support for CN20K SoC.
Added more ICMP message types and codes.
Added new ICMP message types and codes from RFC 792 in
rte_icmp.h
.Added IPv6 address structure and related utilities.
A new IPv6 address structure is now available in
rte_ip6.h
. It comes with a set of helper functions and macros.Added link speed lanes API.
Added functions to query or force the link lanes configuration.
Added Ethernet device clock frequency adjustment.
Added the function
rte_eth_timesync_adjust_freq
to adjust the clock frequency for Ethernet devices.Extended flow table index features.
Extended the flow table insertion type enum with the
RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN
type.Added a function for inserting a flow rule by index with pattern:
rte_flow_async_create_by_index_with_pattern()
.Added a flow action to redirect packets to a particular index in a flow table:
RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX
.
Added support for dumping registers with names and filtering by modules.
Added a new function
rte_eth_dev_get_reg_info_ext()
to filter the registers by module names and get the information (names, values and other attributes) of the filtered registers.Updated Amazon ENA (Elastic Network Adapter) net driver.
Modified the PMD API that controls the LLQ header policy.
Replaced
enable_llq
,normal_llq_hdr
andlarge_llq_hdr
devargs with a new shared devargllq_policy
that maintains the same logic.Added a validation check for Rx packet descriptor consistency.
Updated Cisco enic driver.
Added SR-IOV VF support.
Added recent 1400/14000 and 15000 models to the supported list.
Updated Marvell cnxk net driver.
Added ethdev driver support for CN20K SoC.
Updated Napatech ntnic net driver [EXPERIMENTAL].
Updated supported version of the FPGA to 9563.55.49.
Extended and fixed logging.
Added:
NT flow filter initialization.
NT flow backend initialization.
Initialization of FPGA modules related to flow HW offload.
Basic handling of the virtual queues.
Flow handling support.
Statistics support.
Age flow action support.
Meter flow metering and flow policy support.
Flow actions update support.
Asynchronous flow support.
MTU update support.
Updated NVIDIA mlx5 net driver.
Added
rte_flow_async_create_by_index_with_pattern()
support.Added jump to flow table index support.
Added Realtek r8169 net driver.
Added a new network PMD which supports Realtek 2.5 and 5 Gigabit Ethernet NICs.
Added ZTE zxdh net driver [EXPERIMENTAL].
Added ethdev driver support for the zxdh NX Series Ethernet Controller. This has:
The ability to initialize the NIC.
No datapath support.
Added cryptodev queue pair reset support.
A new API
rte_cryptodev_queue_pair_reset
is added to reset a particular queue pair of a device.Added cryptodev asymmetric EdDSA support.
Added asymmetric EdDSA as referenced in RFC 8032.
Added cryptodev SM4-XTS support.
Added symmetric cipher algorithm ShangMi 4 (SM4) in XTS mode.
Updated IPsec_MB crypto driver.
Added support for the SM3 algorithm.
Added support for the SM3 HMAC algorithm.
Added support for the SM4 CBC, SM4 ECB and SM4 CTR algorithms.
Bumped the minimum version requirement of Intel IPsec Multi-buffer library to v1.4. Affected PMDs: KASUMI, SNOW3G, ZUC, AESNI GCM, AESNI MB and CHACHAPOLY.
Updated openssl crypto driver.
Added support for asymmetric crypto EdDSA algorithm.
Updated Marvell cnxk crypto driver.
Added support for asymmetric crypto EdDSA algorithm.
Added stateless IPsec processing.
New functions were added to enable providing sequence number to be used for the IPsec operation.
Added strict priority capability for dmadev.
Added new capability flag
RTE_DMA_CAPA_PRI_POLICY_SP
to check if the DMA device supports assigning fixed priority, allowing for better control over resource allocation and scheduling.Updated Marvell cnxk DMA driver.
Added support for DMA queue priority configuration.
Added Marvell cnxk RVU LF rawdev driver.
Added a new raw device driver for Marvell cnxk based devices to allow an out-of-tree driver to manage a RVU LF device. It enables operations such as sending/receiving mailbox, register and notify the interrupts, etc.
Added event device pre-scheduling support.
Added support for pre-scheduling of events to event ports to improve scheduling performance and latency.
Added
rte_event_dev_config::preschedule_type
to configure the device level pre-scheduling type.Added
rte_event_port_preschedule_modify
to modify pre-scheduling type on a given event port.Added
rte_event_port_preschedule
to allow applications provide explicit pre-schedule hints to event ports.
Updated event device library for independent enqueue feature.
Added support for independent enqueue feature. With this feature eventdev supports enqueue in any order or specifically in a different order than dequeue. The feature is intended for eventdevs supporting burst mode. Applications should use
RTE_EVENT_PORT_CFG_INDEPENDENT_ENQ
to enable the feature if the capabilityRTE_EVENT_DEV_CAP_INDEPENDENT_ENQ
exists.Updated DLB2 event driver.
Added independent enqueue feature.
Updated DSW event driver.
Added independent enqueue feature.
Updated Marvell cnxk event device driver.
Added eventdev driver support for CN20K SoC.
Added IPv4 network order lookup in the FIB library.
A new flag field is introduced in the
rte_fib_conf
structure. This field is used to pass an extra configuration settings such as the ability to lookup IPv4 addresses in network byte order.Added RSS hash key generating API.
A new function
rte_thash_gen_key
is provided to modify the RSS hash key to achieve better traffic distribution with RSS.Added per-CPU power management QoS interface.
Added per-CPU PM QoS interface to lower the resume latency when waking up from idle state.
Added new API to register telemetry endpoint callbacks with private arguments.
A new
rte_telemetry_register_cmd_arg
function is available to pass an opaque value to telemetry endpoint callback.Added node specific statistics.
Added ability for a node to advertise and update multiple xstat counters, that can be retrieved using
rte_graph_cluster_stats_get
.
2.2. Removed Items
ethdev: Removed the
__rte_ethdev_trace_rx_burst
symbol, as the corresponding tracepoint was split into two separate ones for empty and non-empty calls.
2.3. API Changes
kvargs: reworked the process API.
The already existing
rte_kvargs_process
now only handleskey=value
cases and rejects input where only a key is present in the parsed string.rte_kvargs_process_opt
has been added to behave asrte_kvargs_process
in previous releases: it handles key=value and only-key cases.Both
rte_kvargs_process
andrte_kvargs_process_opt
reject a NULLkvlist
parameter.
net: The IPv4 header structure
rte_ipv4_hdr
has been marked as two bytes aligned.net: The ICMP message types
RTE_IP_ICMP_ECHO_REPLY
andRTE_IP_ICMP_ECHO_REQUEST
are marked as deprecated, and are replaced byRTE_ICMP_TYPE_ECHO_REPLY
andRTE_ICMP_TYPE_ECHO_REQUEST
.net: The IPv6 header structure
rte_ipv6_hdr
and extension structuresrte_ipv6_routing_ext
andrte_ipv6_fragment_ext
have been marked as two bytes aligned.net: A new IPv6 address structure was introduced to replace ad-hoc
uint8_t[16]
arrays. The following libraries and symbols were modified:cmdline:
cmdline_ipaddr_t
ethdev:
struct rte_flow_action_set_ipv6
struct rte_flow_item_icmp6_nd_na
struct rte_flow_item_icmp6_nd_ns
struct rte_flow_tunnel
fib:
rte_fib6_add()
rte_fib6_delete()
rte_fib6_lookup_bulk()
RTE_FIB6_IPV6_ADDR_SIZE
(deprecated, replaced withRTE_IPV6_ADDR_SIZE
)RTE_FIB6_MAXDEPTH
(deprecated, replaced withRTE_IPV6_MAX_DEPTH
)
hash:
struct rte_ipv6_tuple
ipsec:
struct rte_ipsec_sadv6_key
lpm:
rte_lpm6_add()
rte_lpm6_delete()
rte_lpm6_delete_bulk_func()
rte_lpm6_is_rule_present()
rte_lpm6_lookup()
rte_lpm6_lookup_bulk_func()
RTE_LPM6_IPV6_ADDR_SIZE
(deprecated, replaced withRTE_IPV6_ADDR_SIZE
)RTE_LPM6_MAX_DEPTH
(deprecated, replaced withRTE_IPV6_MAX_DEPTH
)
net:
struct rte_ipv6_hdr
node:
rte_node_ip6_route_add()
pipeline:
struct rte_swx_ipsec_sa_encap_params
struct rte_table_action_ipv6_header
struct rte_table_action_nat_params
security:
struct rte_security_ipsec_tunnel_param
table:
struct rte_table_lpm_ipv6_key
RTE_LPM_IPV6_ADDR_SIZE
(deprecated, replaced withRTE_IPV6_ADDR_SIZE
)
rib:
rte_rib6_get_ip()
rte_rib6_get_nxt()
rte_rib6_insert()
rte_rib6_lookup()
rte_rib6_lookup_exact()
rte_rib6_remove()
RTE_RIB6_IPV6_ADDR_SIZE
(deprecated, replaced withRTE_IPV6_ADDR_SIZE
)get_msk_part()
(deprecated)rte_rib6_copy_addr()
(deprecated, replaced with direct structure assignments)rte_rib6_is_equal()
(deprecated, replaced withrte_ipv6_addr_eq()
)
drivers/net/ena: Removed
enable_llq
,normal_llq_hdr
andlarge_llq_hdr
devargs and replaced it with a new shared devargllq_policy
that keeps the same logic.
2.4. ABI Changes
eal: The maximum number of file descriptors that can be passed to a secondary process has been increased from 8 to 253 (which is the maximum possible with Unix domain sockets). This allows for more queues when using software devices such as TAP and XDP.
ethdev: Added
filter
andnames
fields torte_dev_reg_info
structure for filtering by modules and reporting names of registers.cryptodev: The queue pair configuration structure
rte_cryptodev_qp_conf
is updated to have a new parameter to set priority of that particular queue pair.cryptodev: The list end enumerators
RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END
andRTE_CRYPTO_RSA_PADDING_TYPE_LIST_END
are removed to allow subsequent addition of new asymmetric algorithms and RSA padding types.cryptodev: The enum
rte_crypto_asym_xform_type
and structrte_crypto_asym_op
are updated to include new values to support EdDSA.cryptodev: The
rte_crypto_rsa_xform
struct member to hold private key data in either exponent or quintuple format is changed from a union to a struct data type. This change is to support ASN.1 syntax (RFC 3447 Appendix A.1.2).cryptodev: The padding struct
rte_crypto_rsa_padding
is moved fromrte_crypto_rsa_op_param
torte_crypto_rsa_xform
as the padding information is part of session creation instead of the per packet crypto operation. This change is required to support virtio-crypto specifications.bbdev: The structure
rte_bbdev_stats
was updated to add a new parameter to optionally report the number of enqueue batches availableenqueue_depth_avail
.dmadev: Added
nb_priorities
field to therte_dma_info
structure andpriority
field to therte_dma_conf
structure to get device supported priority levels and configure required priority from the application.eventdev: Added the
preschedule_type
field torte_event_dev_config
structure.eventdev: Removed the single-event enqueue and dequeue function pointers from
rte_event_fp_fps
.graph: To accommodate node specific xstats counters, added
xstat_cntrs
,xstat_desc
andxstat_count
torte_graph_cluster_node_stats
, added new structurerte_node_xstats
torte_node_register
and addedxstat_off
torte_node
.graph: The members
dispatch
andxstat_off
of the structurerte_node
have been marked asRTE_CACHE_LINE_MIN_SIZE
bytes aligned.
2.5. Tested Platforms
Intel® platforms with Intel® NICs combinations
CPU
Intel Atom® P5342 processor
Intel® Atom™ CPU C3758 @ 2.20GHz
Intel® Xeon® CPU D-1553N @ 2.30GHz
Intel® Xeon® CPU E5-2699 v4 @ 2.20GHz
Intel® Xeon® D-1747NTE CPU @ 2.50GHz
Intel® Xeon® D-2796NT CPU @ 2.00GHz
Intel® Xeon® Gold 6139 CPU @ 2.30GHz
Intel® Xeon® Gold 6140M CPU @ 2.30GHz
Intel® Xeon® Gold 6252N CPU @ 2.30GHz
Intel® Xeon® Gold 6348 CPU @ 2.60GHz
Intel® Xeon® Platinum 8280M CPU @ 2.70GHz
Intel® Xeon® Platinum 8358 CPU @ 2.60GHz
Intel® Xeon® Platinum 8380 CPU @ 2.30GHz
Intel® Xeon® Platinum 8468H
Intel® Xeon® Platinum 8490H
OS:
Microsoft Azure Linux 3.0
Fedora 40
FreeBSD 14.1
OpenAnolis OS 8.9
openEuler 24.03 (LTS)
Red Hat Enterprise Linux Server release 9.4
Ubuntu 22.04.3
Ubuntu 22.04.4
Ubuntu 24.04
Ubuntu 24.04.1
NICs:
Intel® Ethernet Controller E810-C for SFP (4x25G)
Firmware version: 4.60 0x8001e8b2 1.3682.0
Device id (pf/vf): 8086:1593 / 8086:1889
Driver version(out-tree): 1.15.4 (ice)
Driver version(in-tree): 6.8.0-48-generic (Ubuntu24.04.1) / 5.14.0-427.13.1.el9_4.x86_64+rt (RHEL9.4) (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Wireless Edge DDP: 1.3.14.0
Intel® Ethernet Controller E810-C for QSFP (2x100G)
Firmware version: 4.60 0x8001e8b1 1.3682.0
Device id (pf/vf): 8086:1592 / 8086:1889
Driver version(out-tree): 1.15.4 (ice)
Driver version(in-tree): 6.6.12.1-1.azl3+ice+ (Microsoft Azure Linux 3.0) (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Wireless Edge DDP: 1.3.14.0
Intel® Ethernet Controller E810-XXV for SFP (2x25G)
Firmware version: 4.60 0x8001e8b0 1.3682.0
Device id (pf/vf): 8086:159b / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Intel® Ethernet Connection E823-C for QSFP
Firmware version: 3.42 0x8001f66b 1.3682.0
Device id (pf/vf): 8086:188b / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Wireless Edge DDP: 1.3.14.0
Intel® Ethernet Connection E823-L for QSFP
Firmware version: 3.42 0x8001ea89 1.3636.0
Device id (pf/vf): 8086:124c / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Wireless Edge DDP: 1.3.14.0
Intel® Ethernet Connection E822-L for backplane
Firmware version: 3.42 0x8001eaad 1.3636.0
Device id (pf/vf): 8086:1897 / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.36.0
COMMS DDP: 1.3.46.0
Wireless Edge DDP: 1.3.14.0
Intel® Ethernet Network Adapter E830-XXVDA2 for OCP
Firmware version: 1.00 0x8000942a 1.3672.0
Device id (pf/vf): 8086:12d3 / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.38.0
Intel® Ethernet Network Adapter E830-CQDA2
Firmware version: 1.00 0x8000d294 1.3722.0
Device id (pf/vf): 8086:12d2 / 8086:1889
Driver version: 1.15.4 (ice)
OS Default DDP: 1.3.39.0
COMMS DDP: 1.3.51.0
Wireless Edge DDP: 1.3.19.0
Intel® 82599ES 10 Gigabit Ethernet Controller
Firmware version: 0x000161bf
Device id (pf/vf): 8086:10fb / 8086:10ed
Driver version(out-tree): 5.21.5 (ixgbe)
Driver version(in-tree): 6.8.0-48-generic (Ubuntu24.04.1)
Intel® Ethernet Network Adapter E610-XT2
Firmware version: 1.00 0x800066ae 0.0.0
Device id (pf/vf): 8086:57b0 / 8086:57ad
Driver version(out-tree): 5.21.5 (ixgbe)
Intel® Ethernet Network Adapter E610-XT4
Firmware version: 1.00 0x80004ef2 0.0.0
Device id (pf/vf): 8086:57b0 / 8086:57ad
Driver version(out-tree): 5.21.5 (ixgbe)
Intel® Ethernet Converged Network Adapter X710-DA4 (4x10G)
Firmware version: 9.50 0x8000f4c6 1.3682.0
Device id (pf/vf): 8086:1572 / 8086:154c
Driver version(out-tree): 2.26.8 (i40e)
Intel® Corporation Ethernet Connection X722 for 10GbE SFP+ (2x10G)
Firmware version: 6.50 0x80004216 1.3597.0
Device id (pf/vf): 8086:37d0 / 8086:37cd
Driver version(out-tree): 2.26.8 (i40e)
Driver version(in-tree): 5.14.0-427.13.1.el9_4.x86_64 (RHEL9.4)(i40e)
Intel® Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
Firmware version: 9.50 0x8000f4e1 1.3682.0
Device id (pf/vf): 8086:158b / 8086:154c
Driver version(out-tree): 2.26.8 (i40e)
Driver version(in-tree): 6.8.0-45-generic (Ubuntu24.04.1) / 5.14.0-427.13.1.el9_4.x86_64 (RHEL9.4)(i40e)
Intel® Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
Firmware version(PF): 9.50 0x8000f4fe 1.3682.0
Device id (pf/vf): 8086:1583 / 8086:154c
Driver version(out-tree): 2.26.8 (i40e)
Intel® Ethernet Controller I225-LM
Firmware version: 1.3, 0x800000c9
Device id (pf): 8086:15f2
Driver version(in-tree): 6.8.0-48-generic (Ubuntu24.04.1)(igc)
Intel® Ethernet Controller I226-LM
Firmware version: 2.14, 0x8000028c
Device id (pf): 8086:125b
Driver version(in-tree): 6.8.0-45-generic (Ubuntu24.04.1)(igc)