SlideShare a Scribd company logo
Production
Snabb
Simple, fast software networking
functions with Snabb
21 June 2017 – SDN Barcelona
Andy Wingo wingo@igalia.com
@andywingo
hey
network
hackers
Agenda:
Snabb, a VNF workbench❧
Recent developments❧
Some batteries included: Snabb
in practice
❧
the
domain
Commodity hardware is capable of
high-performance networking
1 core at 15MPPS: 65ns/packet❧
What software to put on the
hardware?
alternate
(hi)story
The teleology of open source: “one
day this will all run Linux”
Conventional wisdom: if I walk the
racks of a big ISP, it’s probably all
Linux
linux? The teleology of open source: “one
day this will all run Linux”
Conventional wisdom: if I walk the
racks of a big ISP, it’s probably all
Linux
Q: The hardware is ready for 10 Gbps
on a core. Is Linux?
not
linux
The teleology of open source: “one
day this will all run Linux”
Conventional wisdom: if I walk the
racks of a big ISP, it’s probably all
Linux
Q: The hardware is ready for 10 Gbps
on a core. Is Linux?
A: Nope
why
not
linux
Heavyweight networking stack
System/user barrier splits your
single network function into two
programs
Associated costs both at
development-time and run-time
user-
space
networking
Cut Linux-the-kernel out of the
picture; bring up card from user
space
tell Linux to forget about this PCI
device
❧
mmap device’s PCI registers into
address space
❧
poke registers as needed❧
set up a ring buffer for receive/
transmit
❧
profit!❧
user-
space
networking
Multiple open source user-space
networking projects having success
Prominent examples:
Snabb (2012)❧
DPDK (2012)❧
VPP/fd.io (2016)❧
(Is this SDN? :))
How do software network functions
work?
aside Snabb aims to be rewritable software
The hard part: searching program-
space for elegant hacks
“Is that all? I could rewrite that in a
weekend.”
nutshell A snabb program consists of a graph
of apps
Apps are connected by directional
links
A snabb program processes packets
in units of breaths
local Intel82599 =
require("apps.intel.intel_app").Intel82599
local PcapFilter =
require("apps.packet_filter.pcap_filter").PcapFilter
local c = config.new()
config.app(c, "nic", Intel82599, {pciaddr="82:00.0"})
config.app(c, "filter", PcapFilter, {filter="tcp port 80"})
config.link(c, "nic.tx -> filter.input")
config.link(c, "filter.output -> nic.rx")
engine.configure(c)
while true do engine.breathe() end
breaths Each breath has two phases:
inhale a batch of packets into the
network
❧
process those packets❧
To inhale, run pull functions on
apps that have them
To process, run push functions on
apps that have them
# Pull function of included Intel 82599 driver
function Intel82599:pull ()
for i = 1, engine.pull_npackets do
if not self.dev:can_receive() then
break
end
local pkt = self.dev:receive()
link.transmit(self.output.tx, pkt)
end
end
# Push function of included PcapFilter
function PcapFilter:push ()
while not link.empty(self.input.rx) do
local p = link.receive(self.input.rx)
if self.accept_fn(p.data, p.length) then
link.transmit(self.output.tx, p)
else
packet.free(p)
end
end
end
packets struct packet {
uint16_t length;
unsigned char data[10*1024];
};
links struct link {
struct packet *packets[1024];
// the next element to be read
int read;
// the next element to be written
int write;
};
// (Some statistics counters elided)
voilà At this point, you can rewrite Snabb
(Please do!)
But you might want to use it as-is...
inventory apps: software components that
developers compose into network
functions
programs: complete network
functions
bold: new in 2016/2017
italics: not yet merged to mainline
app
catalog:
i/o
Intel i210/i350/82599/XL710
Mellanox ConnectX-4/5
VirtIO host and guest
UNIX socket
Linux: tap and “raw” (e.g. eth0)
Pcap files
app
catalog:
l2
Flooding and learning bridges
VLAN insert/filter-and-remove/mux
ARP / NDP
app
catalog:
l3
IPv4/v6 fragmentation and
reassembly
IPv4/v6 splitter
ICMPv4/v6 echo responder
Control plane delegation (nh_fwd)
(No routing yet)
app
catalog:
transport
IPsec ESP
Lightweight 4-over-6 AFTR
“Keyed IPv6 Tunnel” (draftr-
mkonstan-keyed-ipv6-tunnel-01)
app
catalog:
monitoring
Netflow capture and export
L7 monitor / filter (using libndpi)
pcap filter (with machine-code
backend)
app
catalog:
testing
Many workload generators
programs $ git clone 
https://github.com/SnabbCo/snabb
$ cd snabb
$ make
$ src/snabb
Usage: src/snabb <program> ...
This snabb executable has the following programs built in:
lisper
lwaftr
packetblaster
pci_bind
snabbmark
snabbnfv
snabbvmx
snsh
top
wall
For detailed usage of any program run:
snabb <program> --help
program:
packet
blaster
Generally useful tool: fill TX buffer
of NIC with packets and transmit
them over and over again
snabb packetblaster replay 
packets.pcap 82:00.1
Measures received (return) traffic
too
Easily saturates 10G links
program:
lwaftr
“Lightweight 4-over-6”: RFC 7596
Snabb-implemented border router
for lw4o6
IPv4 for entire countries!
Remarkable deployment report from
OTE engineer Kostas Zordabelos,
April 2017:
https://www.youtube.com/
watch?v=EEpUWieTr40&t=1h46m
program:
lwaftr
Why Snabb?
Fast, fluid development
RFC only finalized during
development
❧
Good speed
Open source
Cheap
program:
nfv
Host switch providing network
connectivity to QEMU instances
“Original” Snabb app
Like Open vSwitch with DPDK data-
path, or OpenContrail
OpenStack integration never
landed... but the market has moved
on
(Has the market moved on from
classic NFV?)
program:
vmx
Idea: Snabb data plane, external
control and management planes
Contributed by Juniper engineer
Marcel Wiget
Possibility to delegate to Juniper
vMX to determine next hops; or to
an image with Linux
Juniper Tech Club, March 2017:
https://www.youtube.com/
watch?v=N_CjXgyrUcY
snabb snabbvmx lwaftr --help
program:
snabbwall
L7 firewall that optionally uses nDPI
http://snabbwall.org/
Collaboration between Igalia and
NLnet foundation
Landed upstream in 2017
program:
ipfix
Prototype NETFLOW collector and
exporter (v9 and IPFIX)
Currently only 5MPPS, working on
single-core improvements then
moving to RSS
Pending to land upstream
program:
l2vpn
Alexander Gall’s L2 VPN over IPv6
Pending to land upstream; used in
production AFAIU
Ideal Snabb use case: programmer-
operator builds bespoke tool
programs:
your
vnf
here
Snabb upstream open to include new
network functions
Repository will grow as people build
new things
Igalia can build one for you :)
deploy From prototype to production: what
do you need?
(Re)configurability
State monitoring
snabb
config
YANG is great!!!
Native YANG support in Snabb
Load and serialize textual
configurations
❧
Compiled compilations (useful
for big routing tables)
❧
Incremental update❧
State query❧
snabb
config
App & link graph a function of config
Update config? Diff graphs, apply
incremental changes
Carefully built to scale
Fast-paths for some incremental
updates, e.g. add lwAFTR
softwire
❧
Config/state query avoids
touching data plane process
❧
Updates cause minimal change❧
Subquery built-in❧
snabb
config
Command-line tool, snabb config
NETCONF via Sysrepo bridge
Other configuration agents possible
near
future
100G in production Snabb
Multiple coordinated data-plane
processes
Horizontal scaling via BGP/ECMP:
terabit lw4o6 deployments
Performance x-ray: where to focus
effort to improve speed?
[Your cool hack here!]
Work in progress!
thanks! Make a thing with Snabb!
git clone https://github.com/SnabbCo/snabb
cd snabb
make
wingo@igalia.com
@andywingo
oh no here comes the hidden track!
Storytime! Modern x86: who’s winning?
Clock speed same since years ago
Main memory just as far away
HPC
people
are
winning
“We need to do work on data... but
there’s just so much of it and it’s
really far away.”
Three primary improvements:
CPU can work on more data per
cycle, once data in registers
❧
CPU can load more data per
cycle, once it’s in cache
❧
CPU can make more parallel
fetches to L3 and RAM at once
❧
Networking
folks
can
win
too
Instead of chasing zero-copy, tying
yourself to ever-more-proprietary
features of your NIC, just take the hit
once: DDIO into L3.
Copy if you need to – copies with L3
not expensive.
Software will eat the world!
Networking
folks
can
win
too
Once in L3, you have:
wide loads and stores via AVX2
and soon AVX-512 (64 bytes!)
❧
pretty good instruction-level
parallelism: up to 16 concurrent
L2 misses per core on haswell
❧
wide SIMD: checksum in
software!
❧
software, not firmware❧

