SlideShare a Scribd company logo
Jesper Dangaard Brouer
Kernel Developer
Red Hat
Kernel Recipes Conf
Paris, Sep 2019
XDP closer integration with
network stack
XDP closer integration with network stack
1
Overview: What will you learn?
Audience at Kernel Recipes: Other kernel developers
But for different kernel sub-systems
Learn about: kernel network data structures
Hopefully you already heard about XDP (eXpress Data Path) ? ? ?
I’ll explain why network sub-system created this…
Future crazy ideas to extend XDP
(hopefully) in a way that cooperate more with kernel netstack
Give you an easy way to try out XDP and BPF on your laptop
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
2
Why was XDP needed?
This was about the kernel networking stack staying relevant
For emerging use-cases and areas
Linux networking stack assumes layer L4-L7 delivery
Obviously slow when compared to L2-L3 kernel-bypass solutions
XDP operate at layers L2-L3
Shows same performance as these L2-L3 kernel-bypass solutions
The networking OSI layer model:
L2=Ethernet
L3=IPv4/IPv6
L4=TCP/UDP
L7=Applications
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
3
What is XDP?
What kind of monster did we create with XDP?!?
XDP (eXpress Data Path) is a Linux in-kernel fast-path
New programmable layer in-front of traditional network stack
Read, modify, drop, redirect or pass
For L2-L3 use-cases: seeing x10 performance improvements!
Can accelerate in-kernel L2-L3 use-cases (e.g. forwarding)
What is AF_XDP? (the Address Family XDP socket)
Hybrid kernel-bypass facility
Delivers raw L2 frames into userspace (in SPSC queue)
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
4
AF_XDP: Used for kernel-bypass?!?
Did you really say, this can be used for bypassing the Linux kernel netstack ?
Sure, build in freedom for kernel-bypass via AF_XDP
DPDK already have a Poll-Mode driver for AF_XDP
Why is this better, than other (bypass) solutions?
Flexible sharing of NIC resources, NIC still avail to netstack
XDP/eBPF prog filters packets using XDP_REDIRECT into AF_XDP socket
Move selective frames out of kernel, no need to reinject
Leverages existing kernel infrastructure, eco-system and market position
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
5
How can XDP be (ab)used?
Used or abused?
Freedom re-implement everything (when bypassing the kernel)
Or freedom to shoot yourself in the foot?
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
6
Simple view on how XDP gains speed
XDP speed gains comes from
Avoiding memory allocations
no SKB allocations and no-init (memset zero 4 cache-lines)
Bulk processing of frames
Very early access to frame (in driver code after DMA sync)
Ability to skip (large parts) of kernel code
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
7
Skipping code: Efficient optimization
Skipping code: Imply skipping features provided by network stack
Gave users freedom to e.g. skip netfilter or route-lookup
But users have to re-implement features they actually needed
Sometimes cumbersome via BPF-maps
Avoid re-implement features:
Evolve XDP via BPF-helpers
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
8
Evolving XDP via BPF-helpers
We should encourage adding helpers instead of duplicating data in BPF maps
Think of XDP as a software offload layer for the kernel netstack
Simply setup and use the Linux netstack, but accelerate parts of it with XDP
IP routing good example: Access routing table from XDP via BPF helpers (v4.18)
Let Linux handle routing (daemons) and neighbour/ARP lookups
Talk at LPC-2018 (David Ahern):
Obvious next target: Bridge lookup helper
Like IP routing: transparent XDP acceleration of bridge forwarding
Fallback for ARP lookups, flooding etc.
Huge potential performance boost for Linux bridge use cases!
Leveraging Kernel Tables with XDP
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
9
Understand networking packet data
structures
To understand next slides and (XDP) kernel networking
Need to know difference between some struct’s
Used for describing and pointing to actual packet data
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
10
Fundamental struct’s
The struct’s describing data-frame at different levels
sk_buff : Good old SKB, allocated from SLAB/kmem_cache (4 cachelines)
xdp_buff : Used by BPF XDP-prog, allocated on call stack
xdp_frame: xdp_buff info state compressed, used by XDP-redirect
No allocation, placed in top of data-frame (currently 32 bytes)
HW specific “descriptor” with info and pointer to (DMA) data buffer
contains HW-offloads (see later) that driver transfers to SKB
Exotic details
skb_shared_info : placed inside data-frame (at end), e.g. GRO multi-frame
xdp_rxq_info : Static per RX queue info
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
11
Evolving XDP: Future ideas
Warning: Next slides about crazy future ideas
This stuff might never get implemented!
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
12
Move SKB allocations out of NIC drivers
Goal: Simplify driver, via creating SKB inside network-core code
Happens today via xdp_frame in both veth and cpumap
(Slight hickup: Max frame size unknown, thus lie about skb->truesize)
Issue: SKB’s created this way are lacking HW-offloads like:
HW checksum info (for skb->ip_summed + skb->csum)
HW RX hash (skb_set_hash(hash, type))
(these are almost always needed… tempted to extend xdp_frame)
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
13
Other HW-offloads
Other existing offloads, used by SKBs, but not always enabled
VLAN (__vlan_hwaccel_put_tag())
RX timestamp
HW skb_hwtstamps() (stored in skb_shared_info)
Earlier XDP software timestamp (for skb->tstamp)
RX mark (skb->mark supported by mlx5)
Other potential offloads, which hardware can do (but not used by SKB):
Unique u64 flow identifier key (mlx5 HW)
Higher-level protocol header offsets
RSS-hash can deduce e.g. IPv4/TCP (as frag not marked as TCP)
But NIC HW have full parse info avail
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
14
Blocked by missing HW-offloads
SKB alloc outside NIC driver, blocked by missing HW-offloads.
The GOAL is to come-up with a Generic Offload Abstraction Layer…
Generic and dynamic way to transfer HW-offload info
Only enable info when needed
Both made available for SKB creation and XDP programs
The big questions are:
Where to store this information?
How to make it dynamic?
What else are we missing?
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
15
Storing generic offload-info
Where to store generic offload-info?
To avoid allocation use packet/frame data area
(1) Extend xdp_frame: imply top of frame head-room
(2) Use XDP meta-data area: located in-front of payload start
(3) Use tail-room (frame-end): Already used for skb_shared_info GRO
No choice done yet…
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
16
Dynamic generic offload-info
Next challenge: How to make this dynamic?
Each driver have own format for HW descriptor
Hopefully BTF can help here?
Drivers could export BTF description of offload-info area
BPF prog wanting to use area, must have matching BTF
But how can kernel-code use BTF desc and transfer to SKB fields?
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
17
Dependency: Handling multi-frame packets
SKB alloc outside NIC driver, ALSO need XDP multi-frame handling
Multi-frame packets have several use-cases
Jumbo-frames
TSO (TCP Segmentation Offload)
Header split, (L4) headers in first segment, (L7) payload in next
XDP need answer/solution for multi-frame packets
To fully move SKB alloc+setup out of NIC drivers
(SKB use skb_shared_info area to store info on multi-frames)
Design idea/proposal in XDP-project: xdp-multi-buffer01-design.org
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
18
Fun with xdp_frame before SKB alloc
After SKB alloc gets moved out of drivers
What can we now create of crazy stuff?!?
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
19
General idea for xdp_frame handling
Idea: Use xdp_frame for some fast-paths
E.g. forwarding could be accelerated (non localhost deliver)
Fall-back: Create SKB for slow(er) path
Lots of work: adjust functions to work without SKBs
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
20
New (L2) layer with xdp_frame?
Could update netstack (L2) RX-handler to handle xdp_frame packets?
Bridging
Macvlan, ipvlan, macvtap
Bond + Team
OpenVSwitch (OVS)
Likely: Need new L2 RX-handler layer (?)
To support kernels evolutionary development model
(cannot update every user at once, plus out-of-tree users)
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
21
Transport layer XDP
XDP operate at L2 (Eth) or L3 (IP)
Tom Herbert (coined XDP) proposed = L4 (TCP/UDP)
To gain performance it need to operate on xdp_frame’s
For many fast-path TCP/UDP use-cases, SKB is pure overhead
Much simpler xdp_frame will be sufficient
Let special cases fall-through, alloc+init full SKB
Transport-layer XDP
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
22
More practical
People complain XDP and eBPF is hard to use!?
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
23
XDP-tutorial
Ready to use: XDP Hands-On Tutorial
Basically a full build and testlab environment
Simply git clone and run make:
Testlab works on your (Linux) laptop
via creating veth device and network namespace
https://github.com/xdp-project/xdp-tutorial
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
24
The missing transmit side
XDP is currently only an RX-hook
We want to change that! - but it’s (also) a big task
Tell people to use TC-BPF egress hook, we can do better…
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
25
The missing XDP transmit hook
A real XDP TX hook is needed, for several reasons
Creates symmetry (RX and TX hooks)
XDP-redirect need push-back/flow-control mechanism
Too easily overflow (HW) TX-queues (as qdisc-layer bypassed)
Be careful: don’t re-implement full qdisc layer
Should also run after normal qdisc layer TX-queues
Reason: Like BQL, can choose when qdisc is activated
Allows to implement BQL (Byte-Queue-Limit) as eBPF
Driver TX-q based on xdp_frame, allow SKB to be released earlier
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
26
End: Summary
Kernel now have eBPF programmable network fast-path
that can now compete with kernel-bypass speeds
Not finished: Still lots of development work ahead
Need to cooperate more with kernel netstack
Create BPF-helpers to access kernel tables
How far can we take this: SKBs outside drivers? realistic goal?
XDP-project coordination:
https://github.com/xdp-project/xdp-project
XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org
27

