Skip to content

Releases: OpenDataPlane/odp

v1.50.0.0

31 Mar 16:47

Choose a tag to compare

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 updated odp_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_ref capability to indicate whether a pktio supports sending packets with shared data without using the dont_free flag.

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. Old odp_timer_alloc() function is used only for single shot timers.
  • Change odp_timer_periodic_start_t to only include first expiration tick. The remaining previous parameters have been moved to odp_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_BUSY return value to odp_timer_start(), odp_timer_restart(), and odp_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_FREQ to be used with periodic timer capability checks and timer pool creation. Old periodic timer type ODP_TIMER_TYPE_PERIODIC is renamed to ODP_TIMER_TYPE_PERIODIC_BASE_MUL to better reflect the differences between these two types.

Traffic Manager

  • Add odp_tm_capabilities_t.packet_ref capability 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.stats capability 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 to odp_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 into odp_queue_capability_t.

Scheduler

  • Add odp_schedule_capability_t.queue_stats capability 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_tmo parameter and matching capabilities odp_timer_capability_t.periodic.min/max_pending_tmo for 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() and odp_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

30 Dec 12:47

Choose a tag to compare

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_NEA4 and ODP_AUTH_ALG_SNOW5G_NIA4.
  • Change the description of odp_crypto_session_param_t.output_pool parameter 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 is ODP_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 type and aggr_config fields to odp_queue_info_t and document struct contents better for event aggregator queues.

Remove deprecated APIs

Crypto

  • Remove deprecated ODP_CRYPTO_OP_TYPE_LEGACY op type.

Packet IO

  • Remove deprecated odp_pktio_capability_t.tx_compl.mode_all field.
  • Remove deprecated odp_pktout_config_opt_t.bit.tx_compl_ena field.
  • Remove deprecated ODP_PACKET_TX_COMPL_ALL define.

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() and odp_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() and odp_timer_cancel() functions.

dmafwd

  • Add -s, --seg_free option 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 libconfig compatible 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 with odp_queue_enq_multi() and odp_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

08 Jul 13:21

Choose a tag to compare

OpenDataPlane (1.48.0.0)

Backward incompatible API changes

DMA

  • Move odp_dma_seg_t struct's segment hints from an anonymous union to odp_dma_seg_t.hints struct.

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 use odp_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.priority to PMRs, so that when multiple PMRs match a packet, a PMR with the highest priority is selected.
  • Add odp_cls_capability_t.max_pmr_priority capability for the maximum priority value.

CPU Mask

  • Add missing documentation for odp_cpumask_t type.

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_ANY define for letting implementation pick the used engine (enables backward compatibility).
    • Add engine_id field to odp_ml_config_t struct.
    • Add engine_id field to odp_ml_model_param_t struct.
    • Add engine_id field to odp_ml_model_info_t struct.

Packet

  • Move odp_packet_parse_result_flag_t struct definition from ABI to API header to guarantee application portability between different platforms.

Scheduler

  • Clarify that priority level odp_schedule_prio_t is 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_t type.

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_LINES config option.
  • Optimize single event odp_queue_enq() and odp_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_ns for adding extra wait time (odp_time_wait_ns()) per receive burst before forwarding the packets.
  • Add option -E, --memcpy for performing extra memcpy per receive burst before forwarding the packets.

queue_perf

  • Add option -b 0 for testing odp_queue_enq() and odp_queue_deq() functions.

sched_perf

  • Add new event forwarding mode -f N, where N > 1, for forwarding events within N identical queue groups.
  • Change -q parameter to be the number of default priority queues.
  • Add option -T, --thr_type for running the application with control threads instead of worker threads.
  • Add option -p 2 for using event vector pool.
  • Add option -P, --prefetch for prefetching a selected number of events.
  • Add option -C, --cache-stash for enabling cache stashing.

v1.47.0.0

16 Apr 12:55

Choose a tag to compare

OpenDataPlane (1.47.0.0)

Backward incompatible API changes

System

  • Allow implementations to return zero in odp_system_meminfo_t.total_overhead field if tracking memory usage overhead is not supported.

Backward compatible API changes

