Thanks Maxim. FF
On Tue, 4 Dec 2018 at 16:54, Maxim Uvarov <maxim.uva...@linaro.org> wrote: > v1.20.0.0 has been released and api-next branch is rebased on top of it. > > == OpenDataPlane (1.20.0.0) > === Summary of Changes > ODP v1.20.0.0 is a refresh of ODP, incorporating significant > configurability > and performance improvements as well as new APIs and API restructures. > > ==== APIs > ===== Symbol `ODP_SHM_NULL` Removed. > An invalid `odp_shm_t` has the value `ODP_SHM_INVALID`, consistent with > other > ODP types. The legacy synonym `ODP_SHM_NULL` is now removed for > consistency. > > ===== New 3GPP Crypto Algorithm Support > New support for 3GPP crypto algorithms is added by defining symbols for > > * `ODP_CIPHER_ALG_KASUMI_F8` > * `ODP_CIPHER_ALG_SNOW3G_UEA2` > * `ODP_CIPHER_ALG_ZUC_EEA3` > > In addition new authentication algorithm symbols are defined for > > * `ODP_AUTH_ALG_KASUMI_F9` > * `ODP_AUTH_ALG_SNOW3G_UIA2` > * `ODP_AUTH_ALG_ZUC_EIA3` > > These values are returned as ODP capabilities as well as being accepted in > crypto session creation for implementations that indicate support for them. > > ===== Crypto Capability for Bitwise Operation > The new `bit_mode` capability Boolean is added to the > `odp_crypto_cipher_capability_t` struct to indicate that an implementation > supports operating in bit mode. When operating in bit > mode, field offsets and lengths are expressed in terms of bits rather than > bytes. However, such lengths must always be specified in multiples of 8. > > ===== Improved Crypto Spec Documentation > The ODP crypto API specification is tightened to specify default values for > cipher and authentication algorithms. Also documented when key and IV > parameters need to be set. > > ===== IPsec Extensions > IPsec requires "salt" (extra keying material) when the GMAC authentication > algorithm is used. To accommodate this the `auth_key_extra` field is added > to > the `odp_ipsec_crypto_param_t` struct and documentation is added clarifying > when this field is needed and how it should be used. > > ===== Classifier Type Rename > The `odp_pmr_t` type name for an invalid value is renamed from > `ODP_PMR_INVAL` > to `ODP_PMR_INVALID` for consistency with the rest of ODP type names. The > old > symbol is still available when ODP is configured with > `--enable-deprecated`. > > ===== New API for Packet Event Subtypes > The `odp_packet_subtype()` API is added that returns the subtype of a > packet > event directly. > > ===== Streamlined Packet Parsing Results > The `odp_packet_parse_result()` API is added that returns the result of > packet parsing as a single `odp_packet_parse_result_t` struct. This can > offer efficiency improvements for applications that need all parse results > rather than making individual parse result calls. > > ===== PktIO Extensions to Support per-Queue Configuration > PktIO interfaces support multiple input queues to enable increased > parallelism > in I/O processing. Previously, all of these input queues were required to > belong to the same scheduler group. The `odp_pktin_queue_param_t` struct is > now extended with an optional `odp_pktin_queue_param_ovr_t` struct that > permits individual pktin queues to be assigned to separate scheduler > groups. > This may permit improved performance for advanced application use cases. > > ===== Timer Pool Capabilities > The `odp_timer_capability_t` struct is extended to return three additional > pieces of information: > > `max_pools_combined`:: > The total number of timer pools that can be created combining different > clock sources > > `max_pools`:: > The maximum number of timer pools for a given clock source. > > `max_timers`:: > The maximum number of timers in a single pool. A zero value means number is > limited only by available memory. > > ===== Add Scheduler mix/max/default Priority Functions > Three new APIs: `odp_schedule_max_prio()`, `odp_schedule_min_prio()`, and > `odp_schedule_default_prio()` are added that return the min, max, and > default > values specified for the `prio` field in the `odp_schedule_param_t` struct. > > With the introduction of these scheduling priority functions the previously > defined macros (`ODP_SCHED_PRIO_HIGHEST`, `ODP_SCHED_PRIO_NORMAL`, and > `ODP_SCHED_PRIO_LOWEST`) are now deprecated and should no longer be used. > > ===== Specification of `odp_schedule_prio_t` as an `int` > Previously, the `odp_schedule_prio_t` type definition was left to each > implementation. With the addition of explicit schedule priority ranges, > this > type is now specified to be an `int` to permit efficient implementation > (including inlining) of these functions. > > ====== New Scheduler APIs > The new scheduler APIs `odp_schedule_multi_wait()` and > `odp_schedule_multi_no_wait()` are added to provide more efficiently > implementable versions of these functions. The existing scheduler APIs > remain > unchanged. These new APIs can simply provide a fastpath for some > applications/implementations as an alternative to specifying a parameter on > `odp_schedule_multi()`. > > ===== Memory Model in `odp_init_global()` > The `odp_init_t` parameter passed to `odp_init_global()` is extended to > add the `mem_model` field. This field is defined by the new > `odp_mem_model_t` > struct and is used to specify whether the application will be using a > thread (`ODP_MEM_MODEL_THREAD`) or process (`ODP_MEM_MODEL_PROCESS`) > memory model. The default is a thread model is used for compatibility with > previous levels of ODP. > > ==== ABI Changes > A number of changes to the ODP ABI have also been made in this release to > improve application binary portability. > > ===== Strong Typing for Timer Pools > The `odp_timer_pool_t` is now strongly typed. > > ===== Consistent Initialization > The values of the various `ODP_xxx_INVALID` symbols for ODP abstract types > in > the `odp-linux` reference implementation are now consistently zeros. This > reduces errors and improves portability. > > === Implementation Improvements > ==== Configuration File > A new configuration file mechanism is introduced that makes use of > https://www.hyperrealm.com/libconfig/libconfig_manual.html[libconfig] to > enable various runtime ODP parameters to be specified dynamically. > > Default configuration values for the `odp-linux` reference implementation > are > contained in the `config/odp-linux-generic.conf` file. Users may override > these default values by supplying their own configuration file. At > `odp_init_global()` time, if the `ODP_CONFIG_FILE` environment variable is > set, > this is used to locate the path to the override configuration file. > > ==== Process Mode Support > The `odp-linux` reference implementation now supports applications that run > in > process mode (`mem_model` = `ODP_MEM_MODEL_PROCESS`) as well as the default > thread mode. This support only applies within a single ODP instance, so any > `fork()` calls must be done only _after_ `odp_init_global()` has been > called > to initialize ODP on a root process. > > ==== Removal of `iQuery` Scheduler > The `iQuery` scheduler is removed from the `odp-linux` reference > implementation, as it offers no performance advantages and has not seen > application use. > > ==== Number of CPUs > The `odp-linux` reference implementation now supports up to 256 CPUs by > default (increased from 128). > > ==== Support for Large Burst Sizes > The `odp-linux` reference implementation now supports large burst sizes for > both I/O and non-I/O scheduled events. Large bursts (when available) are > received directly to the application without any stashing for improved > throughput. Burst sizes are configurable via the new configuration file > mechanism, as described above. > > ==== `--without-openssl` Warnings > When building `odp-linux` using `--without-openssl` a warning will be > issued > cautioning that strong cryptography will not be available. > > ==== Inline Queue Enq/Deq APIs > The various enq/deq APIs are now subject to inlining when `odp-linux` is > built with `--disable-abi-compat`. > > ==== Configurable Timer Controls > Inline timers are now controlled via a config file option. Timer polling > frequency is similarly controlled via the config file. > > ==== Huge Page Configuration > The config file is now used to specify the huge page usage limit. > > ==== Single and Multi-Consumer/Producer Rings > The queue implementation in `odp-linux` now automatically makes use of > optimized single and multi-consumer/producer rings to significantly speed > up enq/deq processing. > > ==== `odp_shm_print_all()` Improvements > The output from `odp_shm_print_all()` is reworked to provide more useful > and comprehensive shared memory usage information in `odp-linux`. > > ==== IPsec Improvements > SA lifetime checking is now more scalable to multiple threads. This > significantly reduces overhead for multithreaded IPsec applications. > > ==== Native Builds > When running in non-ABI compatibility mode, `odp-linux` now enables > native machine-specific optimizations for the CPU architecture of the > local machine. > > === Validation Test Improvements > ==== SCTP Test Packets > SCTP test packets are now used in parser testing. SCTP headers are added to > ODP and ODP helpers and SCTP checksums are now inserted and verified as > part > of validation testing. > > ==== `odp_packet_reset()` Test > The packet validation test suite now properly tests `odp_packet_reset()`. > > === Helper Changes > In support of process mode, ODP helper functions have been changed to > better match these new capabilities > > ==== New `enum` > The `odph_linux_thread_type_t enum` has been replaced with the new > `odp_mem_model_t` type. > > ==== Helper Options > The new `odph_options()` getter function is added that returns > applicable options in effect via the new `odph_helper_options_t` struct. > This currently includes the memory model (thread or process) that is in > use. > > ==== SCTP Helpers > The new helper APIs `odph_sctp_chksum_set()` and > `odph_sctp_chksum_verify()` > are added to facilitate working with SCTP packet checksums. > > === Performance Test Improvements > ==== Pool Performance > A new `odp_pool_perf` test has been added that stress-tests ODP pool > functions in a multithreaded environment to generate performance > statistics. > > ==== Scheduler Performance > A new `odp_sched_perf` test has been added that stress-tests the scheduler > in a multithreaded environment. > > ==== CPU Performance > A new `odp_cpu_bench` performance test has been added that runs > compute-intensive packet operations in a multithreaded environment and > prints > the observed maximum throughput for each thread. > > === Example Improvements > ==== Classifier Example changes > The `odp_classifier` example program now uses a reduced number of threads > by > default to reduce elapsed run time. `ODP_THREAD_COUNT_MAX` is also now used > as > the max worker count. > > ==== Generator Improvements > The `odp_generator` example has numerous cleanups and performance > improvements. > > ==== IPsec Example > The `odp_ipsec` example now properly stops and closes pktio devices on > exit. > > ==== Packet Dumping > A new `odp_packet_dump` example is added that prints received packets to > the > terminal. This is useful for debugging packet I/O interfaces. > > ==== Sysinfo Example > A new `odp_sysinfo` example is provided that prints system information. > Useful > for checking the ODP environment during debugging. This includes providing > detailed information about the various crypto facilities supported, as well > as the feature flags used at build time (_e.g.,_ if the binary was built > with > ARMv8.0 or ARMv8.1 instructions). > > ==== Traffic Manager Example > The traffic manager example now properly destroys all TM queues it creates > for improved reliability. It also now always prints a proper termination > summary message. > > === Bug Fixes > ==== Numbered Bugs/Issues > ===== https://bugs.linaro.org/show_bug.cgi?id=3983[Bug 3983] > Compile fails on OpenSuSE 42.2 Leap with error: negative width in bit field > '__error_if_negative' > > ===== https://bugs.linaro.org/show_bug.cgi?id=3989[Bug 3989] > odp_system_info_init() issues > > ===== https://bugs.linaro.org/show_bug.cgi?id=3999[Bug 3999] > IPsec antireplay check drops packets when sequence number jumps. > > ===== https://bugs.linaro.org/show_bug.cgi?id=4002[Bug 4002] > IPsec SA creation must fail for ESN-enabled SAs > > ===== https://bugs.linaro.org/show_bug.cgi?id=4013[Bug 4013] > Per-SA IPv4 ID allocation may cause duplicate IDs. > > ===== https://bugs.linaro.org/show_bug.cgi?id=4017[Bug 4017] > Unexpected IP ID causes IPsec API validation to fail > > ===== https://github.com/Linaro/odp/issues/662[Issue 662] > rte_mempool_ops_alloc() is not dpdk api > > ==== Unnumbered Bugs/Issues > * Fixed enq/deq issues encountered on architectures with weak memory > ordering. > * Return 0 from `odp_sys_huge_page_size_all()` if hugepages are not > supported/detected. Tests modified to not treat this as an error. > * Set `ODP_CACHE_LINE_SIZE` to 128 on ppc64le systems. > * iplookuptable fix putting values into table > * DPDK pktio support now works properly across multiple ODP instances. > * Zero timer pool memory on reserve (fixes timer failures due to > uninitialized > variables). > * `-march=native` disabled for `clang`. This fixes a known issue with > recent > levels of clang. > > === Known Issues > ==== https://bugs.linaro.org/show_bug.cgi?id=3998[Bug 3998] > IPsec extended sequence number support is missing > > ==== https://bugs.linaro.org/show_bug.cgi?id=4014[Bug 4014] > Separate IP ID allocation for transport and tunnel mode SAs may cause > duplicate IDs > > ==== https://bugs.linaro.org/show_bug.cgi?id=4018[Bug 4018] > Unexpected IV causes IPsec API validation to fail > > ==== https://bugs.linaro.org/show_bug.cgi?id=4040[Bug 4040] > Clang build fails on Ubuntu 18.04 > > Best regards, > Maxim. > -- [image: Linaro] <http://www.linaro.org/> François-Frédéric Ozog | *Director Linaro Edge & Fog Computing Group* T: +33.67221.6485 francois.o...@linaro.org | Skype: ffozog