More Related Content

What's hot

BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLab
Taeung Song
 
nftables - the evolution of Linux Firewall
nftables - the evolution of Linux Firewallnftables - the evolution of Linux Firewall
nftables - the evolution of Linux Firewall
Marian Marinov
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
PLUMgrid
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
Denys Haryachyy
 
VLANs in the Linux Kernel
VLANs in the Linux KernelVLANs in the Linux Kernel
VLANs in the Linux Kernel
Kernel TLV
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
ScyllaDB
 
eBPF/XDP
eBPF/XDP eBPF/XDP
eBPF/XDP
Netronome
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
Thomas Graf
 
Cilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDPCilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDP
Thomas Graf
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDP
Daniel T. Lee
 
DPDK In Depth
DPDK In DepthDPDK In Depth
DPDK In Depth
Kernel TLV
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
ScyllaDB
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
Divye Kapoor
 
Tips on High Performance Server Programming
Tips on High Performance Server ProgrammingTips on High Performance Server Programming
Tips on High Performance Server Programming
Joshua Zhu
 
Open vSwitch 패킷 처리 구조
Open vSwitch 패킷 처리 구조Open vSwitch 패킷 처리 구조
Open vSwitch 패킷 처리 구조
Seung-Hoon Baek
 
XDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @Cloudflare
C4Media
 
