SlideShare a Scribd company logo
1 of 58
Download to read offline
SNABB
A TOOLKIT FOR BUILDING USER-SPACE NETWORK
FUNCTIONS
ABOUT IGALIA
Consultancy specialized in open-source
Base in Coruña but distributed all over the world (>60 people working from 15
different countries)
Contributors to projects such as WebKit, Chromium V8, etc
Other areas: Graphics, Multimedia, Networking
https://www.igalia.com/networking
AGENDA
What is Snabb?
How it works?
Catalog and programs
Use case: lwAFTR
WHAT IS SNABB?
Snabb is a toolkit for developing high-performance network functions in user-
space
WHAT IS A NETWORK FUNCTION?
A program that manipulates traffic data
Basic operations: read, forward, drop, modify, create...
Combining these primitives we can build any network function
EXAMPLES
Firewall: read incoming packets, compare to table of rules and execute an
action(forward or drop)
NAT: read incoming packets, modify headers and forward packet
Tunelling: read incoming packets, create a new packet, embed packet into new
one and send it
WHY SNABB?
Increasing improvement of commodity hardware: 10Gbps NICs at very
affordable prices
High-performance equipment is still very expensive
Idea: build an analog high-performance router using commodity hardware
WHY SNABB?
What software to put into this hardware?
Common intuition: Linux
Drawback: Linux is not suitable for high-performance networking
WHY NOT LINUX?
General-purpose operating system
An OS abstracts hw resources to offer high-level interfaces: filesystems,
processes, sockets...
Our network function will be divided into two lands: user-space and kernel-
space
Colorary: processing a packet has an inheritent cost => the cost of the OS
HIGH-PERFORMANCE NETWORKING
NIC: 10Gbps
Avg Packet-size: 550-byte
PPS: 2272727,27
1 packet every 440ns ((1/2272727,27)*10^9)
CPU: 2,5 Ghz
1100 cycles to process one packet (2,5 cycles/sec * 440 ns)
HIGH-PERFORMANCE NETWORKING
Packet-size: 64-byte: 51 ns per packet; 128 cycles per packet
Lock/Unlock: 16ns; Cache-miss: 32 ns
Source: Jonathan Corbet's
Small packet size => More packets per second => worse
Faster CPU => better
"Improving Linux networking performance"
USER-SPACE DRIVER
Do a kernel by-pass and manage the hardware directly from user-space:
Tell Linux not to manage the PCI device (unbind)
Do a mmap of the registers of the PCI device into addressable memory
Whenever we read/write the addressable memory, we're actually poking the
registers of the NIC
Follow the NIC's datasheet to implement operations such as initialize,
receive, transmit, etc
USER-SPACE NETWORKING
Snabb is not an isolated case of user-space networking:
Snabb (2012)
DPDK (2012)
VPP/fd.io (2016)
DPDK (Data-plane Development Kit, Intel)
VPP (Vector Packet Processing, Cisco)
RING-BUFFER
Very important to avoid packet drops
INSIDE SNABB
SNABB
Project started by Luke Gorrie
User-space networking benefit: freedom of programming language
Snabb is mostly written in Lua
Network functions are also written in Lua
Fast to run, fast to develop
Snabb means fast in Swedish :)
ABOUT LUA
Started in 1993 at University of Rio de Janeiro (PUC Rio)
Very similar to JavaScript, easy to learn
Very small and compact, it's generally embeded in other systems
Use cases: microcontrollers (NodeMCU), videogames (Grim Fandango), IA
(Torch7)
ABOUT LUAJIT
Just-in-time compiler for Lua
Extremely fast virtual machine!!
Very good integration with C thanks to FFI (Foreign Function Interface)
FFI: EXAMPLE
ffi.cdef[[
void syslog(int priority, const char*format, ...);
]]
ffi.C.syslog(2, "error:...");
local ether_header_t = ffi.typeof [[
/* All values in network byte order. */
struct {
uint8_t dhost[6];
uint8_t shost[6];
uint16_t type;
} __attribute__((packed))
]]
SNABB IN A NUTSHELL
A snabb program is an app graph
Apps are conected together via links
Snabb processes the program in units called breadths
NF: APP GRAPH
BREADTHS
A breadth has two steps:
inhale a batch of packets into the graph
process those packets
To inhale, the method pull of the apps is executed (if defined)
To process, the method push of the apps is executed (if defined)
# 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
PACKET PROCESSING
Normally only one app of the app graph introduces packets into the graph
The method push gives an opportunity to every app to do something with a
packet
APP GRAPH DEFINITION
local c = config.new()
-- App definition.
config.add(c, "nic", Intel82599, {
pci = "0000:04:00.0"
})
config.add(c, "filter", PcapFilter, "src port 80")
config.add(c, "writer", Pcap.PcapWriter, "output.pcap")
-- Link definition.
config.link(c, "nic.tx -> filter.input")
config.link(c, "filter.output -> writer.input")
engine.configure(c)
engine.main({duration=1})
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;
};
SNABB: APP CATALOG AND PROGRAMS
INVENTARY
apps: software components that developers combine together to build network
functions
programs: complete network functions
APPS I/O
Intel i210/i350/82599/XL710
Mellanox Connectx-4/5
Virtio host y guest
UNIX socket
Linux: tap and "raw" (e.g: eth0)
Pcap files
APPS L2
Flooding and learning bridge
VLAN insert/remove
ARP/NDP
APPS L3
IPv4/v6 fragmentation and reassembly
IPv4/v6 splitter
ICMPv4/v6 echo responder
Control-plane delegation (nh_fwd)
APPS L4
IPsec ESP
Lightweight 4-over-6 AFTR
Keyed IPv6 Tunnel
APPS MONITORING
IPFix capturer and exporter
L7 monitor/filtering (libndpi)
Pcap expressions filter (with own backend for code generation)
APPS TESTING
Lots of load generators: loadgen, packetblaster, loadbench...
USE CASE: LWAFTR
CONTEXT
2012-2014: Several RIRs run out of IPv4 public addresses
2008: IPv6 adoption starts to peak up
Still big dependency on IPv4: services, websites, programs, etc
SOLUTIONS
Carrier-Grade NAT: temporal solution for IPv4 address exhaustion problem
Deployment of Dual-Stack networks (IPv4 e IPv6)
Dual-Stack implies increasing complexity and costs (maintenance of two
separated networks)
Dual-Stack Lite (IPv6-only network which also offers IPv4 connectivity relying
on CGN)
Lightweight 4over6: iteration over Dual-Stack
LIGHTWEIGHT 4OVER6
LW4O6 - GOALS
RFC7596 fully complaint (lwAFTR part)
Performance: 2MPPS; 550-byte (packet-size); Binding-table: 1M subscribers.
No packet drops
LW4O6 - DEVELOPMENT
Version 1:
Prototype
Basic functionality (encapsulating/decapsulating)
Small binding-table (own format)
Development of tools to measure performance
LW4O6 - DEVELOPMENT
Version 2
Production quality
Fully standard compliant
Big binding-table: 1M subscribers (still customized format but much closer
to standard)
Add support for other necessary protocols: ARP, NDP, fragmentation,
reassembly, ping
Tons of optimizations (use of AVX instructions to speed up lookups)
LW4O6 - DEVELOPMENT
Version 3:
Added YANG support to Snabb
Support binding-table format according to standard
Support of execution as leader/worker (leader: control-plane/worker: data-
plane)
LW4O6 - DEVELOPMENT
Version 4:
Multiprocess (one leader, multiple workers)
Improvement of the Intel 10Gbps driver (added support for RSS, Received
Side Scaling)
Added alarms support according to latest draft
LIGHTWEIGHT 4OVER6 - TALKS
Juniper's vMX Lightweight 4over6 VNF
Charla:
Kostas Zordabelos's A real-world scale network VF using Snabb for lw4o6
Charla:
Juniper Tech Club, Marzo 2017
SDN Meetup, Abril 2017
OTHER PROGRAMS
PROGRAM: PACKET BLASTER
Generally useful tool: fill TX buffer of NIC with packets and transmit them over
and over again
Measures received traffic too
Easily saturates 10Gbps links
snabb packetblaster replay packets.pcap 82:00.1
PROGRAM: SNABBWALL
L7 firewall that optionally uses nDPI
Collaboration betwen Igalia and NLnet Foundation
Landed upstream in 2017
Website: http://snabbwall.org
PROGRAM: IPFIX
NETFLOW collector and exporter (v9 and IPFIX)
Line-rate speed on a single core. Further improvement: parallel processing via
RSS
Landed upstream very recently
PROGRAM: L2VPN
L2VPN over IPv6 (developed by Alexander Gall from SWITCH)
Pending to land upstream; used in production
Ideal Snabb use case: programmer/operator builds bespoke tool
PROGRAM: YOUR VNF
Snabb upstream open to include new network functions
Repository will grow as people will build new things
Igalia can build one for you
LAST NOTES ABOUT PERFORMANCE
CONSIDERATIONS
Isolcpus: Prevents the kernel to take a CPU to schedule processes
Dishable HyperThreading
Use HugePages (2MB) (Linux default is 4Kb)
Do not neglect NUMA when launching programs
Make use of SIMD instructions (AVX, AVX2) to speed up computations
(checksum)
Keep an eye on regressions: profile often
SUMMARY
Toolkit for developing high-performance network functions in user-space
Snabb provides apps which can be combined together forming a graph (network
function)
Snabb provides programs, complete network functions ready to use
Snabb provides libraries, to easy the development of new network functions
Completely written in Lua: easy to extend
Fast: kernel-by pass + high-level language + fast VM (LuaJIT)
THANKS!
Email: dpino@igalia.com
Twitter: @diepg
$ git clone https://github.com/snabbco/snabb.git
$ cd snabb
$ make

