ArthurChiao's Blog

Recent Posts

  • 2022-07-25

    Differentiate three types of eBPF redirects (2022)

    TL; DRThere are three types of eBPF redirection fashions in Linux kernel that mayconfuse developers often: bpf_redirect_peer() bpf_redirect_neighbor() bpf_redirect()This post helps to clarify them by digging into the code in history order,and also discusses usages...

  • 2022-07-18

    Linux tracing/profiling 基础:符号表、调用栈、perf/bpftrace 示例等(2022)

    整理一些 tracing/profiling 笔记,目前大部分内容都来自Practical Linux tracing系列文章。 1 引言 1.1 热点与调用栈分析(perf record/report/script) 1.2 符号(symbols) 1.3 小结 2 极简程序 hello-world:探究符号 2.1 C 源码 2.2 编译成目标文件(不带 -g) 2.3 查看目标文件(objdump/readelf) 2.4...

  • 2022-07-14

    Cracking Kubernetes Authentication (AuthN) Model (2022)

    Part of this post’s contents first appeared in User and workload identities in Kubernetes,which was kindly edited, re-illustrated and exemplified by learnk8s.io, andvery friendly to beginners.The version posted here in contrast has a biased focus on the design andimp...

  • 2022-07-02

    Linux 网络栈原理、监控与调优:前言(2022)

    本文尝试从技术研发与工程实践(而非纯理论学习)角度,在原理与实现、监控告警、配置调优三方面介绍内核5.10 网络栈。由于内容非常多,因此分为了几篇系列文章。原理与实现 Linux 网络栈原理、监控与调优:前言 Linux 中断(IRQ/softirq)基础:原理及内核实现 Linux 网络栈接收数据(RX):原理及内核实现 Linux 网络栈发送数据(TX):原理及内核实现(TBD)监控 Monitoring Linux Network Stack调优 Linux 网络栈接收数据(RX):配置调优 Linux 网络...

  • 2022-07-02

    Linux 网络栈接收数据(RX):配置调优(2022)

    本文尝试从技术研发与工程实践(而非纯理论学习)角度,在原理与实现、监控告警、配置调优三方面介绍内核5.10 网络栈。由于内容非常多,因此分为了几篇系列文章。原理与实现 Linux 网络栈原理、监控与调优:前言 Linux 中断(IRQ/softirq)基础:原理及内核实现 Linux 网络栈接收数据(RX):原理及内核实现监控 Monitoring Linux Network Stack调优 Linux 网络栈接收数据(RX):配置调优 1 网络设备驱动初始化 1.1 调整 RX 队列数量(etht...

  • 2022-07-02

    Linux 网络栈接收数据(RX):原理及内核实现(2022)

    Fig. Steps of Linux kernel receiving data process and the corresponding chapters in this post本文尝试从技术研发与工程实践(而非纯理论学习)角度,在原理与实现、监控告警、配置调优三方面介绍内核5.10 网络栈。由于内容非常多,因此分为了几篇系列文章。原理与实现 Linux 网络栈原理、监控与调优:前言 Linux 中断(IRQ/softirq)基础:原理及内核实现 Linux 网络栈接收数据(RX):原理及内核实现 Linux 网...

  • 2022-07-02

    Linux 中断(IRQ/softirq)基础:原理及内核实现(2022)

    1 什么是中断? 2 硬中断 2.1 中断处理流程 2.2 中断类型 系统支持的最大硬中断数量 MSI(Message Signaled Interrupts)/ MSI-X 2.3 Maskable and non-maskable 2.4 问题:执行足够快 vs 逻辑比较复杂 2.5 解决方式:延后中断处理(deferred interrupt handling) 3 ...

  • 2022-06-04

    K8s 的核心是 API 而非容器:从理论到 CRD 实践(2022)

    本文串联了以下几篇文章的核心部分, Kubernetes isn’t about containers,2021 Kubernetes is a Database, 2019 CRD is just a table in Kubernetes, 2020论述了 K8s 的核心价值是其通用、跨厂商和平台、可灵活扩展的声明式 API 框架,而不是容器(虽然容器是它成功的基础);然后手动创建一个 API extension(CRD),通过测试和类比来对这一论述有一个更直观的理解。例子及测试基于 K8s v1.21.0,感谢原作者...

  • 2022-05-19

    K8s 集群稳定性:LIST 请求源码分析、性能评估与大规模基础服务部署调优

    对于非结构化的数据存储系统来说,LIST 操作通常都是非常重量级的,不仅占用大量的磁盘 IO、网络带宽和 CPU,而且会影响同时间段的其他请求(尤其是响应延迟要求极高的选主请求),是集群稳定性的一大杀手。例如,对于 Ceph 对象存储来说,每个 LIST bucket 请求都需要去多个磁盘中捞出这个bucket 的全部数据;不仅自身很慢,还影响了同一时间段内的其他普通读写请求,因为 IO是共享的,导致响应延迟上升乃至超时。如果 bucket 内的对象非常多(例如用作harbor/docker-registry 的存储后端),LI...

  • 2022-05-02

    BPF 进阶笔记(四):调试 BPF 程序

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