SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Snabbflow: a scalable IPFIX exporter
A tour of the IPFIX exporter developed at SWITCH
Who we are
Alexander Gall
Network engineer at SWITCH,
Snabb contributor since 2014
alexander.gall@switch.ch
Max Rottenkolber
Works on Snabb since 2014
maximilian@igalia.com
Snabbflow
at SWITCH
Motivation, function,
deployment
Netflow at SWITCH
The concept of a “flow” is the primary mechanism used to analyze network traffic
● 5-tuple <src address, dst address, IP protocol, src port, dst port>
● Aggregates bytes/packets, additional custom fields (TCP flags, AS
numbers…)
● Evolved from Cisco-proprietary to IETF standard IPFIX
● Unsampled (process every packet) or sampled (process 1 in n packets)
In use at SWITCH since mid 1990s. Until a few years ago
● Provided in Hardware by the routers
● Unsampled
Modern routers moved to sampling to cope with high-volume traffic
Sampled vs Unsampled
Sampling approximates real values well for volume-based metrics. Why use
unsampled Netflow?
● Fine-grained analysis of security incidents
● Debugging of network problems for single flows, e.g.
○ TCP handshake
○ DNS transaction
Requires
● Move from router to external appliance for Netflow generation
● Find a scalable and cost-effective solution: Snabbflow
SWITCH Network
● Peak traffic values (aggregate external traffic, ingress + egress)
○ ~180Gbps
○ ~20Mpps
○ ~350k flows per second (>500kfps with aggressive port-scans)
● Aggregate IPFIX export data rate 200-300Mbps
● Average flow rate 200k/s, 1.5TiB flow data per day (~100 bytes/flow)
● Interface types: optical 10G, 100G soon 400G
● Until 2015 Netflow export on (Cisco) routers
● 2015-2020 commercial Netflow exporter using hardware acceleration
● Since 2020 Snabbflow
Per-PoP Exporter Architecture
● Optical taps on external interfaces to copy packets
● “Packet-Broker” to aggregate traffic to 2x100 Gbps links to Snabbflow
exporter
○ Use VLAN tags to identify original router ports
○ “Whitebox” switch
■ EdgeCore Wedge100BF-32x/AS9516-32D
■ Tofino/Tofino2 ASIC
■ P4-programmable
■ Separate project: https://github.com/alexandergall/packet-broker
● Snabbflow on commodity 1RU server
○ AMD Epyc or Intel Xeon, 12-24 cores, ~128GiB RAM for large flow tables
○ 2x100G Mellanox ConnectX-5 NICs
SWITCH
border router
Foreign BR1
8-port splitter
Packet Broker
Snabbflow
Foreign BR2
Foreign BR3
Foreign BR8
adds vlan for each
“color“ so we know
where packets came
from
Vlan
151
Vlan
152
Vlan
153
Vlan
154
Vlan
155 Foreign BRx
Vlan
156
Vlan
165
Vlan
166
Features of
Snabbflow
snabb ipfix probe
Scaling, configuration, monitoring
and their implementation
Built with
- A toolkit for building fast packet processing applications using a
high-level programming language
- Written in Lua (using the amazing LuaJIT compiler)!
- Packet I/O without going through the kernel (kernel-bypass /
userspace networking)
- Open source and independent (not sponsored by any $vendor)
● Simple > Complex
● Small > Large
● Commodity > Proprietary
Recording packet metadata in a flow table
function FlowSet:record_flows(timestamp)
local entry = self.scratch_entry
for i=1,link.nreadable(self.incoming) do
local pkt = link.receive(self.incoming)
self.template:extract(pkt, timestamp, entry)
local lookup_result = self.table:lookup_ptr(entry.key)
if lookup_result == nil then
self.table:add(entry.key, entry.value)
else
self.template:accumulate(lookup_result, entry, pkt)
end
packet.free(pkt)
end
end
Flushing ipfix records
-- Walk through flow set to see if flow records need to be expired.
-- Collect expired records and export them to the collector.
function FlowSet:expire_records(out, now)
local cursor = self.expiry_cursor
…
for i = 1, self.table_tb:take_burst() do
local entry
cursor, entry = self.table:next_entry(cursor, cursor + 1)
…
if entry then
…
self:add_data_record(entry.key, out)
end
end
if self.flush_timer() then self:flush_data_records(out) end
end
High-level overview
100G NIC
(Driver written in
Lua)
Snabb ipfix
probe
tun/tap
(Linux kernel
network stack)
ipfix
collector
Scaling via hardware RSS
100G NIC
(Driver written in
Lua)
Snabb
ipfix
probe
RSS forwards distinct sets of
flows to distinct Snabbflow
processes
Horizontal scaling!
Circle = CPU core
Scaling via software RSS
Snabb
ipfix
probe
IP
template
DNS/HTTP
template
Software RSS forwards distinct sets of flows
to distinct exporter processes extracting
different sets of metadata.
Isolate workloads! (Complex packet
inspection does not bog down basic
metadata export)
Circle = CPU core
“Apps” and multi-processing
ConnectX
Driver
App
ARP App
input
output
Snabb programs are organized in “apps”
(independent packet processing
components)
Communicate with each other via “links”:
p = link.receive(input)
link.transmit(output, p)
“Apps” and multi-processing (lib.interlink)
cpu core 1 cpu core 1
ConnectX
Driver
App
ARP App
Interlink
Transmitter
App
Interlink
Receiver
App
Interlink
Packets can be shared with low
overhead across CPU core boundaries
using “interlinks”.
Link interface remains orthogonal:
p = link.receive(input)
link.transmit(output, p)
lib.ptree
Control plane (manager)
Data plane (worker)
- Can query and update data-plane configuration
- Knows about data-plane state
- No particular latency requirements
- Manages multiple data-plane workers
(on dedicated CPU cores)
- Soft real-time! No messing around!
- Receives configuration updates from manager
- Writes state counters to shared memory
Data plane (worker)
Data plane (worker)
lib.yang
Application configuration and state are described in a YANG schema.
$ snabb config set my-process / < ipfix.conf
$ snabb config get-state my-process 
/snabbflow-state/exporter[name=ip]
packets-dropped 0;
packets-ignored 129326;
packets-received 499996;
template {
id 1512;
flow-export-packets 115;
flows-exported 1318;
packets-processed 12034;
…
snabb-snabbflow-v1.yang
module snabb-snabbflow-v1 {
…
container snabbflow-config {
description
"Configuration for the Snabbflow IPFIX exporter.";
list interface {
key device;
unique "name vlan-tag";
description
"Interfaces serving as IPFIX Observation Points.";
leaf device {
type pci-address;
description
"PCI address of the network device.";
}
…
- Schema defines both valid configuration
and state trees
- YANG is expressive: control-plane can
effectively reject invalid data-plane
configurations
- Snabb programs translate valid
configurations to app and link networks
running in data-plane
Flight recorder
- Minimal overhead: always on! (if you want it)
- Stores useful data
- JIT trace info
- Trace profiles (sampled)
- High-frequency event log (sampled)
- Can be analyzed while running or post mortem
- tar cf blackbox.tar /var/run/snabb; scp blackbox.tar …
Where does my program spend
its time?
Does the JIT have issues
generating efficient code?
Includes full IR / assembly
dump for each compiled trace!
Latency histograms derived
from event log
Here: ipfix app takes ~35us
to process a batch of
packets.
Useful for debugging tail
latencies.
Can add arbitrary
application-specific,
user-defined events.
If you write a Snabb program today
You can reuse all of these components and more!
Thanks for your
attention!
Questions?
GitHub: snabbco/snabb
Snabbflow:
alexander.gall@switch.ch
Commercial support for Snabb:
maximilian@igalia.com

Contenu connexe

Tendances

OpenDaylight app development tutorial
OpenDaylight app development tutorialOpenDaylight app development tutorial
OpenDaylight app development tutorialSDN Hub
 
RISC-V & SoC Architectural Exploration for AI and ML Accelerators
RISC-V & SoC Architectural Exploration for AI and ML AcceleratorsRISC-V & SoC Architectural Exploration for AI and ML Accelerators
RISC-V & SoC Architectural Exploration for AI and ML AcceleratorsRISC-V International
 
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
 
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...HostedbyConfluent
 
Understanding Open vSwitch
Understanding Open vSwitch Understanding Open vSwitch
Understanding Open vSwitch YongKi Kim
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDKKernel TLV
 
Access Network Evolution
Access Network Evolution Access Network Evolution
Access Network Evolution Cisco Canada
 
네트워크 가상화 발표자료-SDN/NFV/Cloud
네트워크 가상화 발표자료-SDN/NFV/Cloud네트워크 가상화 발표자료-SDN/NFV/Cloud
네트워크 가상화 발표자료-SDN/NFV/Cloudseungdols
 
Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntuSim Janghoon
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux NetworkingPLUMgrid
 
Introduction to Red Hat OpenShift 4
Introduction to Red Hat OpenShift 4Introduction to Red Hat OpenShift 4
Introduction to Red Hat OpenShift 4HngNguyn748044
 
OpenStack networking
OpenStack networkingOpenStack networking
OpenStack networkingSim Janghoon
 
OpenWRT manual
OpenWRT manualOpenWRT manual
OpenWRT manualfosk
 
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...OpenStack
 
Accelerating Envoy and Istio with Cilium and the Linux Kernel
Accelerating Envoy and Istio with Cilium and the Linux KernelAccelerating Envoy and Istio with Cilium and the Linux Kernel
Accelerating Envoy and Istio with Cilium and the Linux KernelThomas Graf
 
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)Kentaro Ebisawa
 

Tendances (20)

OpenDaylight app development tutorial
OpenDaylight app development tutorialOpenDaylight app development tutorial
OpenDaylight app development tutorial
 
DPDK In Depth
DPDK In DepthDPDK In Depth
DPDK In Depth
 
RISC-V & SoC Architectural Exploration for AI and ML Accelerators
RISC-V & SoC Architectural Exploration for AI and ML AcceleratorsRISC-V & SoC Architectural Exploration for AI and ML Accelerators
RISC-V & SoC Architectural Exploration for AI and ML Accelerators
 
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
 
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...
Distributed Tracing for Kafka with OpenTelemetry with Daniel Kim | Kafka Summ...
 
Understanding Open vSwitch
Understanding Open vSwitch Understanding Open vSwitch
Understanding Open vSwitch
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
VPNaaS in Neutron
VPNaaS in NeutronVPNaaS in Neutron
VPNaaS in Neutron
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
 
Access Network Evolution
Access Network Evolution Access Network Evolution
Access Network Evolution
 
네트워크 가상화 발표자료-SDN/NFV/Cloud
네트워크 가상화 발표자료-SDN/NFV/Cloud네트워크 가상화 발표자료-SDN/NFV/Cloud
네트워크 가상화 발표자료-SDN/NFV/Cloud
 
Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntu
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
SystemV vs systemd
SystemV vs systemdSystemV vs systemd
SystemV vs systemd
 
Introduction to Red Hat OpenShift 4
Introduction to Red Hat OpenShift 4Introduction to Red Hat OpenShift 4
Introduction to Red Hat OpenShift 4
 
OpenStack networking
OpenStack networkingOpenStack networking
OpenStack networking
 
OpenWRT manual
OpenWRT manualOpenWRT manual
OpenWRT manual
 
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...
Meshing OpenStack and Bare Metal Networks with EVPN - David Iles, Mellanox Te...
 
Accelerating Envoy and Istio with Cilium and the Linux Kernel
Accelerating Envoy and Istio with Cilium and the Linux KernelAccelerating Envoy and Istio with Cilium and the Linux Kernel
Accelerating Envoy and Istio with Cilium and the Linux Kernel
 
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
 

Similaire à Snabbflow: A Scalable IPFIX exporter

FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingKernel TLV
 
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
 
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
 
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
 
FlowER Erlang Openflow Controller
FlowER Erlang Openflow ControllerFlowER Erlang Openflow Controller
FlowER Erlang Openflow ControllerHolger Winkelmann
 
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*Michelle Holley
 
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitch
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitchDPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitch
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitchJim St. Leger
 
Practical virtual network functions with Snabb (SDN Barcelona VI)
Practical virtual network functions with Snabb (SDN Barcelona VI)Practical virtual network functions with Snabb (SDN Barcelona VI)
Practical virtual network functions with Snabb (SDN Barcelona VI)Igalia
 
Snabb, a toolkit for building user-space network functions (ES.NOG 20)
Snabb, a toolkit for building user-space network functions (ES.NOG 20)Snabb, a toolkit for building user-space network functions (ES.NOG 20)
Snabb, a toolkit for building user-space network functions (ES.NOG 20)Igalia
 
Practical virtual network functions with Snabb (8th SDN Workshop)
Practical virtual network functions with Snabb (8th SDN Workshop)Practical virtual network functions with Snabb (8th SDN Workshop)
Practical virtual network functions with Snabb (8th SDN Workshop)Igalia
 
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)Yuuki Takano
 
Lagopus presentation on 14th Annual ON*VECTOR International Photonics Workshop
Lagopus presentation on 14th Annual ON*VECTOR International Photonics WorkshopLagopus presentation on 14th Annual ON*VECTOR International Photonics Workshop
Lagopus presentation on 14th Annual ON*VECTOR International Photonics WorkshopLagopus SDN/OpenFlow switch
 
Hari Krishna Vetsa Resume
Hari Krishna Vetsa ResumeHari Krishna Vetsa Resume
Hari Krishna Vetsa ResumeHari Krishna
 
Ocpeu14
Ocpeu14Ocpeu14
Ocpeu14KALRAY
 
Analise NetFlow in Real Time
Analise NetFlow in Real TimeAnalise NetFlow in Real Time
Analise NetFlow in Real TimePiotr Perzyna
 
Pristine glif 2015
Pristine glif 2015Pristine glif 2015
Pristine glif 2015ICT PRISTINE
 
CampusSDN2017 - Jawdat: SDN Technology Evolvement
CampusSDN2017 - Jawdat: SDN Technology EvolvementCampusSDN2017 - Jawdat: SDN Technology Evolvement
CampusSDN2017 - Jawdat: SDN Technology EvolvementJawdatTI
 
[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4Open Networking Summits
 

Similaire à Snabbflow: A Scalable IPFIX exporter (20)

FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet Processing
 
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)
 
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
 
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
 
FlowER Erlang Openflow Controller
FlowER Erlang Openflow ControllerFlowER Erlang Openflow Controller
FlowER Erlang Openflow Controller
 
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
Install FD.IO VPP On Intel(r) Architecture & Test with Trex*
 
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitch
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitchDPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitch
DPDK Summit - 08 Sept 2014 - NTT - High Performance vSwitch
 
Practical virtual network functions with Snabb (SDN Barcelona VI)
Practical virtual network functions with Snabb (SDN Barcelona VI)Practical virtual network functions with Snabb (SDN Barcelona VI)
Practical virtual network functions with Snabb (SDN Barcelona VI)
 
Snabb, a toolkit for building user-space network functions (ES.NOG 20)
Snabb, a toolkit for building user-space network functions (ES.NOG 20)Snabb, a toolkit for building user-space network functions (ES.NOG 20)
Snabb, a toolkit for building user-space network functions (ES.NOG 20)
 
Practical virtual network functions with Snabb (8th SDN Workshop)
Practical virtual network functions with Snabb (8th SDN Workshop)Practical virtual network functions with Snabb (8th SDN Workshop)
Practical virtual network functions with Snabb (8th SDN Workshop)
 
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
 
Lagopus presentation on 14th Annual ON*VECTOR International Photonics Workshop
Lagopus presentation on 14th Annual ON*VECTOR International Photonics WorkshopLagopus presentation on 14th Annual ON*VECTOR International Photonics Workshop
Lagopus presentation on 14th Annual ON*VECTOR International Photonics Workshop
 
OpenFlow Tutorial
OpenFlow TutorialOpenFlow Tutorial
OpenFlow Tutorial
 
Hari Krishna Vetsa Resume
Hari Krishna Vetsa ResumeHari Krishna Vetsa Resume
Hari Krishna Vetsa Resume
 
Ocpeu14
Ocpeu14Ocpeu14
Ocpeu14
 
Analise NetFlow in Real Time
Analise NetFlow in Real TimeAnalise NetFlow in Real Time
Analise NetFlow in Real Time
 
Pristine glif 2015
Pristine glif 2015Pristine glif 2015
Pristine glif 2015
 
CampusSDN2017 - Jawdat: SDN Technology Evolvement
CampusSDN2017 - Jawdat: SDN Technology EvolvementCampusSDN2017 - Jawdat: SDN Technology Evolvement
CampusSDN2017 - Jawdat: SDN Technology Evolvement
 
[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4
 

Plus de Igalia

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
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Igalia
 
Async page flip in DRM atomic API
Async page flip in DRM  atomic APIAsync page flip in DRM  atomic API
Async page flip in DRM atomic APIIgalia
 
From the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepFrom the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepIgalia
 
Migrating Babel from CommonJS to ESM
Migrating Babel     from CommonJS to ESMMigrating Babel     from CommonJS to ESM
Migrating Babel from CommonJS to ESMIgalia
 
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...Igalia
 
Freedreno on Android – XDC 2023
Freedreno on Android          – XDC 2023Freedreno on Android          – XDC 2023
Freedreno on Android – XDC 2023Igalia
 

Plus de Igalia (20)

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
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...
 
Async page flip in DRM atomic API
Async page flip in DRM  atomic APIAsync page flip in DRM  atomic API
Async page flip in DRM atomic API
 
From the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepFrom the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by Step
 
Migrating Babel from CommonJS to ESM
Migrating Babel     from CommonJS to ESMMigrating Babel     from CommonJS to ESM
Migrating Babel from CommonJS to ESM
 
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...
The rainbow treasure map: Advanced color management on Linux with AMD/Steam D...
 
Freedreno on Android – XDC 2023
Freedreno on Android          – XDC 2023Freedreno on Android          – XDC 2023
Freedreno on Android – XDC 2023
 

Dernier

Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Dernier (20)

Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Snabbflow: A Scalable IPFIX exporter

  • 1. Snabbflow: a scalable IPFIX exporter A tour of the IPFIX exporter developed at SWITCH
  • 2. Who we are Alexander Gall Network engineer at SWITCH, Snabb contributor since 2014 alexander.gall@switch.ch Max Rottenkolber Works on Snabb since 2014 maximilian@igalia.com
  • 4. Netflow at SWITCH The concept of a “flow” is the primary mechanism used to analyze network traffic ● 5-tuple <src address, dst address, IP protocol, src port, dst port> ● Aggregates bytes/packets, additional custom fields (TCP flags, AS numbers…) ● Evolved from Cisco-proprietary to IETF standard IPFIX ● Unsampled (process every packet) or sampled (process 1 in n packets) In use at SWITCH since mid 1990s. Until a few years ago ● Provided in Hardware by the routers ● Unsampled Modern routers moved to sampling to cope with high-volume traffic
  • 5. Sampled vs Unsampled Sampling approximates real values well for volume-based metrics. Why use unsampled Netflow? ● Fine-grained analysis of security incidents ● Debugging of network problems for single flows, e.g. ○ TCP handshake ○ DNS transaction Requires ● Move from router to external appliance for Netflow generation ● Find a scalable and cost-effective solution: Snabbflow
  • 6. SWITCH Network ● Peak traffic values (aggregate external traffic, ingress + egress) ○ ~180Gbps ○ ~20Mpps ○ ~350k flows per second (>500kfps with aggressive port-scans) ● Aggregate IPFIX export data rate 200-300Mbps ● Average flow rate 200k/s, 1.5TiB flow data per day (~100 bytes/flow) ● Interface types: optical 10G, 100G soon 400G ● Until 2015 Netflow export on (Cisco) routers ● 2015-2020 commercial Netflow exporter using hardware acceleration ● Since 2020 Snabbflow
  • 7. Per-PoP Exporter Architecture ● Optical taps on external interfaces to copy packets ● “Packet-Broker” to aggregate traffic to 2x100 Gbps links to Snabbflow exporter ○ Use VLAN tags to identify original router ports ○ “Whitebox” switch ■ EdgeCore Wedge100BF-32x/AS9516-32D ■ Tofino/Tofino2 ASIC ■ P4-programmable ■ Separate project: https://github.com/alexandergall/packet-broker ● Snabbflow on commodity 1RU server ○ AMD Epyc or Intel Xeon, 12-24 cores, ~128GiB RAM for large flow tables ○ 2x100G Mellanox ConnectX-5 NICs
  • 8. SWITCH border router Foreign BR1 8-port splitter Packet Broker Snabbflow Foreign BR2 Foreign BR3 Foreign BR8 adds vlan for each “color“ so we know where packets came from Vlan 151 Vlan 152 Vlan 153 Vlan 154 Vlan 155 Foreign BRx Vlan 156 Vlan 165 Vlan 166
  • 9. Features of Snabbflow snabb ipfix probe Scaling, configuration, monitoring and their implementation
  • 10. Built with - A toolkit for building fast packet processing applications using a high-level programming language - Written in Lua (using the amazing LuaJIT compiler)! - Packet I/O without going through the kernel (kernel-bypass / userspace networking) - Open source and independent (not sponsored by any $vendor)
  • 11. ● Simple > Complex ● Small > Large ● Commodity > Proprietary
  • 12. Recording packet metadata in a flow table function FlowSet:record_flows(timestamp) local entry = self.scratch_entry for i=1,link.nreadable(self.incoming) do local pkt = link.receive(self.incoming) self.template:extract(pkt, timestamp, entry) local lookup_result = self.table:lookup_ptr(entry.key) if lookup_result == nil then self.table:add(entry.key, entry.value) else self.template:accumulate(lookup_result, entry, pkt) end packet.free(pkt) end end
  • 13. Flushing ipfix records -- Walk through flow set to see if flow records need to be expired. -- Collect expired records and export them to the collector. function FlowSet:expire_records(out, now) local cursor = self.expiry_cursor … for i = 1, self.table_tb:take_burst() do local entry cursor, entry = self.table:next_entry(cursor, cursor + 1) … if entry then … self:add_data_record(entry.key, out) end end if self.flush_timer() then self:flush_data_records(out) end end
  • 14. High-level overview 100G NIC (Driver written in Lua) Snabb ipfix probe tun/tap (Linux kernel network stack) ipfix collector
  • 15. Scaling via hardware RSS 100G NIC (Driver written in Lua) Snabb ipfix probe RSS forwards distinct sets of flows to distinct Snabbflow processes Horizontal scaling! Circle = CPU core
  • 16. Scaling via software RSS Snabb ipfix probe IP template DNS/HTTP template Software RSS forwards distinct sets of flows to distinct exporter processes extracting different sets of metadata. Isolate workloads! (Complex packet inspection does not bog down basic metadata export) Circle = CPU core
  • 17. “Apps” and multi-processing ConnectX Driver App ARP App input output Snabb programs are organized in “apps” (independent packet processing components) Communicate with each other via “links”: p = link.receive(input) link.transmit(output, p)
  • 18. “Apps” and multi-processing (lib.interlink) cpu core 1 cpu core 1 ConnectX Driver App ARP App Interlink Transmitter App Interlink Receiver App Interlink Packets can be shared with low overhead across CPU core boundaries using “interlinks”. Link interface remains orthogonal: p = link.receive(input) link.transmit(output, p)
  • 19. lib.ptree Control plane (manager) Data plane (worker) - Can query and update data-plane configuration - Knows about data-plane state - No particular latency requirements - Manages multiple data-plane workers (on dedicated CPU cores) - Soft real-time! No messing around! - Receives configuration updates from manager - Writes state counters to shared memory Data plane (worker) Data plane (worker)
  • 20. lib.yang Application configuration and state are described in a YANG schema. $ snabb config set my-process / < ipfix.conf $ snabb config get-state my-process /snabbflow-state/exporter[name=ip] packets-dropped 0; packets-ignored 129326; packets-received 499996; template { id 1512; flow-export-packets 115; flows-exported 1318; packets-processed 12034; …
  • 21. snabb-snabbflow-v1.yang module snabb-snabbflow-v1 { … container snabbflow-config { description "Configuration for the Snabbflow IPFIX exporter."; list interface { key device; unique "name vlan-tag"; description "Interfaces serving as IPFIX Observation Points."; leaf device { type pci-address; description "PCI address of the network device."; } … - Schema defines both valid configuration and state trees - YANG is expressive: control-plane can effectively reject invalid data-plane configurations - Snabb programs translate valid configurations to app and link networks running in data-plane
  • 22. Flight recorder - Minimal overhead: always on! (if you want it) - Stores useful data - JIT trace info - Trace profiles (sampled) - High-frequency event log (sampled) - Can be analyzed while running or post mortem - tar cf blackbox.tar /var/run/snabb; scp blackbox.tar …
  • 23. Where does my program spend its time? Does the JIT have issues generating efficient code? Includes full IR / assembly dump for each compiled trace!
  • 24. Latency histograms derived from event log Here: ipfix app takes ~35us to process a batch of packets. Useful for debugging tail latencies. Can add arbitrary application-specific, user-defined events.
  • 25. If you write a Snabb program today You can reuse all of these components and more!
  • 26. Thanks for your attention! Questions? GitHub: snabbco/snabb Snabbflow: alexander.gall@switch.ch Commercial support for Snabb: maximilian@igalia.com