More Related Content

What's hot

Naveen nimmu sdn future of networking
Naveen nimmu sdn   future of networkingNaveen nimmu sdn   future of networking
Naveen nimmu sdn future of networkingsuniltomar04
 
Next Generation Network Developer Skills
Next Generation Network Developer SkillsNext Generation Network Developer Skills
Next Generation Network Developer Skillsmestery
 
Tungsten Fabric Overview
Tungsten Fabric OverviewTungsten Fabric Overview
Tungsten Fabric OverviewMichelle Holley
 
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...IO Visor Project
 
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation Ecosystem
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation EcosystemHow APIs are Transforming Cisco Solutions and Catalyzing an Innovation Ecosystem
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation EcosystemCisco DevNet
 
Openstack Neutron, interconnections with BGP/MPLS VPNs
Openstack Neutron, interconnections with BGP/MPLS VPNsOpenstack Neutron, interconnections with BGP/MPLS VPNs
Openstack Neutron, interconnections with BGP/MPLS VPNsThomas Morin
 
Hands on with CoAP and Californium
Hands on with CoAP and CaliforniumHands on with CoAP and Californium
Hands on with CoAP and CaliforniumJulien Vermillard
 
Openstack Neutron Insights
Openstack Neutron InsightsOpenstack Neutron Insights
Openstack Neutron InsightsAtul Pandey
 