General

  • Add a paragraph in the API principles section in include/README to 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_profile for selecting aggregator enqueuing profile (odp_aggr_enq_profile_t), which can generate hints to an event aggregator. Support is advertised through odp_cls_capability_t.aggr capability. 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_t for freeing DMA source segments of data format ODP_DMA_FORMAT_PACKET. Support is advertised through odp_dma_capability_t.src_seg_free capability.
  • Add necessary fields to odp_dma_seg_t, odp_dma_transfer_param_t, and odp_dma_result_t for allocating DMA destination segments of data format ODP_DMA_FORMAT_PACKET. Support is advertised through odp_dma_capability_t.dst_seg_alloc capability.

Event

  • Add ODP_EVENT_VECTOR event type.
  • Add special ODP_EVENT_ANY event 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_VECTOR or ODP_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_VECTOR pool type for allocating event vectors.

Queue

  • Clarify that odp_queue_sched_type(), odp_queue_sched_prio(), odp_queue_sched_group(), and odp_queue_lock_count() functions can be used only with queues of ODP_QUEUE_TYPE_SCHED type.
  • 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_aggr and odp_queue_param_t.aggr) and the related capabilities are advertised using odp_event_aggr_capability_t struct. Event aggregators cannot be used simultaneously with the existing packet vector config in the same ODP application.
  • Add ODP_QUEUE_TYPE_AGGR queue 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 like odp_schedule_group_create(), but additionally accepts a set of parameters (odp_schedule_group_param_t). Parameters for predefined scheduling groups can be configured in odp_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.priority and 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_stats capability.

ABI changes

  • Increase ODP_SHM_NAME_LEN default 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() and odp_event_free_sp() implementations.

Performance Tests

stress

  • Add new -t option 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

20 Dec 15:24

Choose a tag to compare

OpenDataPlane (1.46.0.0)

Backward incompatible API changes

Crypto

  • Change the default crypto op type written by odp_crypto_session_param_init() to ODP_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_ALL define. Use ODP_PACKET_TX_COMPL_EVENT instead.
  • Deprecate odp_pktio_capability_t.tx_compl.mode_all field. Use mode_event instead.
  • Deprecate odp_pktout_config_opt_t.bit.tx_compl_ena field. Use odp_pktio_config_t.mode_event instead.

Timer

  • Deprecate odp_timer_pool_start() function. Use odp_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() and odp_log_func_t declarations.
  • 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_t type.

Helper (1.7.0)

Backward incompatible changes

  • Deprecate odph_linux_pthread_create() and odph_linux_pthread_join() functions which have been replaced by generic odph_thread_create() and odph_thread_join() functions.
  • Deprecate odph_linux_process_fork(), odph_linux_process_fork_n(), and odph_linux_process_wait_n() functions which have been replaced by generic odph_thread_create() and odph_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_static config file option.
  • Add support for DPDK v23.11 packet IO.

Example Applications

  • Remove odp_l2fwd_simple application.

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-export option or TEST_COMMON_EXPORT environment 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

09 Sep 08:53

Choose a tag to compare

OpenDataPlane (1.45.1.0)

Backward compatible API changes

Atomic

  • Add new odp_atomic_fetch_min_u32() and odp_atomic_fetch_min_u64() functions for fetching and updating minimum values of atomic uint32_t or uint64_t variables.
  • Add new odp_atomic_fetch_max_u32() and odp_atomic_fetch_max_u64() functions for fetching and updating maximum values of atomic uint32_t or uint64_t variables.
  • 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_t and uint16_t data 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_t documentation 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_t in the union in odp_u128_t when the type is available, so that users that use __uint128_t or a compatible type do not need to type pun.

ABI changes

  • Change ABI type for odp_bool_t from int to bool to comply with the clarified API documentation.

Implementation

  • Add new config file option system:cpu_id_static for selecting whether the implementation reads CPU identifier value from OS during every odp_cpu_id() call or only once during thread initialization (default).
  • Enable the -fno-strict-aliasing compiler 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-aliasing option 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-export option or TEST_COMMON_EXPORT environment 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() and odp_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 -U option to define custom L3 headers.
  • Add new none selection to the L4 protocol -N option.

