ArthurChiao's Blog

Recent Posts

  • 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...

  • 2021-06-01

    源码解析:K8s 创建 pod 时,背后发生了什么(五)(2021)

    本文基于 2019 年的一篇文章What happens when … Kubernetes edition!梳理了 k8s 创建 pod(及其 deployment/replicaset)的整个过程,整理了每个重要步骤的代码调用栈,以在实现层面加深对整个过程的理解。原文参考的 k8S 代码已经较老(v1.8/v1.14 以及当时的 master),且部分代码链接已失效;本文代码基于 v1.21。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...

  • 2021-06-01

    源码解析:K8s 创建 pod 时,背后发生了什么(四)(2021)

    本文基于 2019 年的一篇文章What happens when … Kubernetes edition!梳理了 k8s 创建 pod(及其 deployment/replicaset)的整个过程,整理了每个重要步骤的代码调用栈,以在实现层面加深对整个过程的理解。原文参考的 k8S 代码已经较老(v1.8/v1.14 以及当时的 master),且部分代码链接已失效;本文代码基于 v1.21。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...

  • 2021-06-01

    源码解析:K8s 创建 pod 时,背后发生了什么(三)(2021)

    本文基于 2019 年的一篇文章What happens when … Kubernetes edition!梳理了 k8s 创建 pod(及其 deployment/replicaset)的整个过程,整理了每个重要步骤的代码调用栈,以在实现层面加深对整个过程的理解。原文参考的 k8S 代码已经较老(v1.8/v1.14 以及当时的 master),且部分代码链接已失效;本文代码基于 v1.21。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...

  • 2021-06-01

    源码解析:K8s 创建 pod 时,背后发生了什么(二)(2021)

    本文基于 2019 年的一篇文章What happens when … Kubernetes edition!梳理了 k8s 创建 pod(及其 deployment/replicaset)的整个过程,整理了每个重要步骤的代码调用栈,以在实现层面加深对整个过程的理解。原文参考的 k8S 代码已经较老(v1.8/v1.14 以及当时的 master),且部分代码链接已失效;本文代码基于 v1.21。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...

  • 2021-06-01

    源码解析:K8s 创建 pod 时,背后发生了什么(一)(2021)

    本文基于 2019 年的一篇文章What happens when … Kubernetes edition!梳理了 k8s 创建 pod(及其 deployment/replicaset)的整个过程,整理了每个重要步骤的代码调用栈,以在实现层面加深对整个过程的理解。原文参考的 k8S 代码已经较老(v1.8/v1.14 以及当时的 master),且部分代码链接已失效;本文代码基于 v1.21。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...

  • 2021-05-07

    [译] BPF 对象(BPF objects)的生命周期(Facebook,2018)

    译者序本文翻译自 2018 年 Facebook 的一篇博客:Lifetime of BPF objects,作者 Alexei Starovoitov。译文附录了一些内核(4.19)代码片段,方便在实现层面理解文中提到的一些东西。由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。以下是译文。 译者序 1 文件描述符(FD)和引用计数(refcnt) 1.1 创建 BPF map 过程 1.2 加载 BPF 程序(和它使用的 BPF map)过程 1.3 Attach ...

  • 2021-04-28

    Customize TCP initial RTO (retransmission timeout) with BPF

    TL; DROn initiating a new TCP connection (connect()),the initial retransmission timeout (RTO) has been set as aharcoded value of 1 second in Linux kernel (not configurable).Since 4.13, a BPF hook has been added to the connect operation, which providesa chance to dyna...