Inside Microsoft's FPGA-Based Configurable Cloud
Inside Microsoft's FPGA-Based Configurable CloudInside Microsoft's FPGA-Based Configurable Cloud
Inside Microsoft's FPGA-Based Configurable Cloudinside-BigData.com
 
HPC Best Practices: Application Performance Optimization
HPC Best Practices: Application Performance OptimizationHPC Best Practices: Application Performance Optimization
HPC Best Practices: Application Performance Optimizationinside-BigData.com
 
LF_DPDK17_Lagopus Router
LF_DPDK17_Lagopus RouterLF_DPDK17_Lagopus Router
LF_DPDK17_Lagopus RouterLF_DPDK
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux NetworkingPLUMgrid
 
DevOops - Lessons Learned from an OpenStack Network Architect
DevOops - Lessons Learned from an OpenStack Network ArchitectDevOops - Lessons Learned from an OpenStack Network Architect
DevOops - Lessons Learned from an OpenStack Network ArchitectJames Denton
 
Crossing the river by feeling the stones from legacy to cloud native applica...
Crossing the river by feeling the stones  from legacy to cloud native applica...Crossing the river by feeling the stones  from legacy to cloud native applica...
Crossing the river by feeling the stones from legacy to cloud native applica...OPNFV
 
Introducing HPC with a Raspberry Pi Cluster
Introducing HPC with a Raspberry Pi ClusterIntroducing HPC with a Raspberry Pi Cluster
Introducing HPC with a Raspberry Pi Clusterinside-BigData.com
 
Evolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorEvolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorLarry Lang
 
Summit 16: Service Function Chaining: Demo and Usage
Summit 16: Service Function Chaining: Demo and UsageSummit 16: Service Function Chaining: Demo and Usage
Summit 16: Service Function Chaining: Demo and UsageOPNFV
 
Stacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStackStacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStackOpen-NFP
 

What's hot (20)

Naveen nimmu sdn future of networking
Naveen nimmu sdn   future of networkingNaveen nimmu sdn   future of networking
Naveen nimmu sdn future of networking
 
Ryu sdn framework
Ryu sdn framework Ryu sdn framework
Ryu sdn framework
 
Next Generation Network Developer Skills
Next Generation Network Developer SkillsNext Generation Network Developer Skills
Next Generation Network Developer Skills
 
Tungsten Fabric Overview
Tungsten Fabric OverviewTungsten Fabric Overview
Tungsten Fabric Overview
 
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
Using IO Visor to Secure Microservices Running on CloudFoundry [OpenStack Sum...
 
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation Ecosystem
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation EcosystemHow APIs are Transforming Cisco Solutions and Catalyzing an Innovation Ecosystem
How APIs are Transforming Cisco Solutions and Catalyzing an Innovation Ecosystem
 
Openstack Neutron, interconnections with BGP/MPLS VPNs
Openstack Neutron, interconnections with BGP/MPLS VPNsOpenstack Neutron, interconnections with BGP/MPLS VPNs
Openstack Neutron, interconnections with BGP/MPLS VPNs
 
Hands on with CoAP and Californium
Hands on with CoAP and CaliforniumHands on with CoAP and Californium
Hands on with CoAP and Californium
 
Openstack Neutron Insights
Openstack Neutron InsightsOpenstack Neutron Insights
Openstack Neutron Insights
 
Inside Microsoft's FPGA-Based Configurable Cloud
Inside Microsoft's FPGA-Based Configurable CloudInside Microsoft's FPGA-Based Configurable Cloud
Inside Microsoft's FPGA-Based Configurable Cloud
 
HPC Best Practices: Application Performance Optimization
HPC Best Practices: Application Performance OptimizationHPC Best Practices: Application Performance Optimization
HPC Best Practices: Application Performance Optimization
 
LF_DPDK17_Lagopus Router
LF_DPDK17_Lagopus RouterLF_DPDK17_Lagopus Router
LF_DPDK17_Lagopus Router
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
DevOops - Lessons Learned from an OpenStack Network Architect
DevOops - Lessons Learned from an OpenStack Network ArchitectDevOops - Lessons Learned from an OpenStack Network Architect
DevOops - Lessons Learned from an OpenStack Network Architect
 
Tungsten Fabric and DPDK vRouter Architecture
Tungsten Fabric and DPDK vRouter ArchitectureTungsten Fabric and DPDK vRouter Architecture
Tungsten Fabric and DPDK vRouter Architecture
 
Crossing the river by feeling the stones from legacy to cloud native applica...
Crossing the river by feeling the stones  from legacy to cloud native applica...Crossing the river by feeling the stones  from legacy to cloud native applica...
Crossing the river by feeling the stones from legacy to cloud native applica...
 
Introducing HPC with a Raspberry Pi Cluster
Introducing HPC with a Raspberry Pi ClusterIntroducing HPC with a Raspberry Pi Cluster
Introducing HPC with a Raspberry Pi Cluster
 
Evolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorEvolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO Visor
 
Summit 16: Service Function Chaining: Demo and Usage
Summit 16: Service Function Chaining: Demo and UsageSummit 16: Service Function Chaining: Demo and Usage
Summit 16: Service Function Chaining: Demo and Usage
 
Stacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStackStacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStack
 

Similar to Snabb, a toolkit for building user-space network functions (ES.NOG 20)

Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Igalia
 
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)Igalia
 