DPDK KNI interface
DPDK KNI interfaceDPDK KNI interface
DPDK KNI interface
Denys Haryachyy
 
DoS and DDoS mitigations with eBPF, XDP and DPDK
DoS and DDoS mitigations with eBPF, XDP and DPDKDoS and DDoS mitigations with eBPF, XDP and DPDK
DoS and DDoS mitigations with eBPF, XDP and DPDK
Marian Marinov
 
eBPF Basics
eBPF BasicseBPF Basics
eBPF Basics
Michael Kehoe
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
Kernel TLV
 

What's hot (20)

BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLab
 
nftables - the evolution of Linux Firewall
nftables - the evolution of Linux Firewallnftables - the evolution of Linux Firewall
nftables - the evolution of Linux Firewall
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
VLANs in the Linux Kernel
VLANs in the Linux KernelVLANs in the Linux Kernel
VLANs in the Linux Kernel
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
 
eBPF/XDP
eBPF/XDP eBPF/XDP
eBPF/XDP
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 
Cilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDPCilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDP
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDP
 
DPDK In Depth
DPDK In DepthDPDK In Depth
DPDK In Depth
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
Tips on High Performance Server Programming
Tips on High Performance Server ProgrammingTips on High Performance Server Programming
Tips on High Performance Server Programming
 
Open vSwitch 패킷 처리 구조
Open vSwitch 패킷 처리 구조Open vSwitch 패킷 처리 구조
Open vSwitch 패킷 처리 구조
 
XDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @Cloudflare
 
DPDK KNI interface
DPDK KNI interfaceDPDK KNI interface
DPDK KNI interface
 
