为什么选择eBPF
2022-12-6 08:5:54 Author: 奶牛安全(查看原文) 阅读量:13 收藏


可编程的威力

20年前,网页几乎都是用静态标记语言(HTML)编写的。网页基本上是一个具有能够显示它的应用程序(浏览器)的文档。纵观今天的网页,网页已经成为成熟的应用程序,基于web的技术已经取代了绝大多数用需要编译的语言编写的应用程序。是什么促成了这一演变?

答案是Javascript带来的可编程性。它开启了一场巨大的革命,导致浏览器演变为几乎独立的操作系统。

为什么会发生这样的进化?程序员不再局限于运行特定浏览器版本的用户。不是让标准机构相信需要一个新的HTML标签,而是提供必要的构建块,使底层浏览器的创新速度与运行在浏览器上面的应用程序脱钩。

当然,这有点过于简化了,因为HTML确实随着时间的推移而演变,并为其成功做出了贡献,但仅靠HTML本身的演变是不够的。

在类比eBPF之前,让我们先来看看在引入JavaScript时至关重要的几个关键方面:

  • 安全性:不可信的代码在用户浏览器上运行,这个问题通过让Javascript在沙盒环境运行解决。
  • 持续交付:程序逻辑的演化不需要持续发布新的浏览器版本。Javascript通过提供底层构建块来建造任意逻辑来解决这问题。
  • 性能:必须以最小的开销提供可编程性。通过JIT编译器的引入来解决。

上面这些,在eBPF都可以看到相应的影子。

eBPFLinux内核的冲击

Linux内核架构的顶层理解和内核如何与应用程序及硬件打交道,有助于理解eBPF可编程对Linux内核的冲击。

Linux内核主要目的是对硬件或虚拟硬件进行抽象化,并提供一个一致的API(系统调用),允许应用程序可以运行和使用资源。为了达到这个目的,需要维持一系列子系统和层级来分担这些职责。每个子系统提供一定层次的配置来满足用户不同的需要。如果一个所需的行为无法满足,一个内核功能更改就出现了,通过两种方式进行:

  • 内置支持
    1. 改变内核代码,并让Linux内核社区同意这个改动
    2. 等上几年,等于新的内核版本加入这功能
  • 内核模块
    1. 写内核模块
    2. 经常修改它来适配不断出现的新内核版本
    3. 由于缺乏安全边界,经常处于内核崩溃的风险

eBPF,意味着一种新的选择,它可以提供新的内核功能,却不需要修改内核代码或加载内核模块。在很多情况下,它就和Javascript或其它脚本语言一样,可以让那些变更困难或变更成本高的系统迭代新的功能。

暗号:062a8


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247487151&idx=1&sn=4ba6c0fd18bcb252257c6430c6a82812&chksm=fdf965baca8eecac9dade6a64a7ed9a89e1f0419842f73f1e51f785150b129fd4ba94aba20b0#rd
如有侵权请联系:admin#unsafe.sh