v1.45.0.0

30 Apr 15:43

Choose a tag to compare

OpenDataPlane (1.45.0.0)

Backward incompatible API changes

Crypto

  • Increase size of all_bits fields of odp_crypto_cipher_algos_t and odp_crypto_auth_algos_t algorithm capability unions.

Packet

  • Change odp_packet_reset() specification to use new odp_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 new ODP_PROTO_STATS_NAME_LEN define.

Traffic Manager

  • Limit lengths of traffic manager object names to a new ODP_TM_NAME_LEN define.

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(), and odp_prefetch_l3().
  • Add more specific data prefetch variants for store: odp_prefetch_store_l1(), odp_prefetch_store_l2(), and odp_prefetch_store_l3().
  • Add streaming prefetch functions odp_prefetch_strm_l1() and odp_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.size specification 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 with odp_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 existing odph_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 if odph_thread_join() is used to wait for thread exit.

Example Applications

  • Remove odp_generator application which has been made redundant by odp_packet_gen.
  • Remove odp_timer_test application which has been made redundant by odp_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_map option for changing the default output port mappings for interfaces.
  • Add -C, --tx_compl option for configuring packet transmit completion.
  • Add -X, --flow_control option 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) value 0.

sched_perf

  • Add -S, --stress option 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 -a option (--fairness) to -F for 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

21 Feb 15:05

Choose a tag to compare

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-path configure option. See DEPENDENCIES for 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

22 Dec 09:07

Choose a tag to compare

OpenDataPlane (1.43.0.0)

Backward incompatible API changes

Classifier

  • Add new odp_cls_capability_t.max_pmr and odp_cls_capability_t.max_pmr_per_cos packet matching rule capabilities.
  • Rename odp_cls_capability_t.max_pmr_terms field to odp_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_t type. Use odp_timer_retval_t instead.
  • Deprecate odp_timer_pool_start() function in comments. Will be properly deprecated in an upcoming release. Use odp_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, except odp_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_FREE option 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() and odp_thread_worker_count_max() for reading the maximum number of control and worker threads.
  • Add new functions odp_thread_control_count() and odp_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_t enum.
  • 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, and ODP_CRYPTO_SES_CREATE_ERR_INV_AUTH defines.
  • Remove deprecated odp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_KEY_SIZE and odp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_IV_INVALID enums.
  • Remove deprecated odp_crypto_hw_err_t enum.
  • Remove deprecated odp_crypto_packet_result_t.ok field.

Scheduler

  • Remove deprecated ODP_SCHED_PRIO_HIGHEST, ODP_SCHED_PRIO_NORMAL, ODP_SCHED_PRIO_LOWEST, and ODP_SCHED_PRIO_DEFAULT defines.

Timer

  • Remove deprecated ODP_CLOCK_CPU and ODP_CLOCK_EXT defines.
  • Remove deprecated ODP_TIMER_TOOEARLY, ODP_TIMER_TOOLATE and ODP_TIMER_NOEVENT defines.
  • 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_t and odph_odpthread_params_t types.
  • Remove deprecated odph_thread_param_t.instance field.
  • Remove deprecated odph_odpthreads_create() and odph_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

23 Oct 09:41

Choose a tag to compare

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_crypto parameter 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_OOP crypto operation type that allows both basic and out-of-place operations in the same session.

Packet IO

  • Add new API define ODP_PKTIO_MAX_INDEX for 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_t default 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_timers description 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_HLEN define to ODPH_GTP_HLEN.
  • Rename ODP_IGMP_HLEN define to ODPH_IGMP_HLEN.
  • Remove unused ICMP defines and add missing ODPH_ prefix to the remaining
    ones.

Backward compatible changes

Macros

  • Add new ODPH_MIN() and ODPH_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 using cntvct_el0 virtual 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_sp application for measuring delays of ODP packet IO slow path functions.

dmafwd

  • Add new odp_dmafwd application 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_perf application for measuring ODP stash fast path API performance.

timer_perf

  • Add new mode (-m 2) for measuring odp_schedule() overhead while continuously restarting expiring timers.