DoS and DDoS mitigations with eBPF, XDP and DPDK
DoS and DDoS mitigations with eBPF, XDP and DPDKDoS and DDoS mitigations with eBPF, XDP and DPDK
DoS and DDoS mitigations with eBPF, XDP and DPDK
 
eBPF Basics
eBPF BasicseBPF Basics
eBPF Basics
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
 

Similar to Kernel Recipes 2019 - XDP closer integration with network stack

Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
Anne Nicolas
 
Improving Apache Spark by Taking Advantage of Disaggregated Architecture
 Improving Apache Spark by Taking Advantage of Disaggregated Architecture Improving Apache Spark by Taking Advantage of Disaggregated Architecture
Improving Apache Spark by Taking Advantage of Disaggregated Architecture
Databricks
 
Accelerating apache spark with rdma
Accelerating apache spark with rdmaAccelerating apache spark with rdma
Accelerating apache spark with rdma
inside-BigData.com
 
Spark Summit EU 2015: Lessons from 300+ production users
Spark Summit EU 2015: Lessons from 300+ production usersSpark Summit EU 2015: Lessons from 300+ production users
Spark Summit EU 2015: Lessons from 300+ production users
Databricks
 
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
Philippe Fierens
 
Apache Hadoop 3.0 Community Update
Apache Hadoop 3.0 Community UpdateApache Hadoop 3.0 Community Update
Apache Hadoop 3.0 Community Update
DataWorks Summit
 
Spark Study Notes
Spark Study NotesSpark Study Notes
Spark Study Notes
Richard Kuo
 
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
 
Hadoop 3.0 - Revolution or evolution?
Hadoop 3.0 - Revolution or evolution?Hadoop 3.0 - Revolution or evolution?
Hadoop 3.0 - Revolution or evolution?
Uwe Printz
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
Kernel TLV
 
RAPIDS: GPU-Accelerated ETL and Feature Engineering
RAPIDS: GPU-Accelerated ETL and Feature EngineeringRAPIDS: GPU-Accelerated ETL and Feature Engineering
RAPIDS: GPU-Accelerated ETL and Feature Engineering
Keith Kraus
 
Hug syncsort etl hadoop big data
Hug syncsort etl hadoop big dataHug syncsort etl hadoop big data
Hug syncsort etl hadoop big data
Stéphane Heckel
 
Design installation-commissioning-red raider-cluster-ttu
Design installation-commissioning-red raider-cluster-ttuDesign installation-commissioning-red raider-cluster-ttu
Design installation-commissioning-red raider-cluster-ttu
Alan Sill
 
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
 
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmarkThe Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
Lenovo Data Center
 
optimizing_ceph_flash
optimizing_ceph_flashoptimizing_ceph_flash
optimizing_ceph_flash
Vijayendra Shamanna
 
Fast Data Analytics with Spark and Python
Fast Data Analytics with Spark and PythonFast Data Analytics with Spark and Python
Fast Data Analytics with Spark and Python
Benjamin Bengfort
 
Apache spark sneha challa- google pittsburgh-aug 25th
Apache spark  sneha challa- google pittsburgh-aug 25thApache spark  sneha challa- google pittsburgh-aug 25th
Apache spark sneha challa- google pittsburgh-aug 25th
Sneha Challa
 
Ceph Day Melbourne - Walk Through a Software Defined Everything PoC
Ceph Day Melbourne - Walk Through a Software Defined Everything PoCCeph Day Melbourne - Walk Through a Software Defined Everything PoC
Ceph Day Melbourne - Walk Through a Software Defined Everything PoC
Ceph Community
 
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
Databricks
 

Similar to Kernel Recipes 2019 - XDP closer integration with network stack (20)

Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
Kernel Recipes 2018 - XDP: a new fast and programmable network layer - Jesper...
 
Improving Apache Spark by Taking Advantage of Disaggregated Architecture
 Improving Apache Spark by Taking Advantage of Disaggregated Architecture Improving Apache Spark by Taking Advantage of Disaggregated Architecture
Improving Apache Spark by Taking Advantage of Disaggregated Architecture
 
Accelerating apache spark with rdma
Accelerating apache spark with rdmaAccelerating apache spark with rdma
Accelerating apache spark with rdma
 