More Related Content

PDF
Snabb, a toolkit for building user-space network functions (ES.NOG 20)
PDF
Возможности интерпретатора Python в NX-OS
PDF
Monitorama 2015 Netflix Instance Analysis
PPTX
Nanog75, Network Device Property as Code
PDF
Building Cloud Virtual Topologies with Ravello and Ansible
PDF
Intel® RDT Hands-on Lab
PDF
Going FaaSter, Functions as a Service at Netflix
PDF
zebra & openconfigd Introduction
Snabb, a toolkit for building user-space network functions (ES.NOG 20)
Возможности интерпретатора Python в NX-OS
Monitorama 2015 Netflix Instance Analysis
Nanog75, Network Device Property as Code
Building Cloud Virtual Topologies with Ravello and Ansible
Intel® RDT Hands-on Lab
Going FaaSter, Functions as a Service at Netflix
zebra & openconfigd Introduction

What's hot (20)

PDF
Network Automation (Bay Area Juniper Networks Meetup)
PPTX
How to Achieve more through Collaboration
PDF
EBPF and Linux Networking
PPTX
Neutron DVR
PDF
Cilium – Kernel Native Security & DDOS Mitigation for Microservices with BPF
PDF
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
PDF
Reproducible Computational Pipelines with Docker and Nextflow
PDF
FortranCon2020: Highly Parallel Fortran and OpenACC Directives
PDF
Kernel advantages for Istio realized with Cilium
PDF
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
PDF
Using FLiP with influxdb for edgeai iot at scale 2022
PDF
Integrating Applications: the Reactive Way
PPTX
How to Introduce Telemetry Streaming (gNMI) in Your Network with SNMP with Te...
PDF
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
PDF
Kubernetes DNS Horror Stories
PDF
DevSecCon London 2019: A Kernel of Truth: Intrusion Detection and Attestation...
PDF
Scaling big with Apache Kafka
PDF
ApacheCon 2021 - Apache NiFi Deep Dive 300
PPTX
OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...
PDF
Slaying Monoliths with Node and Docker
Network Automation (Bay Area Juniper Networks Meetup)
How to Achieve more through Collaboration
EBPF and Linux Networking
Neutron DVR
Cilium – Kernel Native Security & DDOS Mitigation for Microservices with BPF
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
Reproducible Computational Pipelines with Docker and Nextflow
FortranCon2020: Highly Parallel Fortran and OpenACC Directives
Kernel advantages for Istio realized with Cilium
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Using FLiP with influxdb for edgeai iot at scale 2022
Integrating Applications: the Reactive Way
How to Introduce Telemetry Streaming (gNMI) in Your Network with SNMP with Te...
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
Kubernetes DNS Horror Stories
DevSecCon London 2019: A Kernel of Truth: Intrusion Detection and Attestation...
Scaling big with Apache Kafka
ApacheCon 2021 - Apache NiFi Deep Dive 300
OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...
Slaying Monoliths with Node and Docker
Ad

