ArthurChiao's Blog

Recent Posts

  • 2021-12-05

    [译] Facebook 流量路由最佳实践:从公网入口到内网业务的全路径 XDP/BPF 基础设施(LPC, 2021)

    译者序本文翻译自 Facebook 在 LPC 2021 大会上的一篇分享:From XDP to Socket: Routing of packets beyond XDP with BPF。标题可直译为《从 XDP 到 Socket 的(全路径)流量路由:XDP 不够,BPF 来凑》,因为 XDP 运行在网卡上,而且在边界和流量入口,再往后的路径(尤其是到了内核协议栈)它就管不到了,所以引入了其他一些 BPF 技术来“接力”这个路由过程。另外,这里的“路由”并非狭义的路由器三层路由,而是泛指 L3-L7 流量转发。翻译时加了...

  • 2021-11-24

    [译] 为 K8s workload 引入的一些 BPF datapath 扩展(LPC, 2021)

    译者序本文翻译自 LPC 2021 的一篇分享:BPF datapath extensions for K8s workloads。作者 Daniel Borkmann 和 Martynas Pumputis 都是 Cilium 的核心开发。翻译时补充了一些背景知识、代码片段和链接,以方便理解。翻译已获得作者授权。由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。以下是译文。 译者序 0 引言 0.1 Cilium datapath 基础 0.2 Cilium datapath ...

  • 2021-11-19

    [译] [论文] 可虚拟化第三代(计算机)架构的规范化条件(ACM, 1974)

    译者序本文翻译自 1974 年关于可虚拟化计算机架构(即能支持 VM)的经典论文: Popek, Gerald J., and Robert P. Goldberg."Formal requirements for virtualizable third generation architectures."Communications of the ACM 17.7(1974): 412-421.虽然距今已半个世纪,但这篇文章的一些核心思想仍未过时。特别是,它在最朴素的层面介绍了虚拟机是如何工作的(就像 (译) RFC 118...

  • 2021-10-21

    [译] NAT 穿透是如何工作的:技术原理及企业级实践(Tailscale, 2020)

    译者序本文翻译自 2020 年的一篇英文博客:How NAT traversal works。设想这样一个问题:在北京和上海各有一台局域网的机器(例如一台是家里的台式机,一台是连接到星巴克 WiFi 的笔记本),二者都是私网 IP 地址,但可以访问公网,如何让这两台机器通信呢?既然二者都能访问公网,那最简单的方式当然是在公网上架设一个中继服务器:两台机器分别连接到中继服务,后者完成双向转发。这种方式显然有很大的性能开销,而且中继服务器很容易成为瓶颈。有没有办法不用中继,让两台机器直接通信呢?如果有一定的网络和协议基础,就会明白这...

  • 2021-10-07

    [译] 写给工程师:关于证书(certificate)和公钥基础设施(PKI)的一切(SmallStep, 2018)

    译者序本文翻译自 2018 年的一篇英文博客:Everything you should know about certificates and PKI but are too afraid to ask,作者 MIKE MALONE。这篇长文并不是枯燥、零碎地介绍 PKI、X.509、OID 等概念,而是从前因后果、历史沿革的角度把这些东西串联起来,逻辑非常清晰,让读者知其然,更知其所以然。证书和 PKI 的目标其实很简单:将名字关联到公钥(bind names to public keys)。加密方式的演进: MAC ...

  • 2021-09-14

    [译] 基于角色的访问控制(RBAC):演进历史、设计理念及简洁实现(Tailscale, 2021)

    译者序本文翻译自 2021 年的一篇英文博客:RBAC like it was meant to be。很多系统(例如 Kubernetes、AWS)都在使用某种形式的 RBAC 做权限/访问控制。本文基于 access control 的发展历史,从设计层面分析了DAC -> MAC -> RBAC -> ABAC的演进历程及各模型的优缺点、适用场景等,然后从实际需求出发,一步步地设计出一个实用、简洁、真正符合 RBAC 理念的访问控制系统。作为对比,如果想看看表达能力更强(但也更复杂)的 RBAC/ABAC...

  • 2021-09-10

    [译] Control Group v2(cgroupv2 权威指南)(KernelDoc, 2021)

    译者序本文翻译自 2021 年 Linux 5.10 内核文档:Control Group v2,它是描述 cgroupv2 用户空间侧的设计、接口和规范的权威文档。原文非常全面详细,本文只翻译了目前感兴趣的部分,其他部分保留原文。另外,由于技术规范的描述比较抽象,因此翻译时加了一些系统测试输出、内核代码片段和链接,便于更好理解。由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。以下是译文。 译者序 1 引言 1.1 术语 1.2 cgroup 是什么? ...

  • 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 指令流 对程序的某个特定部分进...