Spark Summit EU 2015: Lessons from 300+ production users
Spark Summit EU 2015: Lessons from 300+ production usersSpark Summit EU 2015: Lessons from 300+ production users
Spark Summit EU 2015: Lessons from 300+ production users
 
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
What we unlearned_and_learned_by_moving_from_m9000_to_ssc_ukoug2014
 
Apache Hadoop 3.0 Community Update
Apache Hadoop 3.0 Community UpdateApache Hadoop 3.0 Community Update
Apache Hadoop 3.0 Community Update
 
Spark Study Notes
Spark Study NotesSpark Study Notes
Spark Study Notes
 
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...
 
Hadoop 3.0 - Revolution or evolution?
Hadoop 3.0 - Revolution or evolution?Hadoop 3.0 - Revolution or evolution?
Hadoop 3.0 - Revolution or evolution?
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
 
RAPIDS: GPU-Accelerated ETL and Feature Engineering
RAPIDS: GPU-Accelerated ETL and Feature EngineeringRAPIDS: GPU-Accelerated ETL and Feature Engineering
RAPIDS: GPU-Accelerated ETL and Feature Engineering
 
Hug syncsort etl hadoop big data
Hug syncsort etl hadoop big dataHug syncsort etl hadoop big data
Hug syncsort etl hadoop big data
 
Design installation-commissioning-red raider-cluster-ttu
Design installation-commissioning-red raider-cluster-ttuDesign installation-commissioning-red raider-cluster-ttu
Design installation-commissioning-red raider-cluster-ttu
 
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...
 
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmarkThe Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
The Apache Spark config behind the indsutry's first 100TB Spark SQL benchmark
 
optimizing_ceph_flash
optimizing_ceph_flashoptimizing_ceph_flash
optimizing_ceph_flash
 
Fast Data Analytics with Spark and Python
Fast Data Analytics with Spark and PythonFast Data Analytics with Spark and Python
Fast Data Analytics with Spark and Python
 
Apache spark sneha challa- google pittsburgh-aug 25th
Apache spark  sneha challa- google pittsburgh-aug 25thApache spark  sneha challa- google pittsburgh-aug 25th
Apache spark sneha challa- google pittsburgh-aug 25th
 
Ceph Day Melbourne - Walk Through a Software Defined Everything PoC
Ceph Day Melbourne - Walk Through a Software Defined Everything PoCCeph Day Melbourne - Walk Through a Software Defined Everything PoC
Ceph Day Melbourne - Walk Through a Software Defined Everything PoC
 
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
Running Apache Spark on a High-Performance Cluster Using RDMA and NVMe Flash ...
 

More from Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
Anne Nicolas
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Anne Nicolas
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Anne Nicolas
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
Anne Nicolas
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Anne Nicolas
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Anne Nicolas
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Anne Nicolas
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Anne Nicolas
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Anne Nicolas
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
Anne Nicolas
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Anne Nicolas
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Anne Nicolas
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
Anne Nicolas
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
Anne Nicolas
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Anne Nicolas
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Anne Nicolas
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
Anne Nicolas
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Anne Nicolas
 

More from Anne Nicolas (20)

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
 

Recently uploaded

socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Undress Baby
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 

Recently uploaded (20)

socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 