2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application server2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application serverVOIP2DAY
 
Node-RED and Minecraft - CamJam September 2015
Node-RED and Minecraft - CamJam September 2015Node-RED and Minecraft - CamJam September 2015
Node-RED and Minecraft - CamJam September 2015Boris Adryan
 
Snabbflow: A Scalable IPFIX exporter
Snabbflow: A Scalable IPFIX exporterSnabbflow: A Scalable IPFIX exporter
Snabbflow: A Scalable IPFIX exporterIgalia
 
FD.io Vector Packet Processing (VPP)
FD.io Vector Packet Processing (VPP)FD.io Vector Packet Processing (VPP)
FD.io Vector Packet Processing (VPP)Kirill Tsym
 
FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingKernel TLV
 
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...Jim St. Leger
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationLinaro
 
High Performance Networking Leveraging the DPDK and Growing Community
High Performance Networking Leveraging the DPDK and Growing CommunityHigh Performance Networking Leveraging the DPDK and Growing Community
High Performance Networking Leveraging the DPDK and Growing Community6WIND
 
LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1Hajime Tazaki
 
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Igalia
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDKKernel TLV
 
Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesNicola Ferraro
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxSamsung Open Source Group
 
DPDK summit 2015: It's kind of fun to do the impossible with DPDK
DPDK summit 2015: It's kind of fun  to do the impossible with DPDKDPDK summit 2015: It's kind of fun  to do the impossible with DPDK
DPDK summit 2015: It's kind of fun to do the impossible with DPDKLagopus SDN/OpenFlow switch
 
DPDK Summit 2015 - NTT - Yoshihiro Nakajima
DPDK Summit 2015 - NTT - Yoshihiro NakajimaDPDK Summit 2015 - NTT - Yoshihiro Nakajima
DPDK Summit 2015 - NTT - Yoshihiro NakajimaJim St. Leger
 
Software Stacks to enable SDN and NFV
Software Stacks to enable SDN and NFVSoftware Stacks to enable SDN and NFV
Software Stacks to enable SDN and NFVYoshihiro Nakajima
 
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in ContainernetAndrew Wang
 

Similar to Snabb, a toolkit for building user-space network functions (ES.NOG 20) (20)

Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
 
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
D. Fast, Simple User-Space Network Functions with Snabb (RIPE 77)
 
NkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application serverNkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application server
 
2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application server2014 carlos gzlez florido nksip the erlang sip application server
2014 carlos gzlez florido nksip the erlang sip application server
 
Node-RED and Minecraft - CamJam September 2015
Node-RED and Minecraft - CamJam September 2015Node-RED and Minecraft - CamJam September 2015
Node-RED and Minecraft - CamJam September 2015
 
Snabbflow: A Scalable IPFIX exporter
Snabbflow: A Scalable IPFIX exporterSnabbflow: A Scalable IPFIX exporter
Snabbflow: A Scalable IPFIX exporter
 
FD.io Vector Packet Processing (VPP)
FD.io Vector Packet Processing (VPP)FD.io Vector Packet Processing (VPP)
FD.io Vector Packet Processing (VPP)
 
FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet Processing
 
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...
DPDK Summit - 08 Sept 2014 - 6WIND - High Perf Networking Leveraging the DPDK...
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
 
High Performance Networking Leveraging the DPDK and Growing Community
High Performance Networking Leveraging the DPDK and Growing CommunityHigh Performance Networking Leveraging the DPDK and Growing Community
High Performance Networking Leveraging the DPDK and Growing Community
 
LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1
 
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
 
Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with Kubernetes
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
 
DPDK summit 2015: It's kind of fun to do the impossible with DPDK
DPDK summit 2015: It's kind of fun  to do the impossible with DPDKDPDK summit 2015: It's kind of fun  to do the impossible with DPDK
DPDK summit 2015: It's kind of fun to do the impossible with DPDK
 
DPDK Summit 2015 - NTT - Yoshihiro Nakajima
DPDK Summit 2015 - NTT - Yoshihiro NakajimaDPDK Summit 2015 - NTT - Yoshihiro Nakajima
DPDK Summit 2015 - NTT - Yoshihiro Nakajima
 
Software Stacks to enable SDN and NFV
Software Stacks to enable SDN and NFVSoftware Stacks to enable SDN and NFV
Software Stacks to enable SDN and NFV
 
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
 

More from Igalia

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEIgalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesIgalia
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceIgalia
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfIgalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JITIgalia
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!Igalia
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerIgalia
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in MesaIgalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIgalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera LinuxIgalia
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVMIgalia
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsIgalia
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesIgalia
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSIgalia
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webIgalia
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersIgalia
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...Igalia
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on RaspberryIgalia
 

