ArthurChiao's Blog

Recent Posts

  • 2021-09-01

    [译] Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测(2020)

    译者序本文组合翻译了以下两篇文章的干货部分,作为 io_uring 相关的入门参考: How io_uring and eBPF Will Revolutionize Programming in Linux, ScyllaDB, 2020 An Introduction to the io_uring Asynchronous I/O Framework, Oracle, 2020io_uring 是 2019 年 Linux 5.1 内核首次引入的高性能异步 I/O 框架,能显著加速 I/O 密集型应用的性能。但如果你的...

  • 2021-08-27

    [译] Linux Socket Filtering (LSF, aka BPF)(KernelDoc,2021)

    译者序本文翻译自 2021 年 Linux 5.10 内核文档:Linux Socket Filtering aka Berkeley Packet Filter (BPF),文档源码见 Documentation/networking/filter.rst。Linux Socket Filtering (LSF) 是最初将 BSD 系统上的数据包过滤技术BPF(伯克利包过滤器)移植到 Linux 系统时使用的名称,但后来大家还是更多称呼其为BPF(aka:as known as)。本文介绍了 Linux BPF 的一些底层设计...

  • 2021-08-15

    [译] LLVM eBPF 汇编编程(2020)

    译者序本文翻译自 2020 年 Quentin Monnet 的一篇英文博客:eBPF assembly with LLVM。Quentin Monnet 是 Cilium 开发者之一,此前也在从事网络、eBPF 相关的开发。翻译已获得 Quentin Monnet 授权。文章介绍了如何直接基于 LLVM eBPF 汇编开发 BPF 程序,虽然给出的两个例子极其简单,但其流程对于开发更大的程序也是适用的。为什么不用 C,而用汇编这么不友好的编程方式呢?至少有两个特殊场景: 测试特定的 eBPF 指令流 对程序的某个特定部分进...

  • 2021-08-01

    [译] [论文] XDP (eXpress Data Path):在操作系统内核中实现快速、可编程包处理(ACM,2018)

    译者序本文翻译自 2018 年 ACM CoNEXT 大会上的一篇文章:The eXpress Data Path: Fast Programmable Packet Processing in the Operating System Kernel作者阵容豪华,包括来自 Cilium 的 Daniel Borkmann、John Fastabend 等。论文引用信息: Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, JohnFastabend,...

  • 2021-07-18

    [译] Cilium:BPF 和 XDP 参考指南(2021)

    译者序本文翻译自 Cilium 1.10 的官方文档:BPF and XDP Reference Guide。 几年前翻译过一版:Cilium:BPF 和 XDP 参考指南(2019),对应 Cilium v1.6。本文对排版做了一些调整,以更适合网页阅读。由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。以下是译文。 本文的目标读者是 “希望在技术层面对 BPF 和 XDP 有更深入理解的开发者和用户”。虽然阅读本文有助于拓宽读者对 Cilium 的认识,但这并不是使用 Cilium 的前提条件。BPF ...

  • 2021-07-13

    BPF 进阶笔记(三):BPF Map 内核实现

    内核目前支持 30 来种BPF map 类型。本文整理一些与这些 map 相关的内核实现。关于 “BPF 进阶笔记” 系列平时学习和使用 BPF 时所整理。由于是笔记而非教程,因此内容不会追求连贯,有基础的同学可作查漏补缺之用。文中涉及的代码,如无特殊说明,均基于内核 5.8/5.10。 BPF 进阶笔记(一):BPF 程序(BPF Prog)类型详解:使用场景、函数签名、执行位置及程序示例 BPF 进阶笔记(二):BPF Map 类型详解:使用场景、程序示例 BPF 进阶笔记(三):BPF Map 内核实现 BPF 进...

  • 2021-07-13

    BPF 进阶笔记(二):BPF Map 类型详解:使用场景、程序示例

    内核目前支持 30 来种BPF map 类型。对于主要的类型,本文将介绍其: 使用场景:适合用来做什么? 程序示例:一些实际例子。本文参考: notes-on-bpf-3,内容较老,基于内核 4.14 BPF Features by Linux Kernel Version,bcc 文档,v0.20.0关于 “BPF 进阶笔记” 系列平时学习和使用 BPF 时所整理。由于是笔记而非教程,因此内容不会追求连贯,有基础的同学可作查漏补缺之用。文中涉及的代码,如无特殊说明,均基于内核 5.8/5.10。 BPF 进阶笔记(一...

  • 2021-07-04

    BPF 进阶笔记(一):BPF 程序(BPF Prog)类型详解:使用场景、函数签名、执行位置及程序示例

    内核目前支持 30 来种BPF 程序类型。对于主要的程序类型,本文将介绍其: 使用场景:适合用来做什么? Hook 位置:在何处(where)、何时(when)会触发执行?例如在内核协议栈的哪个位置,或是什么事件触发执行。 程序签名(程序 入口函数 签名) 传入参数:调用到 BPF 程序时,传给它的上下文(context,也就是函数参数)是什么? 返回值:返回值类型、含义、合法列表等。 加载方式:如何将程序附着(attach)到执行点? 程序示例:一些实际例子。 延伸阅读:其他...

  • 2021-06-27

    Firewalling with BPF/XDP: Examples and Deep Dive

    TL; DR Some beginner-level BPF programs A containerized playground to exercise step by step tc/kernel code analysis to explain how things work in the underlying TL; DR 1 Introduction 1.1 BPF/XDP in a nutshell 1.2 Environment info 1.3 Playgroun...

  • 2021-06-06

    Cilium: Handle Conntrack (CT) related BPF Maps on Agent Restart

    This post digs into the handling of CT (conntrack) related BPFmaps during agent restart. Code based on Cilium 1.9.5.If you’re not familiar with CT, refer toConnection Tracking (conntrack): Design and Implementation Inside Linux Kernel[5] for some basic concepts.This...