ArthurChiao's Blog

Recent Posts

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

  • 2021-03-12

    [译] BPF 可移植性和 CO-RE(一次编译,到处运行)(Facebook,2020)

    译者序本文翻译自 2020 年 Facebook 的一篇博客:BPF Portability and CO-RE,作者 Andrii Nakryiko。关于 BPF CO-RE 的目标,引用文中的一段总结就是: 作为一种简单的方式,帮助 BPF 开发者解决简单的移植性问题(例如读取结构体的字段),并且 作为一种不是最优,但可用的方式,帮助 BPF 开发者解决复杂的移植性问题(例如不兼容的数据结构改动、复杂的用户空间控制条件等)。 使开发者能遵循”一次编译、到处运行“(Compile Once – Run E...

  • 2021-03-05

    [译] 迈向完全可编程 tc 分类器(cls_bpf)(NetdevConf,2016)

    译者序本文翻译自 2016 年 Daniel Borkman 在 NetdevConf 大会上的一篇文章:On getting tc classifier fully programmable with cls_bpf。Daniel 是 eBPF 的核心开发之一,文章从技术层面介绍了 eBPF 的发展历史、核心设计,以及更重要的 —— 在 eBPF 基础之上,cls_bpf 如何使 tc 分类器变得完全可编程。由于 eBPF 发展很快,文中有些描述今天已经过时(例如单个 eBPF 程序允许的最大指令数量),因此翻译时以译注的形式...