Kernel Recipes 2019 - XDP closer integration with network stack

  • 1. Jesper Dangaard Brouer Kernel Developer Red Hat Kernel Recipes Conf Paris, Sep 2019 XDP closer integration with network stack XDP closer integration with network stack 1
  • 2. Overview: What will you learn? Audience at Kernel Recipes: Other kernel developers But for different kernel sub-systems Learn about: kernel network data structures Hopefully you already heard about XDP (eXpress Data Path) ? ? ? I’ll explain why network sub-system created this… Future crazy ideas to extend XDP (hopefully) in a way that cooperate more with kernel netstack Give you an easy way to try out XDP and BPF on your laptop XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 2
  • 3. Why was XDP needed? This was about the kernel networking stack staying relevant For emerging use-cases and areas Linux networking stack assumes layer L4-L7 delivery Obviously slow when compared to L2-L3 kernel-bypass solutions XDP operate at layers L2-L3 Shows same performance as these L2-L3 kernel-bypass solutions The networking OSI layer model: L2=Ethernet L3=IPv4/IPv6 L4=TCP/UDP L7=Applications XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 3
  • 4. What is XDP? What kind of monster did we create with XDP?!? XDP (eXpress Data Path) is a Linux in-kernel fast-path New programmable layer in-front of traditional network stack Read, modify, drop, redirect or pass For L2-L3 use-cases: seeing x10 performance improvements! Can accelerate in-kernel L2-L3 use-cases (e.g. forwarding) What is AF_XDP? (the Address Family XDP socket) Hybrid kernel-bypass facility Delivers raw L2 frames into userspace (in SPSC queue) XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 4
  • 5. AF_XDP: Used for kernel-bypass?!? Did you really say, this can be used for bypassing the Linux kernel netstack ? Sure, build in freedom for kernel-bypass via AF_XDP DPDK already have a Poll-Mode driver for AF_XDP Why is this better, than other (bypass) solutions? Flexible sharing of NIC resources, NIC still avail to netstack XDP/eBPF prog filters packets using XDP_REDIRECT into AF_XDP socket Move selective frames out of kernel, no need to reinject Leverages existing kernel infrastructure, eco-system and market position XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 5
  • 6. How can XDP be (ab)used? Used or abused? Freedom re-implement everything (when bypassing the kernel) Or freedom to shoot yourself in the foot? XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 6
  • 7. Simple view on how XDP gains speed XDP speed gains comes from Avoiding memory allocations no SKB allocations and no-init (memset zero 4 cache-lines) Bulk processing of frames Very early access to frame (in driver code after DMA sync) Ability to skip (large parts) of kernel code XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 7
  • 8. Skipping code: Efficient optimization Skipping code: Imply skipping features provided by network stack Gave users freedom to e.g. skip netfilter or route-lookup But users have to re-implement features they actually needed Sometimes cumbersome via BPF-maps Avoid re-implement features: Evolve XDP via BPF-helpers XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 8
  • 9. Evolving XDP via BPF-helpers We should encourage adding helpers instead of duplicating data in BPF maps Think of XDP as a software offload layer for the kernel netstack Simply setup and use the Linux netstack, but accelerate parts of it with XDP IP routing good example: Access routing table from XDP via BPF helpers (v4.18) Let Linux handle routing (daemons) and neighbour/ARP lookups Talk at LPC-2018 (David Ahern): Obvious next target: Bridge lookup helper Like IP routing: transparent XDP acceleration of bridge forwarding Fallback for ARP lookups, flooding etc. Huge potential performance boost for Linux bridge use cases! Leveraging Kernel Tables with XDP XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 9
  • 10. Understand networking packet data structures To understand next slides and (XDP) kernel networking Need to know difference between some struct’s Used for describing and pointing to actual packet data XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 10
  • 11. Fundamental struct’s The struct’s describing data-frame at different levels sk_buff : Good old SKB, allocated from SLAB/kmem_cache (4 cachelines) xdp_buff : Used by BPF XDP-prog, allocated on call stack xdp_frame: xdp_buff info state compressed, used by XDP-redirect No allocation, placed in top of data-frame (currently 32 bytes) HW specific “descriptor” with info and pointer to (DMA) data buffer contains HW-offloads (see later) that driver transfers to SKB Exotic details skb_shared_info : placed inside data-frame (at end), e.g. GRO multi-frame xdp_rxq_info : Static per RX queue info XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 11
  • 12. Evolving XDP: Future ideas Warning: Next slides about crazy future ideas This stuff might never get implemented! XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 12
  • 13. Move SKB allocations out of NIC drivers Goal: Simplify driver, via creating SKB inside network-core code Happens today via xdp_frame in both veth and cpumap (Slight hickup: Max frame size unknown, thus lie about skb->truesize) Issue: SKB’s created this way are lacking HW-offloads like: HW checksum info (for skb->ip_summed + skb->csum) HW RX hash (skb_set_hash(hash, type)) (these are almost always needed… tempted to extend xdp_frame) XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 13
  • 14. Other HW-offloads Other existing offloads, used by SKBs, but not always enabled VLAN (__vlan_hwaccel_put_tag()) RX timestamp HW skb_hwtstamps() (stored in skb_shared_info) Earlier XDP software timestamp (for skb->tstamp) RX mark (skb->mark supported by mlx5) Other potential offloads, which hardware can do (but not used by SKB): Unique u64 flow identifier key (mlx5 HW) Higher-level protocol header offsets RSS-hash can deduce e.g. IPv4/TCP (as frag not marked as TCP) But NIC HW have full parse info avail XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 14
  • 15. Blocked by missing HW-offloads SKB alloc outside NIC driver, blocked by missing HW-offloads. The GOAL is to come-up with a Generic Offload Abstraction Layer… Generic and dynamic way to transfer HW-offload info Only enable info when needed Both made available for SKB creation and XDP programs The big questions are: Where to store this information? How to make it dynamic? What else are we missing? XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 15
  • 16. Storing generic offload-info Where to store generic offload-info? To avoid allocation use packet/frame data area (1) Extend xdp_frame: imply top of frame head-room (2) Use XDP meta-data area: located in-front of payload start (3) Use tail-room (frame-end): Already used for skb_shared_info GRO No choice done yet… XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 16
  • 17. Dynamic generic offload-info Next challenge: How to make this dynamic? Each driver have own format for HW descriptor Hopefully BTF can help here? Drivers could export BTF description of offload-info area BPF prog wanting to use area, must have matching BTF But how can kernel-code use BTF desc and transfer to SKB fields? XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 17
  • 18. Dependency: Handling multi-frame packets SKB alloc outside NIC driver, ALSO need XDP multi-frame handling Multi-frame packets have several use-cases Jumbo-frames TSO (TCP Segmentation Offload) Header split, (L4) headers in first segment, (L7) payload in next XDP need answer/solution for multi-frame packets To fully move SKB alloc+setup out of NIC drivers (SKB use skb_shared_info area to store info on multi-frames) Design idea/proposal in XDP-project: xdp-multi-buffer01-design.org XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 18
  • 19. Fun with xdp_frame before SKB alloc After SKB alloc gets moved out of drivers What can we now create of crazy stuff?!? XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 19
  • 20. General idea for xdp_frame handling Idea: Use xdp_frame for some fast-paths E.g. forwarding could be accelerated (non localhost deliver) Fall-back: Create SKB for slow(er) path Lots of work: adjust functions to work without SKBs XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 20
  • 21. New (L2) layer with xdp_frame? Could update netstack (L2) RX-handler to handle xdp_frame packets? Bridging Macvlan, ipvlan, macvtap Bond + Team OpenVSwitch (OVS) Likely: Need new L2 RX-handler layer (?) To support kernels evolutionary development model (cannot update every user at once, plus out-of-tree users) XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 21
  • 22. Transport layer XDP XDP operate at L2 (Eth) or L3 (IP) Tom Herbert (coined XDP) proposed = L4 (TCP/UDP) To gain performance it need to operate on xdp_frame’s For many fast-path TCP/UDP use-cases, SKB is pure overhead Much simpler xdp_frame will be sufficient Let special cases fall-through, alloc+init full SKB Transport-layer XDP XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 22
  • 23. More practical People complain XDP and eBPF is hard to use!? XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 23
  • 24. XDP-tutorial Ready to use: XDP Hands-On Tutorial Basically a full build and testlab environment Simply git clone and run make: Testlab works on your (Linux) laptop via creating veth device and network namespace https://github.com/xdp-project/xdp-tutorial XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 24
  • 25. The missing transmit side XDP is currently only an RX-hook We want to change that! - but it’s (also) a big task Tell people to use TC-BPF egress hook, we can do better… XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 25
  • 26. The missing XDP transmit hook A real XDP TX hook is needed, for several reasons Creates symmetry (RX and TX hooks) XDP-redirect need push-back/flow-control mechanism Too easily overflow (HW) TX-queues (as qdisc-layer bypassed) Be careful: don’t re-implement full qdisc layer Should also run after normal qdisc layer TX-queues Reason: Like BQL, can choose when qdisc is activated Allows to implement BQL (Byte-Queue-Limit) as eBPF Driver TX-q based on xdp_frame, allow SKB to be released earlier XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 26
  • 27. End: Summary Kernel now have eBPF programmable network fast-path that can now compete with kernel-bypass speeds Not finished: Still lots of development work ahead Need to cooperate more with kernel netstack Create BPF-helpers to access kernel tables How far can we take this: SKBs outside drivers? realistic goal? XDP-project coordination: https://github.com/xdp-project/xdp-project XDP closer integration with network stack - Jesper Dangaard Brouer < >hawk@kernel.org 27