Similar to Practical virtual network functions with Snabb (SDN Barcelona VI) (20)

PDF
Practical virtual network functions with Snabb (8th SDN Workshop)
PDF
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
PDF
Snabb - A toolkit for user-space networking (FOSDEM 2018)
PDF
Stacks and Layers: Integrating P4, C, OVS and OpenStack
PDF
Snabbflow: A Scalable IPFIX exporter
PDF
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
PDF
All in one
PPTX
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
PDF
Kubernetes for the PHP developer
PDF
Engineer Engineering Software
PDF
Cytoscape: Now and Future
PDF
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
PDF
LibOS as a regression test framework for Linux networking #netdev1.1
PDF
XPDDS18: CPUFreq in Xen on ARM - Oleksandr Tyshchenko, EPAM Systems
PPTX
Introduction to node.js By Ahmed Assaf
PDF
Intro to open source telemetry linux con 2016
PDF
Seminar Accelerating Business Using Microservices Architecture in Digital Age...
PPTX
PGI Compilers & Tools Update- March 2018
PDF
Eclipsecon 2017 presentation
DOCX
Tutorial to setup OpenStreetMap tileserver with customized boundaries of India
Practical virtual network functions with Snabb (8th SDN Workshop)
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
Snabb - A toolkit for user-space networking (FOSDEM 2018)
Stacks and Layers: Integrating P4, C, OVS and OpenStack
Snabbflow: A Scalable IPFIX exporter
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
All in one
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Kubernetes for the PHP developer
Engineer Engineering Software
Cytoscape: Now and Future
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
LibOS as a regression test framework for Linux networking #netdev1.1
XPDDS18: CPUFreq in Xen on ARM - Oleksandr Tyshchenko, EPAM Systems
Introduction to node.js By Ahmed Assaf
Intro to open source telemetry linux con 2016
Seminar Accelerating Business Using Microservices Architecture in Digital Age...
PGI Compilers & Tools Update- March 2018
Eclipsecon 2017 presentation
Tutorial to setup OpenStreetMap tileserver with customized boundaries of India
Ad

