# Episode 9: XDP and load balancing with Daniel Borkmann [YouTube](https://youtu.be/OIyPm6K4ooY) 11 June 2021 with [Daniel Borkmann](https://github.com/borkmann), hosted by [Liz Rice](https://twitter.com/lizrice) ## Headlines - eBPF Summit 2021 on August 18-19: [pre-register now!](https://ebpf.io/summit-2021) - Quentin Monnet's summary of [Implementing eBPF on Windows](https://lwn.net/SubscriberLink/857215/1df543fa904b3f17/) - Don't miss [next week's eCHO with Dave Thaler](https://youtu.be/LrrV-eo6fug)! - [How Netflix uses eBPF flow logs at scale for network insight](https://netflixtechblog.com/how-netflix-uses-ebpf-flow-logs-at-scale-for-network-insight-e3ea997dca96) - [hBPF - eBPF on Hardware](https://github.com/rprinz08/hBPF) ## XDP and load balancing with Daniel Borkmann ### XDP layer / general - Background & history: [Daniel's KubeCon EU 2020 talk](https://static.sched.com/hosted_files/kccnceu20/8f/Aug19_eBPF_and_Kubernetes_Little_Helper_Minions_for_Scaling_Microservices_Daniel_Borkmann.pdf) - [XDP intro in reference guide](https://docs.cilium.io/en/stable/bpf/#xdp) - [ACM paper on XDP](https://dl.acm.org/doi/10.1145/3281411.3281443) ([slides](https://blog.tohojo.dk/slides/conext18-xdp.pdf)) - XDP as stack hardening use case - Slide 16-32 in [Daniel's presentation on BPF as a Fundamentally Better Dataplane](https://ebpf.io/summit-2020-slides/eBPF_Summit_2020-Keynote-Daniel_Borkmann-BPF_as_a_fundamentally_better_dataplane.pdf) ([video](https://www.youtube.com/watch?v=Qhm1Zn_BNi4)) - Discussions around hardening from Google developers: - [More on network stack resilience](http://vger.kernel.org/netconf2019_files/netconf%202019%20-%20willem%20de%20bruijn%20-%20resilient%20rx%20+%20scaling%20udp.pdf) - [TCP SYN cookies from XDP](https://netdevconf.info/0x14/session.html?talk-issuing-SYN-cookies-in-XDP) - Random Bits of History: - 2016: [XDP first merged into upstream kernel](https://lore.kernel.org/lkml/20160727.010753.2221383279830501569.davem@davemloft.net/) - 2017: [XDP MythBusters, netdevconf 2.1 keynote](https://netdevconf.info/2.1/slides/apr7/miller-XDP-MythBusters.pdf) ([video](https://www.youtube.com/watch?v=8Cxg7mpVIWw)) - 2018: - [1.5 years of XDP in production at Facebook](http://vger.kernel.org/lpc-networking2018.html#session-10) ([video](https://www.youtube.com/watch?v=E1QKn_AjuJk)) - [AF_XDP, "the path to DPDK speeds"](http://vger.kernel.org/lpc-networking2018.html#session-11) ([video](https://www.youtube.com/watch?v=JmGfJok32Kw)) - [bpfilter (aka iptables) at XDP](https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables) - Latter seeing interest in 2021 [again](https://lore.kernel.org/bpf/20210603101425.560384-1-me@ubique.spb.ru/) - Ongoing XDP developments: - [XDP bonding support](https://lore.kernel.org/bpf/20210609135537.1460244-1-joamaki@gmail.com/) - [XDP jumbo frame support](https://lore.kernel.org/bpf/cover.1617885385.git.lorenzo@kernel.org/) ### Cilium related - XDP in releases: - 1.8: [kube-proxy at XDP layer](https://cilium.io/blog/2020/06/22/cilium-18#kube-proxy-replacement-at-the-xdp-layer) - 1.9: [Maglev consistent hashing for XDP (& tc)](https://cilium.io/blog/2020/11/10/cilium-19#maglev) - 1.10: [Standalone L4LB at XDP layer](https://cilium.io/blog/2021/05/20/cilium-110#xdp-based-standalone-load-balancer) - Cilium XDP-related documentation: - [Getting Started Guide for kube-proxy replacement & XDP](https://docs.cilium.io/en/v1.10/gettingstarted/kubeproxy-free/#loadbalancer-nodeport-xdp-acceleration), including list of supported drivers - Talk on Cilium's load balancing & introduction to K8s service handling: - [Linux Plumbers, 2020](https://linuxplumbersconf.org/event/7/contributions/674/attachments/568/1002/plumbers_2020_cilium_load_balancer.pdf) ([video](https://www.youtube.com/watch?v=UkvxPyIJAko&t=21s)) - [KubeCon US, 2019](https://docs.google.com/presentation/d/1cZJ-pcwB9WG88wzhDm2jxQY4Sh8adYg0-N3qWQ8593I/edit#slide=id.g7055f48ba8_0_0) ([video](https://www.youtube.com/watch?v=bIRwSIwNHC0) - Talk on Cilium and Maglev consistent hashing: - [FOSDEM, 2021](https://fosdem.org/2021/schedule/event/containers_ebpf_kernel/attachments/slides/4358/export/events/attachments/containers_ebpf_kernel/slides/4358/Advanced_BPF_Kernel_Features_for_the_Container_Age_FOSDEM.pdf) ([video](https://www.youtube.com/watch?v=PJY-rN1EsVw)) ### XDP performance related - [Facebook's migration in 2017 from IPVS to XDP, performance graph in slide 4](https://netdevconf.info/2.1/slides/apr6/zhou-netdev-xdp-2017.pdf) ([video](https://www.youtube.com/watch?v=YEU2ClcGqts)) - [ACM paper on XDP with performance comparison to DPDK](https://dl.acm.org/doi/10.1145/3281411.3281443) - [Cilium release blog with kube-proxy performance comparison](https://cilium.io/blog/2020/06/22/cilium-18#kube-proxy-replacement-at-the-xdp-layer) - [Verizon on performance analysis of XDP programs](https://www.usenix.org/system/files/lisa21_slides_jones.pdf) ([video](https://www.youtube.com/watch?v=TjAbnY5G4io)) ### Other XDP projects outside of Cilium - Platforms and runtimes related outside of Linux kernel: - [DPDK AF_XDP driver](https://doc.dpdk.org/guides/nics/af_xdp.html) - [XDP also on Windows](https://cloudblogs.microsoft.com/opensource/2021/05/10/making-ebpf-work-on-windows/) - Other XDP L4LBs aside from Cilium used in production: - Facebook's [Katran project](https://github.com/facebookincubator/katran) - [Blog post](https://engineering.fb.com/2018/05/22/open-source/open-sourcing-katran-a-scalable-network-load-balancer/) - Also used by [Dropbox](https://dropbox.tech/infrastructure/boosting-dropbox-upload-speed) in production - Cloudflare's Unimog project - [Blog post](https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/) - [Cloudflare architecture and how BPF eats the world](https://blog.cloudflare.com/cloudflare-architecture-and-how-bpf-eats-the-world/) - Github Load Balancer (GLB) - [Blog post](https://github.blog/2018-08-08-glb-director-open-source-load-balancer/) - [GLB also supporting XDP](https://github.com/github/glb-director) ### XDP in academia - There are 85 citations on our ACM paper on XDP by now. More recent work that is XDP/BPF related: - Accelerating Memcached in XDP - [Paper](https://www.usenix.org/system/files/nsdi21-ghigoff.pdf) - [Blog post](https://pchaigno.github.io/ebpf/2021/04/12/bmc-accelerating-memcached-using-bpf-and-xdp.html) - hXDP - XDP BPF programs in FPGA-powered NICs - [Paper](https://arxiv.org/pdf/2010.14145.pdf) - [Blog post](https://pchaigno.github.io/ebpf/2020/11/04/hxdp-efficient-software-packet-processing-on-fpga-nics.html) - hBPF - eBPF CPU in hardware - [hBPF project](https://github.com/rprinz08/hBPF) - [Blog post](https://www.min.at/prinz/?x=entry:entry210403-164137) ### XDP tutorials/guides for writing own programs - [XDP Tutorial](https://github.com/xdp-project/xdp-tutorial/)