HKG15-110: ODP Project Update
Transcript of HKG15-110: ODP Project Update
Presented by
Date
Event
ODP Project Update Bill Fischofer
9 February 2015
Linaro Connect HKG15Session HKG-15-110
● Open source, open contribution framework for portable high-performance data plane applications
OpenDataPlane - What Is It?
● Common APIs provide for application portability● Optimized implementations of these APIs provide accelerated
performance on each platform● Wide architecture support: ARM, MIPS, PowerPC, x86● Designed to offer portability without sacrificing performance,
allowing wide choice in platform selection to match application price/performance needs
Application View
OpenDataPlane - The Big Picture SoC Vendor View
Application
Platform A Platform B Platform C
ODP API
Run on any Platform
Application A Application B Application C
ODP API
SoC Platform
Compete for any Socket
● LNG and its members are ODP maintainers and its upstream
Organization
● Open Source
● Open Contribution
● BSD License
OpenDataPlane System Architecture
Design point: Multi-core network SoCs that can run Linux on at least one core
A framework, not an environment, allowing existing apps to add ODP incrementally
Multiple apps, shared or dedicated cores
A common framework
Leverages existing SDKs
Real or virtual HW
ODP: Designed to Support Existing AppsExisting Applications can add ODP functionality on an incremental basis
Apps still have access to platform SDKs if they wish
Apps can access HW directly if they wish (real or virtual)
ODP implementations leverage existing SDKs
ODP APIs● Common definitions, build tools, and validation tests● Open contribution, LNG is maintainer and upstream
ODP Implementations● Developed and maintained by sponsoring owner● Typically SoC vendor ● Can be open or closed source at implementor’s option
ODP Components
Name Owner/Maintainer Target Platform Architecture
linux-generic Open contribution, maintained by LNG
Pure SW, runs on any Linux kernel. Not a performance target.
Any
odp-dpdk Open contribution, developed by LNG
Intel x86 using DPDK as SW acceleration layer Intel x86
odp-netmap Open contribution,developed by LNG
Linux + NETMAP support (experimental) x86 + ARM
ODP Implementations - 1 of 2
Name Owner/Maintainer Target Platform Architecture
odp-keystone2 Texas Instruments TI Keystone II SoCs ARM Cortex A15
linux-qoriq Freescale Freescale QorIQ SoCs PowerPC
OCTEON Cavium Networks Cavium Octeon SoCs MIPS64
THUNDER Cavium Networks Cavium ThunderX SoC ARMv8
ODP Implementations - 2 of 2
Additional implementations under development by others
API Group Use
Buffers Fixed-sized storage blocks for application use
Classification Parses and assigns incoming packets to Classes-of-Service (CoS) according to Pattern Matching Rules (PMRs)
Crypto Algorithmic offload and acceleration for encryption/decryption of packet and buffer data
Events Provide notification of packet arrival, buffered communication, timeouts, and completions
Packets Manipulation and processing of Ethernet frames and their contents
ODP v1.0 API Groups
API Group Use
PktIO Abstracts logical Input/Output ports for RX/TX processing
Pools Storage management for buffers, packets, timers, and events
Queues Channels that store and deliver events
Scheduler Handles sequencing and scale-out of event processing to available application threads
Shared Memory Abstracts bulk memory allocation for ODP internal and application use
ODP v1.0 API Groups
API Group Use
Synchronizers Atomic operations needed for mulitprocessing
Threads Units of parallel execution
Timers Single-shot and periodic notifications of passage of time
ODP v1.0 API Groups
ODP Abstract Types
Used by applications and ODP APIs, defined by ODP implementations to fit platform needs
● odp_pktio_t● odp_pmr_t● odp_pmr_set_t● odp_pool_t● odp_queue_t● odp_shm_t
● odp_buffer_t● odp_cos_t● odp_crypto_session_t● odp_crypto_compl_t● odp_event_t● odp_packet_t● odp_packet_seg_t
ODP Functional Abstraction
ODP APIs define functions, not data structures
Applications specify what they want, implementations determine how to do those functions optimally on their platform
Example: odp_packet_t
packet data (headers + payload + trailers)headroom tailroom
odp_packet_len()
odp_packet_data() = addressability to packet offset 0
odp_packet_offset() = addressability to specified packet offset
odp_push_head()
odp_pull_head() odp_pull_tail()
odp_push_tail()
Packet Offsets and Segmentation
packet data (headers + payload + trailers)headroom tailroom
odp_packet_data() = addressability to packet offset 0
segment 0 segment 1 segment 2
L2 offset
L3 offset
L4 offset
seglenodp_packet_l2_ptr ()
odp_packet_l2_ptr ()
odp_packet_l2_ptr ()
ODP Concepts: Packet Receive
Ethernet
Ethernet
Ethernet
...PktIO Classifier
PMRs
PoolPool
PoolPool
QueueQueue
QueueQueue
Class of Service (CoS)
Packet storage Input to Scheduler
ODP Concepts: Event Scheduling
Queue
Queue
Queue
... Scheduler
Thread
Thread
...
odp_schedule()
Threads call odp_schedule() to get next event
Engine
Queues store events
Threads invoke engines via ODP APIsImplementations “wrapper” engines to interact with rest of ODP infrastructure
Threads call odp_queue_enq() to add events to queues to be scheduled for further processing
ODP Concepts: Packet Transmit
Ethernet
Ethernet
Loopback
...PktIO
Thread
Thread
Thread
Transmit Engine
...
Queue
Queue
Queue
...
Back to Ingress
(not in v1.0)
TSRs
ODP Project History - 1 of 2
Tag Release Date Major Features
odp-0.1 December 2013 Initial preview release
odp-0.2 April 2014 Development checkpoint
v0.3.0 October 2014 Development checkpoint for internal use
v0.4.0 8 December 2014 Initial CUNIT test coverage
v0.5.0 16 December 2014 New Packet/buffer APIs, Classification APIs
v0.6.0 22 December 2014 Packet/buffer tests, PktIO tests, Init API changes, Crypto bug fixes
v0.7.0 9 January 2015 New timer APIs and implementation, PktIO functions, bug fixes
ODP Project History - 2 of 2
Tag Release Date Major Features
v0.8.0 16 January 2015 CPUmask, synchronizer tests, bug fixes
v0.9.0 23 January 2015 PktIO loopback, global logging, timer tests, scheduler tests
v0.10.0 30 January 2015 Events, API directory restructure, Debian packaging
v0.11.0 February 2015 Strong typing, Return code normalization, odp_errno, additional test cases and bug fixes
v1.0 March 2015 Functionally complete, suitable for evaluation and application development
TBD December 2015 Suitable for production application deployment
Structure and Goals● Uses CUNIT framework● Enable verification of conforming ODP implementations● Provide code coverage and functional API testing
● Restricted to “sunny day” tests for now
ODP Testing and Validation
ODP Test SuiteODP
ImplementationPass/Fail output
Visit opendataplane.org for information
Join the ODP mailing list: [email protected]
Participate in ODP project calls and meetings• Weekly call held Tuesdays at 15:00 UTC
• Next call, Tuesday 24th February• Go to uberconference.com/opendataplane
Contribute Code/Tests/Documents/Bug Reports, etc.
Getting Involved
Tuesday● HKG-15-209: ODP User Experience Roundtable
Wednesday ● HKG-15-301: OVS on ODP Implementation Overview● HKG-15-305: RT vs. Core Isolation● HKG-15-309: VLANd - First Release and Next Steps
Other ODP-Related Sessions of Interest
ODP Demos at LNG Demo Thursday
Demo set one:ODP-Open vSwitchBenchmarking
Demo Set two:Performance / Overhead with full isolation
Demo Set Three:ODP--Crypto with GPU