More from Igalia (20)

PDF
Life of a Kernel Bug Fix
PDF
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
PDF
Advancing WebDriver BiDi support in WebKit
PDF
Jumping Over the Garden Wall - WPE WebKit on Android
PDF
Collective Funding, Governance and Prioritiation of Browser Engine Projects
PDF
Don't let your motivation go, save time with kworkflow
PDF
Solving the world’s (localization) problems
PDF
The Whippet Embeddable Garbage Collection Library
PDF
Nobody asks "How is JavaScript?"
PDF
Getting more juice out from your Raspberry Pi GPU
PDF
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
PDF
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
PDF
CSS :has() Unlimited Power
PDF
Device-Generated Commands in Vulkan
PDF
Current state of Lavapipe: Mesa's software renderer for Vulkan
PDF
Vulkan Video is Open: Application showcase
PDF
Scheme on WebAssembly: It is happening!
PDF
EBC - A new backend compiler for etnaviv
PDF
RISC-V LLVM State of the Union
PDF
Device-Generated Commands in Vulkan
Life of a Kernel Bug Fix
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
Advancing WebDriver BiDi support in WebKit
Jumping Over the Garden Wall - WPE WebKit on Android
Collective Funding, Governance and Prioritiation of Browser Engine Projects
Don't let your motivation go, save time with kworkflow
Solving the world’s (localization) problems
The Whippet Embeddable Garbage Collection Library
Nobody asks "How is JavaScript?"
Getting more juice out from your Raspberry Pi GPU
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
CSS :has() Unlimited Power
Device-Generated Commands in Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Vulkan Video is Open: Application showcase
Scheme on WebAssembly: It is happening!
EBC - A new backend compiler for etnaviv
RISC-V LLVM State of the Union
Device-Generated Commands in Vulkan

Recently uploaded (20)

PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Mushroom cultivation and it's methods.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
Machine Learning_overview_presentation.pptx
PDF
Getting Started with Data Integration: FME Form 101
PDF
Empathic Computing: Creating Shared Understanding
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Machine learning based COVID-19 study performance prediction
PPT
Teaching material agriculture food technology
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
August Patch Tuesday
Mobile App Security Testing_ A Comprehensive Guide.pdf
Network Security Unit 5.pdf for BCA BBA.
Mushroom cultivation and it's methods.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Digital-Transformation-Roadmap-for-Companies.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Unlocking AI with Model Context Protocol (MCP)
TLE Review Electricity (Electricity).pptx
Machine Learning_overview_presentation.pptx
Getting Started with Data Integration: FME Form 101
Empathic Computing: Creating Shared Understanding
Encapsulation_ Review paper, used for researhc scholars
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Machine learning based COVID-19 study performance prediction
Teaching material agriculture food technology
OMC Textile Division Presentation 2021.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
August Patch Tuesday

