Recent Posts
-
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...
-
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。由于内容已经不与原文一一对应(有增加和删减),因此标题未加 “[译]” 等字样。感谢原作者(们)的精彩文章。篇幅太长,分成了几部分: ...