0%

本文档描述了Cilium的架构。它通过记录BPF数据路径(datapath)的钩子来实现Cilium数据路径,那么Cilium数据路径是如何与容器编排层继承,以及如何在各层(如BPF数据路径和Cilium代理)之间更新对象的?

数据路径

Linux内核在网络栈中支持一个BPF钩子集,使用这些勾子可以允许BPF程序(即使用回调函数运行)。Cilium数据路径使用这些钩子加载BPF程序,当一起使用时,这些程序会创建更高级别的网络结构。

阅读全文 »

关于 BPF CO-RE 的目标,引用文中的一段总结就是:

  • 作为一种简单的方式,帮助 BPF 开发者解决简单的移植性问题(例如读取结构体的字段),并且
  • 作为一种不是最优,但可用的方式,帮助 BPF 开发者 解决复杂的移植性问题(例如不兼容的数据结构改动、复杂的用户空间控制条件等)。
  • 使开发者能遵循”一次编译、到处运行“(Compile Once – Run Everywhere)范式。
阅读全文 »

Ginkgo /ˈɡɪŋkoʊ / 是Go语言的一个行为驱动开发(BDD, Behavior-Driven Development)风格的测试框架,通常和库Gomega一起使用。Ginkgo在一系列的“Specs”中描述期望的程序行为。Ginkgo 集成了Go语言的测试机制,你可以通过 go test 来运行Ginkgo测试套件。本文所有的代码可以在我的 Github 中找到。

阅读全文 »

pwru 是 cilium 推出的基于 eBPF 开发的网络数据包排查工具,它提供了更细粒度的网络数据包排查方案。本文将介绍 pwru 的使用方法和经典场景,并介绍其实现原理。

阅读全文 »

随着分布式系统和云计算的普及,网络越来越成为计算的瓶颈,为了提升在网络性能,各种方案被提出来,包括 DPDK、RDMA、SmartNIC 等方案,随着 eBPF 的逐渐成熟,它也越来越多的被应用到改善网络性能,从而在云计算环境带来更大的收益。在各种网络方案中,Ciilum 是一个基于 eBPF 的性能优异的方案,覆盖了分布式系统的绝大多数场景。本文将介绍 Ciilum 通信的整个链路,如果你还不了解 eBPF,你可以先看看我的 这篇博客

阅读全文 »

eBPF 是一个通用目的 RISC 指令集,其最初的设计目标是:用 C 语言的一个子集编写程序,然后用一个编译器后端(例如 LLVM)将其编译成 BPF 指令,稍后内核再通过一个位于内核中的(in-kernel)即时编译器(JIT Compiler)将 BPF 指令映射成处理器的原生指令(opcode ),以取得在内核中的最佳执行性能。本文将深入解析 eBPF 的指令集,展示 eBPF 从 C 语言代码到 eBPF 字节码,再经过 JIT 编译器的整个流程。在 这篇文章中 介绍了 cBPF 的原理与实现,本文主要介绍 eBPF 指令集。

阅读全文 »