midonet deep dive

32
midonet deep dive Taku Fukushima

Upload: taku-fukushima

Post on 15-Jul-2015

546 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: MidoNet deep dive

midonet deep dive

Taku Fukushima

Page 2: MidoNet deep dive

Agenda1. MidoNet components (revisited)

2. Midolman deep dive

3. Getting started with coding

4. Wrap-up

Page 3: MidoNet deep dive

MidoNet components

Page 4: MidoNet deep dive

NSDB NSDB

NSDB

Open vSwitch Datapath

IF IFInterfaces on the host

IF

VM VM VM Midolman(MidoNet

agent)

Network

Flow Table

MidoNet APINova API

Horizon MidoNet CLI

Watch/modify

Add/remove flows

Neutron API

MidoNet Plugin

Host

Cache+

local state

Store virtual topology

information

Clients / Users

Nova compute

Page 5: MidoNet deep dive

Midolman (MidoNet agent)

NSDB NSDB

NSDB

Open vSwitch Datapath

IF IFInterfaces on the host

IF

VM VM VM Midolman(MidoNet

agent)

Network

Flow Table

MidoNet APINova API

Horizon MidoNet CLI

Watch/modify

Add/remove flows

Neutron API

MidoNet Plugin

Host

Cache+

local state

Store virtual topology

information

Clients / Users

Nova compute

Page 6: MidoNet deep dive

Midolman deep dive

Page 7: MidoNet deep dive

Foundations• Java and Scala

• Java 8 migration is coming

• Guava and Guice

• Akka Actor

• Future and RxJava

• Jackson → Protocol Buffer

• Disruptor

Page 8: MidoNet deep dive

Upcall Lifecycle1. Input stage

• Get upcalls with packets from the datapath

2. Packet processing stage

1. Deduplicate and queue packets

2. Simulate packets on the virtual topology

3. Deal with the wildcard flows

4. Determine the egress physical port

3. Output stage

• Emit packets and install flows based on the sims

Page 9: MidoNet deep dive

Module diagrams

Page 10: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

Midolman.java

Page 11: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

1. Input stage

Select Loop

Page 12: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

PacketContext

PacketContextPacketContextPacketContext

PacketContext

PacketContext

Routing by hashing with FlowKey

Page 13: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

Retrieve virtual resources

Virtual Resource

Virtual Resource

Virtual Resource

Future • Completed • NotYetException

Page 14: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

Manage virtual to local and physical mapping• Interface name to UUID • UUID to local port number • Which host has the interface • …

Page 15: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

PacketContextPacketContextPacketContext

PacketContext

PacketContext

PacketContext

Simulation

Page 16: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

Local datapath management

• Create local datapath ports • Track UUID to port # mapping • Manage overlay tunnels

PacketContext

Page 17: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

2. Packet processing stage

Flow

Flow

Flow

Flow

Query statistics

Invalidate flows

PacketContext

Page 18: MidoNet deep dive

MidolmanActorsService

Datapath Controller

Flow Controller

PacketsEntryPoint

RoutingManagerActor

DatapathReady

VirtualTopologyActor

VirtualToPhysicalMapper

HealthMonitor

NetlinkCallbackDispatcher

MtuIncreaser

DeduplicationActor

PacketWorkflow

UpcallDatapathConnectionManager

NSDB NSDB

NSDB

One-to-ManyOne-to-One

HTB

DisruptorRing Buffer

Supended Packets

WaitingRoom

(NetlinkInputChannel)

NetlinkChannel

(NetlinkOutputChannel)

DatapathChannel

Fast Path

State Management

Open vSwitch Datapath

Flow Table

Open vSwitch Datapath

Flow Table

DatapathReady

WildcardFlow

Upcall

Flow Invalidationby Tag

Packet

Virtual TopologyState data / Messages

Packet

Flow

Wildcard Flows

DatapathReady

Datapath portoperations

FlowManagement

3. Output stage

Select Loop

Page 19: MidoNet deep dive
Page 20: MidoNet deep dive

https://github.com/midonet/midonet/blob/master/docs/

“Read the docs.”

Page 21: MidoNet deep dive

Getting started with coding

Page 22: MidoNet deep dive

Prerequisites• JDK7

• JDK8 is coming

• protoc (Protocol Buffer >= 2.6.0)

!

• build-essential (for packaging deb packages)

• rpm (for packaging RPM packages)

• fpm (for packaging)

Page 23: MidoNet deep dive

Dev environment (recommended)• JDK 7 (required)

• JDK8 is coming

• Protocol Buffers >= 2.6.0 (required)

• IntelliJ IDEA 14 community edition (OSS!) (optional)

• Scala plugin + protoc plugin

• Nice displays and keyboards

Page 24: MidoNet deep dive

Building MidoNet

Page 25: MidoNet deep dive

Building IDEA project

and modules

Page 26: MidoNet deep dive

Importing MidoNet project

Page 27: MidoNet deep dive
Page 28: MidoNet deep dive
Page 29: MidoNet deep dive
Page 30: MidoNet deep dive

Wrap-up

Page 31: MidoNet deep dive

Midolman deep dive• Upcall lifecycle

1. Input stage

2. Packet processing stage

3. Output stage

• Fast path and state management

• Read the docs

• Getting started with coding

Page 32: MidoNet deep dive

The end of slides. Any Questions?