Practical virtual network functions with Snabb (SDN Barcelona VI)

  • 1. Production Snabb Simple, fast software networking functions with Snabb 21 June 2017 – SDN Barcelona Andy Wingo wingo@igalia.com @andywingo
  • 2. hey network hackers Agenda: Snabb, a VNF workbench❧ Recent developments❧ Some batteries included: Snabb in practice ❧
  • 3. the domain Commodity hardware is capable of high-performance networking 1 core at 15MPPS: 65ns/packet❧ What software to put on the hardware?
  • 4. alternate (hi)story The teleology of open source: “one day this will all run Linux” Conventional wisdom: if I walk the racks of a big ISP, it’s probably all Linux
  • 5. linux? The teleology of open source: “one day this will all run Linux” Conventional wisdom: if I walk the racks of a big ISP, it’s probably all Linux Q: The hardware is ready for 10 Gbps on a core. Is Linux?
  • 6. not linux The teleology of open source: “one day this will all run Linux” Conventional wisdom: if I walk the racks of a big ISP, it’s probably all Linux Q: The hardware is ready for 10 Gbps on a core. Is Linux? A: Nope
  • 7. why not linux Heavyweight networking stack System/user barrier splits your single network function into two programs Associated costs both at development-time and run-time
  • 8. user- space networking Cut Linux-the-kernel out of the picture; bring up card from user space tell Linux to forget about this PCI device ❧ mmap device’s PCI registers into address space ❧ poke registers as needed❧ set up a ring buffer for receive/ transmit ❧ profit!❧
  • 9. user- space networking Multiple open source user-space networking projects having success Prominent examples: Snabb (2012)❧ DPDK (2012)❧ VPP/fd.io (2016)❧ (Is this SDN? :)) How do software network functions work?
  • 10. aside Snabb aims to be rewritable software The hard part: searching program- space for elegant hacks “Is that all? I could rewrite that in a weekend.”
  • 11. nutshell A snabb program consists of a graph of apps Apps are connected by directional links A snabb program processes packets in units of breaths
  • 12. local Intel82599 = require("apps.intel.intel_app").Intel82599 local PcapFilter = require("apps.packet_filter.pcap_filter").PcapFilter local c = config.new() config.app(c, "nic", Intel82599, {pciaddr="82:00.0"}) config.app(c, "filter", PcapFilter, {filter="tcp port 80"}) config.link(c, "nic.tx -> filter.input") config.link(c, "filter.output -> nic.rx") engine.configure(c) while true do engine.breathe() end
  • 13. breaths Each breath has two phases: inhale a batch of packets into the network ❧ process those packets❧ To inhale, run pull functions on apps that have them To process, run push functions on apps that have them
  • 14. # Pull function of included Intel 82599 driver function Intel82599:pull () for i = 1, engine.pull_npackets do if not self.dev:can_receive() then break end local pkt = self.dev:receive() link.transmit(self.output.tx, pkt) end end
  • 15. # Push function of included PcapFilter function PcapFilter:push () while not link.empty(self.input.rx) do local p = link.receive(self.input.rx) if self.accept_fn(p.data, p.length) then link.transmit(self.output.tx, p) else packet.free(p) end end end
  • 16. packets struct packet { uint16_t length; unsigned char data[10*1024]; };
  • 17. links struct link { struct packet *packets[1024]; // the next element to be read int read; // the next element to be written int write; }; // (Some statistics counters elided)
  • 18. voilà At this point, you can rewrite Snabb (Please do!) But you might want to use it as-is...
  • 19. inventory apps: software components that developers compose into network functions programs: complete network functions bold: new in 2016/2017 italics: not yet merged to mainline
  • 20. app catalog: i/o Intel i210/i350/82599/XL710 Mellanox ConnectX-4/5 VirtIO host and guest UNIX socket Linux: tap and “raw” (e.g. eth0) Pcap files
  • 21. app catalog: l2 Flooding and learning bridges VLAN insert/filter-and-remove/mux ARP / NDP
  • 22. app catalog: l3 IPv4/v6 fragmentation and reassembly IPv4/v6 splitter ICMPv4/v6 echo responder Control plane delegation (nh_fwd) (No routing yet)
  • 23. app catalog: transport IPsec ESP Lightweight 4-over-6 AFTR “Keyed IPv6 Tunnel” (draftr- mkonstan-keyed-ipv6-tunnel-01)
  • 24. app catalog: monitoring Netflow capture and export L7 monitor / filter (using libndpi) pcap filter (with machine-code backend)
  • 26. programs $ git clone https://github.com/SnabbCo/snabb $ cd snabb $ make
  • 27. $ src/snabb Usage: src/snabb <program> ... This snabb executable has the following programs built in: lisper lwaftr packetblaster pci_bind snabbmark snabbnfv snabbvmx snsh top wall For detailed usage of any program run: snabb <program> --help
  • 28. program: packet blaster Generally useful tool: fill TX buffer of NIC with packets and transmit them over and over again snabb packetblaster replay packets.pcap 82:00.1 Measures received (return) traffic too Easily saturates 10G links
  • 29. program: lwaftr “Lightweight 4-over-6”: RFC 7596 Snabb-implemented border router for lw4o6 IPv4 for entire countries! Remarkable deployment report from OTE engineer Kostas Zordabelos, April 2017: https://www.youtube.com/ watch?v=EEpUWieTr40&t=1h46m
  • 30. program: lwaftr Why Snabb? Fast, fluid development RFC only finalized during development ❧ Good speed Open source Cheap
  • 31. program: nfv Host switch providing network connectivity to QEMU instances “Original” Snabb app Like Open vSwitch with DPDK data- path, or OpenContrail OpenStack integration never landed... but the market has moved on (Has the market moved on from classic NFV?)
  • 32. program: vmx Idea: Snabb data plane, external control and management planes Contributed by Juniper engineer Marcel Wiget Possibility to delegate to Juniper vMX to determine next hops; or to an image with Linux Juniper Tech Club, March 2017: https://www.youtube.com/ watch?v=N_CjXgyrUcY snabb snabbvmx lwaftr --help
  • 33. program: snabbwall L7 firewall that optionally uses nDPI http://snabbwall.org/ Collaboration between Igalia and NLnet foundation Landed upstream in 2017
  • 34. program: ipfix Prototype NETFLOW collector and exporter (v9 and IPFIX) Currently only 5MPPS, working on single-core improvements then moving to RSS Pending to land upstream
  • 35. program: l2vpn Alexander Gall’s L2 VPN over IPv6 Pending to land upstream; used in production AFAIU Ideal Snabb use case: programmer- operator builds bespoke tool
  • 36. programs: your vnf here Snabb upstream open to include new network functions Repository will grow as people build new things Igalia can build one for you :)
  • 37. deploy From prototype to production: what do you need? (Re)configurability State monitoring
  • 38. snabb config YANG is great!!! Native YANG support in Snabb Load and serialize textual configurations ❧ Compiled compilations (useful for big routing tables) ❧ Incremental update❧ State query❧
  • 39. snabb config App & link graph a function of config Update config? Diff graphs, apply incremental changes Carefully built to scale Fast-paths for some incremental updates, e.g. add lwAFTR softwire ❧ Config/state query avoids touching data plane process ❧ Updates cause minimal change❧ Subquery built-in❧
  • 40. snabb config Command-line tool, snabb config NETCONF via Sysrepo bridge Other configuration agents possible
  • 41. near future 100G in production Snabb Multiple coordinated data-plane processes Horizontal scaling via BGP/ECMP: terabit lw4o6 deployments Performance x-ray: where to focus effort to improve speed? [Your cool hack here!] Work in progress!
  • 42. thanks! Make a thing with Snabb! git clone https://github.com/SnabbCo/snabb cd snabb make wingo@igalia.com @andywingo
  • 43. oh no here comes the hidden track!
  • 44. Storytime! Modern x86: who’s winning? Clock speed same since years ago Main memory just as far away
  • 45. HPC people are winning “We need to do work on data... but there’s just so much of it and it’s really far away.” Three primary improvements: CPU can work on more data per cycle, once data in registers ❧ CPU can load more data per cycle, once it’s in cache ❧ CPU can make more parallel fetches to L3 and RAM at once ❧
  • 46. Networking folks can win too Instead of chasing zero-copy, tying yourself to ever-more-proprietary features of your NIC, just take the hit once: DDIO into L3. Copy if you need to – copies with L3 not expensive. Software will eat the world!
  • 47. Networking folks can win too Once in L3, you have: wide loads and stores via AVX2 and soon AVX-512 (64 bytes!) ❧ pretty good instruction-level parallelism: up to 16 concurrent L2 misses per core on haswell ❧ wide SIMD: checksum in software! ❧ software, not firmware❧