tag name | v1.12.0.0 (953fcfa24571d1da9901e262c3fe92ecd796c343) |
tag date | 2016-12-02 18:26:02 +0300 |
tagged by | Maxim Uvarov <maxim.uvarov@linaro.org> |
tagged object | commit 4cfe988cc6... |
== OpenDataPlane (1.12.0.0)
=== New Features
==== APIs
ODP v1.12.0.0 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.