|tag name||v18.104.22.168 (953fcfa24571d1da9901e262c3fe92ecd796c343)|
|tag date||2016-12-02 18:26:02 +0300|
|tagged by||Maxim Uvarov <firstname.lastname@example.org>|
|tagged object||commit 4cfe988cc6...|
== OpenDataPlane (22.214.171.124)
=== New Features ==== APIs ODP v126.96.36.199 has no API changes from previous v1.11.0 Monarch LTS. Version is increased in current development release to make room for Monarch updates numbers. ==== Application Binary Interface (ABI) Support Support is added to enable ODP applications to be binary compatible across different implementations of ODP sharing the same Instruction Set Architecture (ISA). This support introduces a new `configure` option: `no abi disable option`:: This is the default and specifies that the ODP library is to be built to support ABI compatibility mode. In this mode ODP APIs are never inlined. ABI compatibility ensures maximum application portability in cloud environments. `--disable-abi-compat`:: Specify this option to enable the inlining of ODP APIs. This may result in improved performance at the cost of ABI compatibility and is suitable for applications running in embedded environments. Note that ODP applications retain source code portability between ODP implementations regardless of the ABI mode chosen. To move to a different ODP application running on a different ISA, code need simply be recompiled against that target ODP implementation. ==== SCTP Parsing Support The ODP classifier adds support for recognizing Stream Control Transmission Protocol (SCTP) packets. The APIs for this were previously not implemented. === Packaging and Implementation Refinements ==== Remove dependency on Linux headers ODP no longer has a dependency on Linux headers. This will help make the odp-linux reference implementation more easily portable to non-Linux environments. ==== Remove dependency on helpers The odp-linux implementation has been made independent of the helper library to avoid circular dependency issues with packaging. Helper functions may use ODP APIs, however ODP implementations should not use helper functions. ==== Reorganization of `test` directory The `test` directory has been reorganized to better support a unified approach to ODP component testing. API tests now live in `test/common_plat/validation/api` instead of the former `test/validation`. With this change performance and validation tests, as well as common and platform-specific tests can all be part of a unified test hierarchy. The resulting test tree now looks like: .New `test` directory hierarchy ----- test ├── common_plat │ ├── common │ ├── m4 │ ├── miscellaneous │ ├── performance │ └── validation │ └── api │ ├── atomic │ ├── barrier │ ├── buffer │ ├── classification │ ├── cpumask │ ├── crypto │ ├── errno │ ├── hash │ ├── init │ ├── lock │ ├── packet │ ├── pktio │ ├── pool │ ├── queue │ ├── random │ ├── scheduler │ ├── shmem │ ├── std_clib │ ├── system │ ├── thread │ ├── time │ ├── timer │ └── traffic_mngr ├── linux-generic │ ├── m4 │ ├── mmap_vlan_ins │ ├── performance │ ├── pktio_ipc │ ├── ring │ └── validation │ └── api │ ├── pktio │ └── shmem └── m4 ----- ==== Pools The maximum number of pools that may be created in the odp-linux reference implementation has been raised from 16 to 64. ==== Upgrade to DPDK 16.07 The DPDK pktio support in odp-linux has been upgraded to work with DPDK 16.07. A number of miscellaneous fixes and performance improvements in this support are also present. ==== PktIO TAP Interface Classifier Support Packet I/O interfaces operating in TAP mode now can feed packets to the ODP classifier the same as other pktio modes can do. === Performance Improvements ==== Burst-mode buffer allocation The scheduler and pktio components have been reworked to use burst-mode buffer allocation/deallocation, yielding a measurable performance gain in almost all cases. ==== Burst-mode queue operations ODP queues internally now attempt to use burst-mode enq/deq operations to accelerate performance where applicable. ==== Ring-based Scheduler Priority Queues The ODP scheduler has been enhanced to use ring-based priority queues, resulting in significantly better scalability in many core environments. ==== GitHub Automation Support ODP now supports the Travis framework needed to trigger CI automation in conjunction with GitHub. This support is considered experimental for now. === Examples ==== New `l3fwd` Example A new example application is provided that illustrates use of ODP for simple Layer 3 forwarding across multiple interfaces. === Documentation ==== Pure API Documentation ODP now generates "pure" (implementation independent) doxygen documentation in addition to the specific documentation for the odp-linux implementation. The pure version is applicable to any ODP implementation as it simply describes the ODP API specification. Implementation-specific versions of this documentation describe both the APIs as well as specifics concerning typedefs, enums, etc. This should help clarify what aspects of ODP are platform independent. ==== Clarify ODP Thread Definition The definition of an ODP thread in odp-linux has been clarified to specify that for this implementation ODP threads are Linux pthreads or Linux processes. Currently threads as processes is considered experimental in odp-linux. === Bug Fixes Numerous refinements have been incorporated to make validation tests more robust in API coverage as well as correcting corner cases in the implementation of many ODP APIs. Notable fixes include: ==== https://bugs.linaro.org/show_bug.cgi?id=2316[Bug 2316] `ODP_TIMEOUT_INVALID` is now defined consistently with other pool elements so the restriction on using Pool 0 as a timer pool is removed. ==== https://bugs.linaro.org/show_bug.cgi?id=2310[Bug 2310] The `odp_packet_copy()` API now correctly handles user areas between pools that are configured with different sized per-packet user area definitions. ==== https://bugs.linaro.org/show_bug.cgi?id=2571[Bug 2571] Corrects the implementation of AES GCM decryption in the ODP crypto API. === Known Issues ==== https://bugs.linaro.org/show_bug.cgi?id=2309[Bug 2309] The Timer validation test fails sporadically in environments with high core counts.