Releases: OpenDataPlane/odp
Releases · OpenDataPlane/odp
v1.50.0.0
OpenDataPlane (1.50.0.0)
Backward incompatible API changes
IPsec
- Change
odp_ipsec_out_inline()function specification to state that packets that share data with other packets may not be sent using this function unless the pktout to be used has the relevant capability.
Packet
- Redefine the semantics of
odp_packet_ref()in a way that makes it simpler to support packet data sharing. Also, specify better rules for packet data layout manipulation operations, allowing private packet data also in the tail of packets that reference other packets. - Change
odp_packet_ref_pkt()function specification to match updatedodp_packet_ref()specification. - Change
odp_packet_has_ref()to indicate whether a packet is referenced by another packet, not whether the packet shares data with another packet. In particular,odp_packet_ref()returns a packet that shares data with the given packet but is not itself referenced by other packets.
Packet IO
- Add
odp_pktio_capability_t.packet_refcapability to indicate whether a pktio supports sending packets with shared data without using thedont_freeflag.
Timer
- Change periodic timer expiration event configuration. Instead of configuring a single event to be sent for periodic timer expirations, application now configures a timeout pool to be created as part of timer pool creation (
odp_timer_pool_param_t.periodic). - Add
odp_timer_periodic_param_init()function for initializing periodic timer parameters (odp_timer_periodic_param_t). - Add
odp_timer_periodic_alloc()function for allocating periodic timers. Oldodp_timer_alloc()function is used only for single shot timers. - Change
odp_timer_periodic_start_tto only include first expiration tick. The remaining previous parameters have been moved toodp_timer_periodic_param_t. - Change
odp_timer_periodic_ack()return values to not have a specific value for events from a cancelled timer (not last). - Add
ODP_TIMER_BUSYreturn value toodp_timer_start(),odp_timer_restart(), andodp_timer_periodic_start()functions. - Add alternative method for configuring periodic timer frequency for timer pools and timers. The new method introduces a new periodic timer type
ODP_TIMER_TYPE_PERIODIC_FREQto be used with periodic timer capability checks and timer pool creation. Old periodic timer typeODP_TIMER_TYPE_PERIODICis renamed toODP_TIMER_TYPE_PERIODIC_BASE_MULto better reflect the differences between these two types.
Traffic Manager
- Add
odp_tm_capabilities_t.packet_refcapability to indicate whether packets that reference other packets or are referenced by other packets can be enqueued to TM.
Backward compatible API changes
Event Vector
- Add
odp_event_aggr_capability_t.statscapability for supported statistics counters.
Packet
- Add
odp_packet_is_referencing()function for testing whether a packet references another packet but is not a static reference. - Clarify how
odp_packet_free()function operates with packets that participate in packet data sharing. - Clarify how
odp_packet_concat()function operates with packets that participate in packet data sharing. - Clarify that
odp_packet_copy()function returns always a normal packet, even if the source packet is a referencing packet. - Change
odp_packet_free_ctrl_set()function specification to allow usage with packets that participate in packet data sharing. - Clarify that even though
odp_packet_l2/l3/l4_offset_set()functions require the offset not exceed packet data length, later packet truncation and pulling may result in the offset exceeding packet data length. - Clarify that
odp_packet_l2/l3/l4_ptr()pointer value is undefined when l2/l3/l4 offset metadata of a packet is larger than the length of the packet e.g. after truncating the packet. - Fix
odp_packet_head()specification to not refer toodp_packet_l2_ptr()as data start.
Queue
- Add
odp_queue_len()function for reading the number of events currently in the queue, or in case of an aggregator queue handle, the number of events currently waiting for vector generation. - Add supported statistics counters (
odp_queue_stats_opt_t) for each plain queue type intoodp_queue_capability_t.
Scheduler
- Add
odp_schedule_capability_t.queue_statscapability for supported statistics counters.
Timer
- Add
odp_timeout_is_periodic()function for checking if a timeout is from a periodic timer. - Add new
odp_timer_pool_param_t.periodic.max_pending_tmoparameter and matching capabilitiesodp_timer_capability_t.periodic.min/max_pending_tmofor configuring flow control for periodic timer pools.
Implementation
- Optimize implementations for single event alloc functions (other event types than packet).
- Optimize implementations for single event free functions (other event types than packet).
Performance Tests
bench_queue
- Match test results output to API function names also in throughput mode.
- Add missing test for
odp_schedule_multi_wait()function.
bench_packet
- Add test for
odp_packet_is_referencing()function.
bench_timer
- Add tests for
odp_timeout_is_periodic()function.
pool_perf
- Add support for testing single event
odp_buffer_alloc/free()andodp_packet_alloc/free()functions by setting burst size to zero (--burst 0). - Change default burst size to 32.
sched_pktio
- Decrease packet pool size to 16k to reduce memory usage.
v1.49.0.0
OpenDataPlane (1.49.0.0)
Backward compatible API changes
Barrier
- Clarify that a barrier must be initialized before first use and can be reinitialized if not in use.
- Explicitly state that a barrier can be reused without initializing it again.
- Clarify that no more than N threads may be inside
odp_barrier_wait()for a barrier of N threads.
Classifier
- Clarify that event aggregation is performed automatically for classified packets when aggregation is enabled in CoS parameters.
- Clarify that classifier accessor functions return always base queue handles, not aggregator handles.
Crypto
- Add SNOW5G cipher and integrity algorithms
ODP_CIPHER_ALG_SNOW5G_NEA4andODP_AUTH_ALG_SNOW5G_NIA4. - Change the description of
odp_crypto_session_param_t.output_poolparameter to mention that the parameter is not used and will be deprecated. Specify that the parameter must be left to the default value and that the default value isODP_POOL_INVALID.
Packet IO
- Clarify that event aggregation is performed automatically for incoming packets when aggregation is enabled in packet input queue parameters.
- Clarify that
odp_pktin_event_queue()returns always base input queue handles, not aggregator handles.
Queue
- Add new
typeandaggr_configfields toodp_queue_info_tand document struct contents better for event aggregator queues.
Remove deprecated APIs
Crypto
- Remove deprecated
ODP_CRYPTO_OP_TYPE_LEGACYop type.
Packet IO
- Remove deprecated
odp_pktio_capability_t.tx_compl.mode_allfield. - Remove deprecated
odp_pktout_config_opt_t.bit.tx_compl_enafield. - Remove deprecated
ODP_PACKET_TX_COMPL_ALLdefine.
Timer
- Remove deprecated
odp_timer_pool_start()function.
Performance Tests
bench_buffer
- Add
-m, --mode <mode>option to control measurement mode (throughput/latency).
bench_packet
- Add new variants of
odp_packet_parse()tests with and without L4 checksumming. - Add new variants of
odp_event_user_area(),odp_event_user_flag_set()andodp_event_user_area_and_flag()tests. - Add tests for
odp_packet_l{2,3,4}_type()functions and for the packet flag getter functions. - Use packets/events of multiple types in a pseudorandom order in the new tests.
bench_pktio_sp
- Add
-T, --time <opt>option to choose measurement unit of benchmarked latencies. By default, latencies are now measured in cycles instead of nanoseconds.
bench_queue
- Add new microbenchmark for testing execution times of queue and related functions.
bench_timer
- Add
-m, --mode <mode>option to control measurement mode (throughput/latency). - Add tests for
odp_timer_start()andodp_timer_cancel()functions.
dmafwd
- Add
-s, --seg_freeoption to use DMA source segment free offload.
l2fwd
- Add
--wait_link <sec>option to wait for the links to come up before proceeding with the test. - Add
--schedule_prefetch <num>option to enable event prefetching. - Add
--cache_stash <val>option to enable cache stashing. - Increase maximum supported input/output queue count to 2048.
l2fwd_perf
- Add
--wait_link <sec>option to wait for the links to come up before proceeding with the test. - Increase maximum supported input/output queue count to 2048.
pipeline
- Add new pipeline test application, which takes a
libconfigcompatible configuration file and based on the configuration builds an ODP application.
queue_perf
- Add
-W, --wait_ns <ns>option to wait a number of nanoseconds between events being dequeued and enqueued. - Add
-M, --memcpy <num>option to perform memcpy of N bytes between events being dequeued and enqueued.
sched_latency
- Add burst mode
-b/--burst <num>, where events are enqueued and scheduled in bursts withodp_queue_enq_multi()andodp_schedule_multi(). - Add
-W, --wait-ns <num>option to simulate application work between schedule and queue enqueue calls.
sched_pktio
- Add
--wait_link <sec>option to wait for the links to come up before proceeding with the test.
v1.48.0.0
OpenDataPlane (1.48.0.0)
Backward incompatible API changes
DMA
- Move
odp_dma_seg_tstruct's segment hints from an anonymous union toodp_dma_seg_t.hintsstruct.
Event Vector
- Change
odp_event_vector_type()function to not return the type of events actually stored in the event vector, but the event type stored in event vector metadata. - Change
odp_event_vector_tbl()function specification to require that applications useodp_event_vector_type_set()to update the event type of vector after vector table modifications.
Backward compatible API changes
Classifier
- Add configurable priority
odp_pmr_create_opt_t.priorityto PMRs, so that when multiple PMRs match a packet, a PMR with the highest priority is selected. - Add
odp_cls_capability_t.max_pmr_prioritycapability for the maximum priority value.
CPU Mask
- Add missing documentation for
odp_cpumask_ttype.
Crypto
- Add
odp_crypto_session_print()function for printing implementation defined information about a crypto session to the ODP log.
DMA
- Add possibility to configure cache stashing for destination segments using segment hints (
odp_dma_seg_t.hints).
Event Vector
- Add
odp_event_vector_type_set()function for setting the type of events stored in an event vector. - Clarify that event aggregators try to set the event type according to the event types they put in the event vector.
ML
- Change ML API to support systems with multiple ML engines:
- Add
odp_ml_num_engines()function for querying the number of supported ML engines. - Add
odp_ml_engine_capability()function for exposing engine specific capabilities. - Change
odp_ml_config()function specification to state that it must be called once per used ML engine ID (odp_ml_config_t.engine_id). - Add
ODP_ML_ENGINE_ANYdefine for letting implementation pick the used engine (enables backward compatibility). - Add
engine_idfield toodp_ml_config_tstruct. - Add
engine_idfield toodp_ml_model_param_tstruct. - Add
engine_idfield toodp_ml_model_info_tstruct.
- Add
Packet
- Move
odp_packet_parse_result_flag_tstruct definition from ABI to API header to guarantee application portability between different platforms.
Scheduler
- Clarify that priority level
odp_schedule_prio_tis always a non-negative integer value. - Add global (
odp_schedule_config_t) and group level (odp_schedule_group_param_t) scheduler configuration options and related capabilities to signal maximum number of groups and priorities that need to be supported.
Thread
- Add missing documentation for
odp_thrmask_ttype.
Implementation
- Add extra padding to implementation internal ring struct to avoid false sharing-like effects from hardware prefetchers. These rings are used within pool, stash, and scheduler API implementations, so their performance may be affected. The amount of added extra padding can be adjusted with
CONFIG_CACHE_PAD_LINESconfig option. - Optimize single event
odp_queue_enq()andodp_queue_deq()function implementations for plain queues. - Optimize single event
odp_queue_enq()function implementation for scheduled queues. - Optimize queue implementation by storing pointers to events instead of indices.
- Add support for DPDK v24.11 packet IO and drop support for EOL DPDK v21.11.
Performance Tests
bench_event_vector
- Add new microbenchmark application for event vector fast path API functions.
bench_misc
- Add support for
odp_prefetch_x()functions.
l2fwd
- Add option
-W, --wait_nsfor adding extra wait time (odp_time_wait_ns()) per receive burst before forwarding the packets. - Add option
-E, --memcpyfor performing extra memcpy per receive burst before forwarding the packets.
queue_perf
- Add option
-b 0for testingodp_queue_enq()andodp_queue_deq()functions.
sched_perf
- Add new event forwarding mode
-f N, where N > 1, for forwarding events within N identical queue groups. - Change
-qparameter to be the number of default priority queues. - Add option
-T, --thr_typefor running the application with control threads instead of worker threads. - Add option
-p 2for using event vector pool. - Add option
-P, --prefetchfor prefetching a selected number of events. - Add option
-C, --cache-stashfor enabling cache stashing.
v1.47.0.0
OpenDataPlane (1.47.0.0)
Backward incompatible API changes
System
- Allow implementations to return zero in
odp_system_meminfo_t.total_overheadfield if tracking memory usage overhead is not supported.
Backward compatible API changes
General
- Add a paragraph in the API principles section in
include/READMEto describe parameter lifetimes of ODP API functions: Structures passed by reference (and structures referred by them) do not need to outlive the API call, unless otherwise noted in the API.
Classifier
- Clarify the presumed intent of back pressure API by specifying how exactly the back pressure threshold for any given pktio + pool/queue + pfc_level -tuple is derived from the configuration.
- Add CoS parameter
odp_cls_cos_param_t.aggr_enq_profilefor selecting aggregator enqueuing profile (odp_aggr_enq_profile_t), which can generate hints to an event aggregator. Support is advertised throughodp_cls_capability_t.aggrcapability. The hints can affect e.g. the boundaries of vector events generated by an event aggregator.
CPU
- Add
odp_cpu_cycles_strict()function for reading current CPU cycle count value more strictly in the program order.
DMA
- Add necessary fields to
odp_dma_transfer_param_tfor freeing DMA source segments of data formatODP_DMA_FORMAT_PACKET. Support is advertised throughodp_dma_capability_t.src_seg_freecapability. - Add necessary fields to
odp_dma_seg_t,odp_dma_transfer_param_t, andodp_dma_result_tfor allocating DMA destination segments of data formatODP_DMA_FORMAT_PACKET. Support is advertised throughodp_dma_capability_t.dst_seg_alloccapability.
Event
- Add
ODP_EVENT_VECTORevent type. - Add special
ODP_EVENT_ANYevent type, which does not match to any particular event type and can only be used when explicitly documented by the API. - Change
odp_event_free()specification to state that in case of vector events (ODP_EVENT_VECTORorODP_EVENT_PACKET_VECTOR) it frees the vector and all events or packets stored inside it.
Event Vector
- Add new generic event vector APIs. Event vectors can contain events of any type, as opposed to the existing packet vectors, which can contain only packets.
ML
- Add quantization parameters to input (
odp_ml_input_info_t.quant_info) and output (odp_ml_output_info_t.quant_info) info. Implementation may optionally provide these parameters, if they are available for a given model.
Pool
- Add
ODP_POOL_EVENT_VECTORpool type for allocating event vectors.
Queue
- Clarify that
odp_queue_sched_type(),odp_queue_sched_prio(),odp_queue_sched_group(), andodp_queue_lock_count()functions can be used only with queues ofODP_QUEUE_TYPE_SCHEDtype. - Add event aggregators that are associated with queues and have the same life time. Event aggregators are queues which try to aggregate multiple events into event vectors, which are then enqueued to the underlying queue. Event aggregators are configured through queue parameters (
odp_queue_param_t.num_aggrandodp_queue_param_t.aggr) and the related capabilities are advertised usingodp_event_aggr_capability_tstruct. Event aggregators cannot be used simultaneously with the existing packet vector config in the same ODP application. - Add
ODP_QUEUE_TYPE_AGGRqueue type. - Add
odp_queue_aggr()function for getting a queue handle of an event aggregator associated with a queue. - Add
odp_aggr_enq_param_init()function for initializing event aggregator enqueuing parameters. - Add
odp_queue_enq_aggr()function that can be used for passing hints to an event aggregator.
Scheduler
- Add
odp_schedule_group_param_init()function for initializing schedule group parameters. - Add
odp_schedule_group_create_2()function, which is otherwise likeodp_schedule_group_create(), but additionally accepts a set of parameters (odp_schedule_group_param_t). Parameters for predefined scheduling groups can be configured inodp_schedule_config(). - Add possibility to configure cache stashing (
odp_schedule_group_param_t.cache_stash_hints) at schedule group and/or priority levels. Stashing data of to-be-scheduled events and queues may improve performance in some workloads.
Timer
- Add new timer pool parameter
odp_timer_pool_param_t.priorityand related capabilities. Timers allocated from pools with a higher priority value are served with higher priority than timers allocated from pools with a lower priority value.
Traffic Manager
- Add
odp_tm_node_stats()function for reading TM node specific statistics counters. The supported counters are advertised in
odp_tm_level_capabilities_t.node_statscapability.
ABI changes
- Increase
ODP_SHM_NAME_LENdefault value to 64.
Helper (1.7.1)
Backward compatible changes
- Add
ODPH_DIV_ROUNDUP()macro for dividing two numbers and rounding up the result to the closest integer. - Add
ODPH_ROUNDUP_MULTIPLE()macro for rounding up a value to a multiple of another value.
Implementation
- Disable basic scheduler implementation's ordered queue reorder stash config file option (
sched_basic:order_stash_size) by default. - Simplify
odp_version_impl_str()output and include commit hash (if available) in it. - Optimize
odp_packet_free_sp()andodp_event_free_sp()implementations.
Performance Tests
stress
- Add new
-toption for selecting timer mode (shared/private).
timer_accuracy
- Add a new "concurrency" mode (
-m 4) that performs timer starts and cancels across multiple threads. This mode aims to uncover concurrency issues in the timer implementation, particularly with a short period, where timer expirations, starts, and cancels frequently occur close to each other.
timer_stress
- Add new tool for benchmarking timer handling performance in different scenarios. Tester currently supports modes for single-shot (with and without cancelling) and periodic timers.
v1.46.0.0
OpenDataPlane (1.46.0.0)
Backward incompatible API changes
Crypto
- Change the default crypto op type written by
odp_crypto_session_param_init()toODP_CRYPTO_OP_TYPE_BASIC. - Deprecate old default crypto op type
ODP_CRYPTO_OP_TYPE_LEGACY.
Packet IO
- Modify certain details of IP and TCP Large Send Offload (LSO), specify missing details, add restrictions, and clarify the API in general.
- Deprecate
ODP_PACKET_TX_COMPL_ALLdefine. UseODP_PACKET_TX_COMPL_EVENTinstead. - Deprecate
odp_pktio_capability_t.tx_compl.mode_allfield. Usemode_eventinstead. - Deprecate
odp_pktout_config_opt_t.bit.tx_compl_enafield. Useodp_pktio_config_t.mode_eventinstead.
Timer
- Deprecate
odp_timer_pool_start()function. Useodp_timer_pool_start_multi()instead.
Backward compatible API changes
Event
- Clarify
odp_event_free()documentation by stating that it frees also the packets stored inside packet vectors.
Init
- Add printf format check to
odp_override_log()andodp_log_func_tdeclarations. - Add
odp_log_fn_get()function, which returns the current log function. - Add
odp_abort_fn_get()function, which returns the abort function.
Packet IO
- Add a new custom LSO operation (
ODP_LSO_WRITE_BITS) for setting and clearing selected bits in first/middle/last segment when segmentation occurs. - Specify that all segments, except the last one, have the maximum payload length with the custom LSO protocol (
ODP_LSO_PROTO_CUSTOM).
Remove deprecated APIs
Timer
- Remove deprecated
odp_timeout_fresh()function. - Remove deprecated
odp_timer_set_ttype.
Helper (1.7.0)
Backward incompatible changes
- Deprecate
odph_linux_pthread_create()andodph_linux_pthread_join()functions which have been replaced by genericodph_thread_create()andodph_thread_join()functions. - Deprecate
odph_linux_process_fork(),odph_linux_process_fork_n(), andodph_linux_process_wait_n()functions which have been replaced by genericodph_thread_create()andodph_thread_join()functions.
Backward compatible API changes
- Explicitly state that ODP must be initialized before calling helper functions and document exceptions to this rule individually.
- Improve debug macro documentation.
Implementation
- Remove scalable scheduler implementation.
- Remove
system:cpu_id_staticconfig file option. - Add support for DPDK v23.11 packet IO.
Example Applications
- Remove
odp_l2fwd_simpleapplication.
Performance Tests
crypto
- Use the basic crypto operation type instead of now deprecated legacy operation type.
- Remove explicit encrypt in-place operation option (
-n).
l2fwd_perf
- New minimal performance optimized L2 forwarding benchmark application. Aim is to keep the tester as simple as possible in order to provide a stable benchmarking utility with comparable results across releases.
ml_perf
- New machine learning (ML) performance test application. The application measures nanoseconds used for various ML operations, such as creating and destroying a model, loading and unloading a model, and inferencing.
packet_gen
- Add new option (
-X) for L4 checksum offloading. - Add new option (
-T) for transmitting packets with LSO.
queue_perf
- Add possibility to export test results into a .csv file by using
--test-common-exportoption orTEST_COMMON_EXPORTenvironment variable. - Add new option (
-p) for using private queues per worker. - Add pair test mode (
-m 1) where events are moved between queue pairs connecting two or more workers.
v1.45.1.0
OpenDataPlane (1.45.1.0)
Backward compatible API changes
Atomic
- Add new
odp_atomic_fetch_min_u32()andodp_atomic_fetch_min_u64()functions for fetching and updating minimum values of atomicuint32_toruint64_tvariables. - Add new
odp_atomic_fetch_max_u32()andodp_atomic_fetch_max_u64()functions for fetching and updating maximum values of atomicuint32_toruint64_tvariables. - Add functions for atomically setting and clearing bits in 32-bit atomic variables:
odp_atomic_bit_set_u32(),odp_atomic_bit_fetch_set_u32(),odp_atomic_bit_clr_u32(),odp_atomic_bit_fetch_clr_u32(),odp_atomic_bit_set_rel_u32(),odp_atomic_bit_clr_rel_u32() - Add functions for atomically setting and clearing bits in 64-bit atomic variables:
odp_atomic_bit_set_u64(),odp_atomic_bit_fetch_set_u64(),odp_atomic_bit_clr_u64(),odp_atomic_bit_fetch_clr_u64(),odp_atomic_bit_set_rel_u64(),odp_atomic_bit_clr_rel_u64() - Add flags for the new atomic functions into
odp_atomic_op_t.
CPU
- Add instruction prefetch function
odp_prefetch_l1i().
DMA
- Add debug function
odp_dma_transfer_id_to_u64()for getting a printable value for a DMA transfer identifier.
Init
- Add debug function
odp_instance_to_u64()for getting a printable value for an ODP instance handle.
ML
- Add functions for supporting quantization of
int16_tanduint16_tdata types:odp_ml_fp32_to_uint16(),odp_ml_fp32_from_uint16(),odp_ml_fp32_to_int16(),odp_ml_fp32_from_int16()
Packet
- Add debug function
odp_packet_tx_compl_to_u64()for getting a printable value for a Tx completion handle. - Clarify
odp_packet_reset_max_len()documentation to state that the returned length may be less than the current packet data length if data length has been increased by utilizing head- or tailroom.
Scheduler
- Add debug function
odp_schedule_group_to_u64()for getting a printable value for a schedule group handle.
Std
- Clarify
odp_bool_tdocumentation by stating how the data type can by used with standard C booleans and what is considered true/false. - Add a field of type
__uint128_tin the union inodp_u128_twhen the type is available, so that users that use__uint128_tor a compatible type do not need to type pun.
ABI changes
- Change ABI type for
odp_bool_tfrominttoboolto comply with the clarified API documentation.
Implementation
- Add new config file option
system:cpu_id_staticfor selecting whether the implementation reads CPU identifier value from OS during everyodp_cpu_id()call or only once during thread initialization (default). - Enable the
-fno-strict-aliasingcompiler option. Some sections of code in ODP deliberately access the same data via pointers to different types, which is undefined behavior in C. The-fno-strict-aliasingoption prevents the compiler from making assumptions about aliasing in these instances.
Example Applications
ml_run
- Add new example application, which loads a given ML model file, runs inference using a given input file and compares the output to a given reference file.
Performance Tests
- Add the possibility to export test results into a .csv file by using
--test-common-exportoption orTEST_COMMON_EXPORTenvironment variable. Exporting results is supported by the following applications:atomic_perf,bench_buffer,bench_misc,bench_timer,bench_packet,bench_pktio_sp,dma_perf,lock_perf,pool_perf,sched_latency,sched_perf,stash_perf,timer_accuracy
bench_packet
- Add tests for new
odp_packet_reset_meta()andodp_packet_reset_max_len()functions. - Add tests for event API fast path functions on packets.
icache_perf
- Add new performance test application to measure CPU performance when application code size exceeds L1 instruction cache size.
packet_gen
- Add new
-Uoption to define custom L3 headers. - Add new
noneselection to the L4 protocol -N option.
v1.45.0.0
OpenDataPlane (1.45.0.0)
Backward incompatible API changes
Crypto
- Increase size of
all_bitsfields ofodp_crypto_cipher_algos_tandodp_crypto_auth_algos_talgorithm capability unions.
Packet
- Change
odp_packet_reset()specification to use newodp_packet_reset_max_len()function for maximum packet data length value.
Protocol Stats
- Limit length of
odp_proto_stats_create()object name parameter to a newODP_PROTO_STATS_NAME_LENdefine.
Traffic Manager
- Limit lengths of traffic manager object names to a new
ODP_TM_NAME_LENdefine.
Backward compatible API changes
Common
- Make mentions of maximum string lengths clear and consistent and always state that the null character is included.
CPU
- Add more specific data prefetch variants:
odp_prefetch_l1(),odp_prefetch_l2(), andodp_prefetch_l3(). - Add more specific data prefetch variants for store:
odp_prefetch_store_l1(),odp_prefetch_store_l2(), andodp_prefetch_store_l3(). - Add streaming prefetch functions
odp_prefetch_strm_l1()andodp_prefetch_store_strm_l1().
Crypto
- Add SHA-3 based cryptographic hash functions and HMACs based on them.
- Add SNOW-V cipher algorithm and SNOW-V-GCM AEAD algorithm.
- Add SM3 cryptographic hash function and a HMAC based on it.
- Add SM4 cipher in ECB, CBC, CTR, GCM, CCM and GMAC modes.
Event
- Add
odp_event_user_flag_set()function for setting/clearing event's user flag value.
Packet
- Clarify
odp_packet_buf_len()specification to state that total packet buffer length includes also headroom and tailroom lengths. - Clarify
odp_packet_reset()specification to state that packet data start is adjusted according to pool parameters, user area content is maintained, and packet data persistence is not guaranteed. - Add
odp_packet_reset_meta()function for resetting only packet metadata without modifying packet data.
Pool
- Clarify in
odp_pool_param_t.buf.sizespecification that the actual buffer size may be rounded up by the implementation. Also, remove the limitation that an application will never store more than 'size' bytes in each buffer, which conflicted withodp_buffer_size()API.
Helper (1.6.0)
Backward incompatible changes
- Remove unused cuckoo table API.
- Remove unused hash table API.
- Remove unused linear table API.
- Remove unused IP lookup table API.
- Remove unused table interface API.
Backward compatible changes
Stress
- Add CPU stress functions (
odph_stress_pow2_u32(),odph_stress_log2_u32(),odph_stress_sqrt_u32(),odph_stress_sqrt_f32()) which may be used in test applications to create dummy CPU load. Functions are not highly optimized but try to stress various parts of CPU instruction set.
String
- Add
odph_strcpy()function, which guarantees termination of the destination string.
Thread
- Add
odph_thread_join_result()function which is similar to the existingodph_thread_join()but outputs results of joined threads. - Clarify in
odph_thread_create()specification that the output thread table elements must not be modified during the lifetime of the threads ifodph_thread_join()is used to wait for thread exit.
Example Applications
- Remove
odp_generatorapplication which has been made redundant byodp_packet_gen. - Remove
odp_timer_testapplication which has been made redundant byodp_timer_accuracy.
Miscellaneous Tests
dyn_workers
- Add a simple dynamic worker tester that can be used to verify the ability of an ODP implementation to dynamically add and remove workers from one ODP application to another.
Performance Tests
l2fwd
- Add
-O, --output_mapoption for changing the default output port mappings for interfaces. - Add
-C, --tx_comploption for configuring packet transmit completion. - Add
-X, --flow_controloption for enabling reception and/or transmission of Ethernet pause frames.
packet_gen
- Enable running the application with only RX or TX threads.
- Add support for transmitting TCP packets (
-N, --proto). The application doesn't implement actual TCP protocol, but simply transmits packets with valid TCP headers at a selected rate.
pool_latency
- Enable running the application indefinitely with special round count (
-r) value0.
sched_perf
- Add
-S, --stressoption for selecting stress function(s) to be used on event data. Functions add various amount of CPU load to each event to simulate application data processing. - Rename
-aoption (--fairness) to-Ffor better match of short and long option names.
stress
- Add simple memory copy loop and square root calculation test modes (
-m, --mode) to generate CPU load.
v1.44.0.0
OpenDataPlane (1.44.0.0)
Backward compatible API changes
ML
- Add new API module for Machine Learning offload.
Implementation
ML
- Implement the API using ONNX Runtime. A non-standard ONNX install path can be passed with
--with-ort-pathconfigure option. SeeDEPENDENCIESfor additional information.
Example Applications
debug
- Print packet IO link information.
- Add packet IO interface name option (
-i).
packet_dump
- Add support for measuring packet input delay.
Performance Tests
l2fwd
- Add packet input timestamping option (
-T). - Add packet data prefetch option (
-F). - Add packet data read option (
-R). - Add packet print option (
-V).
pool_latency
- New pool latency tester application for profiling pool allocation and free latencies under different load patterns.
sched_perf
- Add options to read (
-u) and modify (-U) event user area contents per event reception. - Run application indefinitely when the number of events to schedule option (
-s) is set to zero.
v1.43.0.0
OpenDataPlane (1.43.0.0)
Backward incompatible API changes
Classifier
- Add new
odp_cls_capability_t.max_pmrandodp_cls_capability_t.max_pmr_per_cospacket matching rule capabilities. - Rename
odp_cls_capability_t.max_pmr_termsfield toodp_cls_capability_t.max_terms_per_pmr.
Time
- Change local/global time specification to allow timestamp values to start from an implementation defined value, instead of always starting from zero.
Timer
- Deprecate
odp_timer_set_ttype. Useodp_timer_retval_tinstead. - Deprecate
odp_timer_pool_start()function in comments. Will be properly deprecated in an upcoming release. Useodp_timer_pool_start_multi()instead. - Deprecate
odp_timeout_fresh()function. - Change
odp_timer_free()specification to remove the possibility to free a timer that is running. - Change
odp_timer_pool_create()specification to state that timer pool handles must not be used by other APIs, exceptodp_timer_pool_to_u64(), before being started.
Backward compatible API changes
Event
- Add
odp_event_pool()function, which returns a handle to the pool where the event was allocated from.
Hints
- Fix a type conversion issue in
odp_unlikely()implementation.
Packet
- Clarify that
ODP_PACKET_FREE_CTRL_DONT_FREEoption does not affect direct packet free calls. - Clarify that packet IO time is specific to the packet IO interface.
Pool
- Clarify that disabled/unused per thread statistics counters will not necessarily be zeroed by
odp_pool_stats().
Scheduler
- Clarify event ordering in ordered scheduling contexts.
Thread
- Add new functions
odp_thread_control_count_max()andodp_thread_worker_count_max()for reading the maximum number of control and worker threads. - Add new functions
odp_thread_control_count()andodp_thread_worker_count()for reading the current number of control and worker threads.
Time
- Add
odp_time_add_ns()function for adding nanoseconds into a time value. - Add
odp_time_startup()function for requesting ODP instance startup time. - Clarify
odp_time_sum()specification by adding a notification that resulting timestamp may wrap around if large timestamp values are summed up.
Timer
- Add
odp_timer_pool_start_multi()function for starting timer pools, which takes the to-be-started pool handles as arguments. - Clarify that timer ticks and related nanosecond values are specific to a timer pool. Also, state explicitly that those may not start from zero.
Remove deprecated APIs
Classifier
- Remove deprecated
odp_cls_drop_tenum. - Remove deprecated
odp_cos_drop_set()function. - Remove deprecated
odp_cos_drop()function. - Remove deprecated
odp_cos_with_l2_priority()function. - Remove deprecated
odp_cos_with_l3_qos()function.
Crypto
- Remove deprecated
ODP_CRYPTO_SES_CREATE_ERR_NONE,ODP_CRYPTO_SES_CREATE_ERR_ENOMEM,ODP_CRYPTO_SES_CREATE_ERR_INV_CIPHER, andODP_CRYPTO_SES_CREATE_ERR_INV_AUTHdefines. - Remove deprecated
odp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_KEY_SIZEandodp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_IV_INVALIDenums. - Remove deprecated
odp_crypto_hw_err_tenum. - Remove deprecated
odp_crypto_packet_result_t.okfield.
Scheduler
- Remove deprecated
ODP_SCHED_PRIO_HIGHEST,ODP_SCHED_PRIO_NORMAL,ODP_SCHED_PRIO_LOWEST, andODP_SCHED_PRIO_DEFAULTdefines.
Timer
- Remove deprecated
ODP_CLOCK_CPUandODP_CLOCK_EXTdefines. - Remove deprecated
ODP_TIMER_TOOEARLY,ODP_TIMER_TOOLATEandODP_TIMER_NOEVENTdefines. - Remove deprecated
odp_timer_set_abs()function. - Remove deprecated
odp_timer_set_rel()function.
Helper (1.5.0)
Backward incompatible changes
- Remove deprecated
odph_odpthread_tandodph_odpthread_params_ttypes. - Remove deprecated
odph_thread_param_t.instancefield. - Remove deprecated
odph_odpthreads_create()andodph_odpthreads_join()functions.
Implementation
Ticketlock
- Add WFE based aarch64 ticketlock implementation (
--enable-wfe-locks) for power saving.
Performance Tests
dma_perf
- Add option for using software memory copy in addition to DMA transfers.
- Add options for using sparse packets and memory as the transfer segment type.
v1.42.1.0
OpenDataPlane (1.42.1.0)
Backward compatible API changes
Classifier
- Add new
odp_cls_pmr_create_multi()function for creating multiple packet matching rules with a single call. - Add new
odp_cls_pmr_destroy_multi()function for destroying multiple PMRs with a single call. - Add new
odp_cls_cos_create_multi()function for creating multiple class-of-services with a single call. - Add new
odp_cos_destroy_multi()function for destroying multiple CoSes with a single call.
Crypto
- Clarify packet ordering of async crypto ops (
odp_crypto_op_enq()). - Add
odp_crypto_packet_op_param_t.null_cryptoparameter that tells that a packet should be processed as if the configured algorithms were null cipher and null auth algorithm. - Add
ODP_CRYPTO_OP_TYPE_BASIC_AND_OOPcrypto operation type that allows both basic and out-of-place operations in the same session.
Packet IO
- Add new API define
ODP_PKTIO_MAX_INDEXfor maximum packet IO interface index.
Queue
- Add new
odp_queue_create_multi()function for creating multiple queues with a single call. - Add new
odp_queue_destroy_multi()function for destroying multiple queues with a single call. - Clarify
odp_queue_param_tdefault value specification.
System
- Add enumerations for ARM ISA versions ARMv8.8-A, ARMv8.9-A, and ARMv9.3-A.
Timer
- Change
odp_timer_pool_param_t.num_timersdescription to allow applications to attempt to allocate more timers than there are in a timer pool. - Add new
odp_timeout_alloc_multi()function for allocating multiple timeouts with a single call. - Add new
odp_timeout_free_multi()function for freeing multiple timeouts with a single call.
Helper (1.4.0)
Backward incompatible changes
Protocols
- Rename
ODP_GTP_HLENdefine toODPH_GTP_HLEN. - Rename
ODP_IGMP_HLENdefine toODPH_IGMP_HLEN. - Remove unused ICMP defines and add missing
ODPH_prefix to the remaining
ones.
Backward compatible changes
Macros
- Add new
ODPH_MIN()andODPH_MAX()helper macros for comparison operations. - Add new
ODPH_ARRAY_SIZE()helper macro for calculating array size. - Add new
ODPH_ABS()helper macro for calculating the absolute value of a
signed variable.
Implementation
CPU
- Optimize
odp_cpu_cycles()performance on aarch64 by implementing the function usingcntvct_el0virtual counter register.
Packet IO
- Transmitting packet vectors is not supported by the current API, so remove the code from the implementation. This may improve performance when transmitting packets through event queues.
- Add support for packet transmit completion check through polling (
ODP_PACKET_TX_COMPL_POLL).
Example Applications
sysinfo
- Add prints for various missing capabilities (e.g. pool, packet IO, timer).
timer_accuracy
- Add new (
-c, --count) option to set the CPU count. - Add new (
-t, --queue_type) option to set the queue sync type. - Add new (
-q, --num_queue) option to set the number of queues. - Add new (
-G, --sched_groups) option to use a dedicated schedule group for each queue.
Performance Tests
bench_pktio_sp
- Add new
odp_bench_pktio_spapplication for measuring delays of ODP packet IO slow path functions.
dmafwd
- Add new
odp_dmafwdapplication for comparing packet forwarding throughput when received packets are first copied either with software memory copy or with DMA offload and then echoed back to sender(s).
packet_gen
- Add new (
-m, --tx_mode) option for selecting how packets are transmitted.
stash_perf
- Add new
odp_stash_perfapplication for measuring ODP stash fast path API performance.
timer_perf
- Add new mode (
-m 2) for measuringodp_schedule()overhead while continuously restarting expiring timers.