More from Igalia (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Recently uploaded (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

Snabb, a toolkit for building user-space network functions (ES.NOG 20)

  • 1. SNABB A TOOLKIT FOR BUILDING USER-SPACE NETWORK FUNCTIONS
  • 2.
  • 3. ABOUT IGALIA Consultancy specialized in open-source Base in Coruña but distributed all over the world (>60 people working from 15 different countries) Contributors to projects such as WebKit, Chromium V8, etc Other areas: Graphics, Multimedia, Networking
  • 5. AGENDA What is Snabb? How it works? Catalog and programs Use case: lwAFTR
  • 6. WHAT IS SNABB? Snabb is a toolkit for developing high-performance network functions in user- space
  • 7. WHAT IS A NETWORK FUNCTION? A program that manipulates traffic data Basic operations: read, forward, drop, modify, create... Combining these primitives we can build any network function
  • 8. EXAMPLES Firewall: read incoming packets, compare to table of rules and execute an action(forward or drop) NAT: read incoming packets, modify headers and forward packet Tunelling: read incoming packets, create a new packet, embed packet into new one and send it
  • 9. WHY SNABB? Increasing improvement of commodity hardware: 10Gbps NICs at very affordable prices High-performance equipment is still very expensive Idea: build an analog high-performance router using commodity hardware
  • 10. WHY SNABB? What software to put into this hardware? Common intuition: Linux Drawback: Linux is not suitable for high-performance networking
  • 11. WHY NOT LINUX? General-purpose operating system An OS abstracts hw resources to offer high-level interfaces: filesystems, processes, sockets... Our network function will be divided into two lands: user-space and kernel- space Colorary: processing a packet has an inheritent cost => the cost of the OS
  • 12. HIGH-PERFORMANCE NETWORKING NIC: 10Gbps Avg Packet-size: 550-byte PPS: 2272727,27 1 packet every 440ns ((1/2272727,27)*10^9) CPU: 2,5 Ghz 1100 cycles to process one packet (2,5 cycles/sec * 440 ns)
  • 13. HIGH-PERFORMANCE NETWORKING Packet-size: 64-byte: 51 ns per packet; 128 cycles per packet Lock/Unlock: 16ns; Cache-miss: 32 ns Source: Jonathan Corbet's Small packet size => More packets per second => worse Faster CPU => better "Improving Linux networking performance"
  • 14. USER-SPACE DRIVER Do a kernel by-pass and manage the hardware directly from user-space: Tell Linux not to manage the PCI device (unbind) Do a mmap of the registers of the PCI device into addressable memory Whenever we read/write the addressable memory, we're actually poking the registers of the NIC Follow the NIC's datasheet to implement operations such as initialize, receive, transmit, etc
  • 15. USER-SPACE NETWORKING Snabb is not an isolated case of user-space networking: Snabb (2012) DPDK (2012) VPP/fd.io (2016) DPDK (Data-plane Development Kit, Intel) VPP (Vector Packet Processing, Cisco)
  • 16. RING-BUFFER Very important to avoid packet drops
  • 18. SNABB Project started by Luke Gorrie User-space networking benefit: freedom of programming language Snabb is mostly written in Lua Network functions are also written in Lua Fast to run, fast to develop Snabb means fast in Swedish :)
  • 19. ABOUT LUA Started in 1993 at University of Rio de Janeiro (PUC Rio) Very similar to JavaScript, easy to learn Very small and compact, it's generally embeded in other systems Use cases: microcontrollers (NodeMCU), videogames (Grim Fandango), IA (Torch7)
  • 20. ABOUT LUAJIT Just-in-time compiler for Lua Extremely fast virtual machine!! Very good integration with C thanks to FFI (Foreign Function Interface)
  • 21. FFI: EXAMPLE ffi.cdef[[ void syslog(int priority, const char*format, ...); ]] ffi.C.syslog(2, "error:..."); local ether_header_t = ffi.typeof [[ /* All values in network byte order. */ struct { uint8_t dhost[6]; uint8_t shost[6]; uint16_t type; } __attribute__((packed)) ]]
  • 22. SNABB IN A NUTSHELL A snabb program is an app graph Apps are conected together via links Snabb processes the program in units called breadths
  • 24. BREADTHS A breadth has two steps: inhale a batch of packets into the graph process those packets To inhale, the method pull of the apps is executed (if defined) To process, the method push of the apps is executed (if defined)
  • 25. # 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
  • 26. # 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
  • 27. PACKET PROCESSING Normally only one app of the app graph introduces packets into the graph The method push gives an opportunity to every app to do something with a packet
  • 28. APP GRAPH DEFINITION local c = config.new() -- App definition. config.add(c, "nic", Intel82599, { pci = "0000:04:00.0" }) config.add(c, "filter", PcapFilter, "src port 80") config.add(c, "writer", Pcap.PcapWriter, "output.pcap") -- Link definition. config.link(c, "nic.tx -> filter.input") config.link(c, "filter.output -> writer.input") engine.configure(c) engine.main({duration=1})
  • 29. PACKETS struct packet { uint16_t length; unsigned char data[10*1024]; };
  • 30. LINKS struct link { struct packet *packets[1024]; // the next element to be read int read; // the next element to be written int write; };
  • 31. SNABB: APP CATALOG AND PROGRAMS
  • 32. INVENTARY apps: software components that developers combine together to build network functions programs: complete network functions
  • 33. APPS I/O Intel i210/i350/82599/XL710 Mellanox Connectx-4/5 Virtio host y guest UNIX socket Linux: tap and "raw" (e.g: eth0) Pcap files
  • 34. APPS L2 Flooding and learning bridge VLAN insert/remove ARP/NDP
  • 35. APPS L3 IPv4/v6 fragmentation and reassembly IPv4/v6 splitter ICMPv4/v6 echo responder Control-plane delegation (nh_fwd)
  • 36. APPS L4 IPsec ESP Lightweight 4-over-6 AFTR Keyed IPv6 Tunnel
  • 37. APPS MONITORING IPFix capturer and exporter L7 monitor/filtering (libndpi) Pcap expressions filter (with own backend for code generation)
  • 38. APPS TESTING Lots of load generators: loadgen, packetblaster, loadbench...
  • 40. CONTEXT 2012-2014: Several RIRs run out of IPv4 public addresses 2008: IPv6 adoption starts to peak up Still big dependency on IPv4: services, websites, programs, etc
  • 41. SOLUTIONS Carrier-Grade NAT: temporal solution for IPv4 address exhaustion problem Deployment of Dual-Stack networks (IPv4 e IPv6) Dual-Stack implies increasing complexity and costs (maintenance of two separated networks) Dual-Stack Lite (IPv6-only network which also offers IPv4 connectivity relying on CGN) Lightweight 4over6: iteration over Dual-Stack
  • 43. LW4O6 - GOALS RFC7596 fully complaint (lwAFTR part) Performance: 2MPPS; 550-byte (packet-size); Binding-table: 1M subscribers. No packet drops
  • 44. LW4O6 - DEVELOPMENT Version 1: Prototype Basic functionality (encapsulating/decapsulating) Small binding-table (own format) Development of tools to measure performance
  • 45. LW4O6 - DEVELOPMENT Version 2 Production quality Fully standard compliant Big binding-table: 1M subscribers (still customized format but much closer to standard) Add support for other necessary protocols: ARP, NDP, fragmentation, reassembly, ping Tons of optimizations (use of AVX instructions to speed up lookups)
  • 46. LW4O6 - DEVELOPMENT Version 3: Added YANG support to Snabb Support binding-table format according to standard Support of execution as leader/worker (leader: control-plane/worker: data- plane)
  • 47. LW4O6 - DEVELOPMENT Version 4: Multiprocess (one leader, multiple workers) Improvement of the Intel 10Gbps driver (added support for RSS, Received Side Scaling) Added alarms support according to latest draft
  • 48. LIGHTWEIGHT 4OVER6 - TALKS Juniper's vMX Lightweight 4over6 VNF Charla: Kostas Zordabelos's A real-world scale network VF using Snabb for lw4o6 Charla: Juniper Tech Club, Marzo 2017 SDN Meetup, Abril 2017
  • 50. PROGRAM: PACKET BLASTER Generally useful tool: fill TX buffer of NIC with packets and transmit them over and over again Measures received traffic too Easily saturates 10Gbps links snabb packetblaster replay packets.pcap 82:00.1
  • 51. PROGRAM: SNABBWALL L7 firewall that optionally uses nDPI Collaboration betwen Igalia and NLnet Foundation Landed upstream in 2017 Website: http://snabbwall.org
  • 52. PROGRAM: IPFIX NETFLOW collector and exporter (v9 and IPFIX) Line-rate speed on a single core. Further improvement: parallel processing via RSS Landed upstream very recently
  • 53. PROGRAM: L2VPN L2VPN over IPv6 (developed by Alexander Gall from SWITCH) Pending to land upstream; used in production Ideal Snabb use case: programmer/operator builds bespoke tool
  • 54. PROGRAM: YOUR VNF Snabb upstream open to include new network functions Repository will grow as people will build new things Igalia can build one for you
  • 55. LAST NOTES ABOUT PERFORMANCE
  • 56. CONSIDERATIONS Isolcpus: Prevents the kernel to take a CPU to schedule processes Dishable HyperThreading Use HugePages (2MB) (Linux default is 4Kb) Do not neglect NUMA when launching programs Make use of SIMD instructions (AVX, AVX2) to speed up computations (checksum) Keep an eye on regressions: profile often
  • 57. SUMMARY Toolkit for developing high-performance network functions in user-space Snabb provides apps which can be combined together forming a graph (network function) Snabb provides programs, complete network functions ready to use Snabb provides libraries, to easy the development of new network functions Completely written in Lua: easy to extend Fast: kernel-by pass + high-level language + fast VM (LuaJIT)
  • 58. THANKS! Email: dpino@igalia.com Twitter: @diepg $ git clone https://github.com/snabbco/snabb.git $ cd snabb $ make