HKG15-110: ODP Project Update

27
Presented by Date Event ODP Project Update Bill Fischofer 9 February 2015 Linaro Connect HKG15 Session HKG-15-110

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

For more information, visit:

Thank You