作者|凌敏
eBPF毫⽆疑惑是当下最⽕的技术之⼀。2014年,eBPF首次出现在Linux内核中。经过社区不断迭代,目前,eBPF在技术上已然成熟,并在故障确诊、⽹络优化、安全控制、性能监控等领域获得⼤量应⽤,项⽬数目呈爆燃式增⻓。在此前的访谈中,有不少受访专家对InfoQ表示,eBPF的发展前景宽广,属于eBPF的时代早已将至。
这么,eBPF技术究竟为Linux带来了什么改变?为何近几年忽然爆火?国外外发展和落地情况怎样?怎么防治和处理eBPF带来的安全问题?近日,InfoQ专访了⻄安邮电⼤学院士、⻰蜥社区eBPF技术探求SIGOwner陈莉君院士,以期进一步了解eBPF技术特点以及应⽤实践。
从BPF到eBPF
InfoQ:eBPF是从BPF技术扩充⽽来的,您能简略介绍下它的发展历程吗?
陈莉君院士:最早可以溯源到1992年。在1992年USENIX大会上,论文“TheBSDPacketFilter:ANewArchitectureforUser-levelPacketCapture”提出了革命性的包过滤机制BSDPacketFilter(简称为BPF),这比当时最先进的数据包过滤技术还快20倍。这主要得益于BPF的两大设计:第一,内核态引入一个新的虚拟机,所有指令都在内核虚拟机中运行;第二,用户态使用BPF字节码来定义过滤表达式,然后传递给内核,由内核虚拟机解释执行。
在Linux2.1.75中,首次引入了BPF技术。在Linux3.0中,降低了BPF即时编译器,它替换掉了先前性能更差的类库,进一步优化了BPF指令运行的效率。
2014年,AlexeiStarovoitov将BPF扩充为一个通用的虚拟机,也就是eBPF。eBPF除了扩充了寄存器的数目,引入了全新的BPF映射储存,还在4.x内核上将原先单一的数据包过滤风波逐渐扩充到了内核态函数、用户态函数、跟踪点、性能风波(perf_events)以及安全控制等。
eBPF的诞生是BPF技术的一个转折点,致使BPF不再仅限于网路栈,而是成为内核的一个顶尖子系统。
具体来看,eBPF有以下几个重要特点:
InfoQ:为何eBPF在近⼏年忽然⽕了上去?背后有什么诱因推动?
陈莉君院士:eBPF近几年爆火的背后,有以下几个诱因推进:
eBPF怎样改变Linux?
InfoQ:作为⼀项⾰命性的技术,eBPF为Linux带来了什么改变?它是怎样⼯作的?
陈莉君院士:eBPF在Linux中有多项改变,如提升内核灵活性,可以在不须要重新编译内核的情况下实现系统功能的快速更改和扩充;改善安全性,eBPF应用可以进行精确的安全检测,因而提供更好的内核安全性,以及检查和避免内核功击;改善性能,eBPF容许开发者建立内核性能数据采集程序,因而使内核性能数据采集显得愈发简单,可用于测量内核性能问题,如异常、调试、性能剖析等。
eBPF是Linux内核中软件实现的虚拟机,其工作原理是:用户把eBPF程序编译为eBPF指令,之后通过bpf()系统调用将eBPF指令加载到内核的特定挂载点,由特定的风波来触发eBPF指令的执行。在挂载eBPF指令时内核会进行充分验证,防止eBPF代码影响内核的安全和稳定性。另外内核也会进行JIT编译,把eBPF指令翻译为本地指令,降低性能花销。
内核在网路处理路径上中预置了好多eBPF的挂载点国产linux基础应用,比如xdp、qdisc、tcp-bpf、socket等。eBPF程序可以加载到这种挂载点,并调用内核提供的特定helper函数来更改和控制网路报文。eBPF程序可以通过map数据结构来保存和交换数据。
InfoQ:⽬前eBPF主要有什么成熟的应⽤场景?
陈莉君院士:eBPF的性能和稳定性使它成为一种十分强悍的内核性能调优工具,它的主要应用场景有:
InfoQ:国外外eBPF技术发展和落地情况怎样?有什么值得关注的开源项⽬?
陈莉君院士:在国外外,eBPF得到了快速发展,尤其是在网路领域,它早已被广泛应用于各类网路设备、操作系统、容器平台、SDN以及NFV等领域。
eBPF的开源项目,最典型的就是iovisor带来的BCC、bpftrace等工具linux重启命令,成为eBPF在跟踪和确诊领域的最佳实践。Cilium、Katran、Falco等一系列基于eBPF优化网路和安全的开源项目也逐渐诞生。最流行的网路解决方案之一Calico,就在近来的版本中引入了eBPF数据面网路,大大提高了网路的性能。
开发者可以重点关注以下开源项目:
InfoQ:由您领衔成⽴了业界⾸个校企eBPF技术探求SIG,这个SIG组成⽴的本意是哪些?⽬前取得了什么研究进展?
陈莉君院士:eBPF技术探求SIG旨在于深入研究剖析BPF前沿技术和校企界发展,提高Networking、Tracing、Observability、Security四个经度技术深度和落地疗效wps for linux,构建国外最有影响力的BPF项目和社区。SIG创立的本意是促使eBPF技术在国外的应用和发展,做国外领先者社区,国际上协同和对标eBPF著名社区。通过技术创新和技术合作,增加eBPF的学习和使用门槛,为院校师生、eBPF技术爱好者、Linux从业者提供工具和平台,构建创新的eBPF技术落地到Linux内核社区。
eBPF技术探求SIG在以下几方面取得了不错的进展:
InfoQ:下⼀步,⻰蜥社区eBPF技术探求SIG有什么探求和发展规划?
陈莉君院士:龙蜥社区eBPF技术探求SIG将进一步旨在于eBPF前沿技术的研究,以及把eBPF这项技术更多的应用于院校师生、eBPF技术爱好者,减少学习和入门难度,以及布署的简易化。
SIG将通过双周会的方式,定期和你们汇报eBPF领域和Linux内核领域当前国外外的研究热点和技术新闻;通过线上线下分享的方式,保持技术领先性和持续关注度;通过线下Meetup或则论坛的方式,拉进SIG成员的距离,产生良好的共同阐述技术的气氛。
怎么防治和处理eBPF带来的安全问题?
InfoQ:eBPF是万能的吗?它存在什么限制?是否也会给开发者带来⼀些相应的挑战?
陈莉君院士:eBPF其实强悍,但不是万能的,同开发普通的应用程序相比,它存在着好多的限制,常常会给开发者带来一定的不便。例如,eBPF指令集有限,这意味着它没有办法去完成个别复杂的任务,如复杂的字符串处理、循环等;eBPF栈空间大小有限,但是只有512字节,带来了开发上的不便;eBPF才能调用的函数比较有限,只能调用内核提供的helper函数,难以像开发其它应用程序一样任意地调用三方库;eBPF程序调试功能较弱,致使未能快速定位编撰程序时出现的bug。
InfoQ:eBPF带来的安全问题同样值得关注,⽐如会有恶意程序利⽤eBPF进⾏伪装,对于这些可能会发⽣安全风波,我们应该怎样防治和解决呢?
陈莉君院士:eBPF作为内核技术,具有很高的权限和扩充性,因而也须要相应的安全举措。一些常见的安全恐吓包括:恶意代码执行,通过构造恶意的eBPF程序,可以在内核环境中执行任意代码,这是一个严重的安全问题;数据泄漏,不当的eBPF程序可能会泄漏系统敏感信息,这包括显存中的数据和网路流量;显存受损:eBPF程序可以直接访问显存,假如程序不正确,可能造成显存受损,造成系统崩溃。
为了防治和处理这种恐吓,应当采取以下举措:
开发者怎样更好地学习eBPF技术?
InfoQ:对于开发者来说,怎么能够更好地学习eBPF?
陈莉君院士:首先要把握Linux系统操作系统知识,再了解eBPF的大约原理,它是一种Linux内核可扩充性技术,它容许用户探求系统行为,便于在内核中运行自己的程序。据悉,还要了解eBPF的关键概念,包括BPF程序、套接字程序、文件和目录程序、日志程序、安全程序、跟踪程序、XDP程序,等等。
熟悉eBPF的编程语言,eBPF程序使用C来编撰(用户空间程序可以采用Go、Rust等语言)国产linux基础应用,而且可以通过用户空间库调用它们的特定功能。可以使用LLVM、clang、gcc等编译器来编译eBPF程序。目前,龙蜥社区推出的Coolbpf项目,可以简化这部份的开发工作。
了解eBPF调试工具,比如BCC/bpftrace,Kprobes、bpftool等,这种工具可以帮助开发者在使用eBPF时开发和调试程序。
依据开发者自身的情况,选择合适的eBPF程序,之后开始学习并编撰自己的eBPF程序。据悉,还可以查看其他开发者的代码,便于获得更多的灵感。
InfoQ:Linux得以成功的关键是哪些?去年有什么值得关注的Linux及eBPF动态?
陈莉君院士:Linux得以成功,主要得益于其开源自由、社区参与贡献、技术性能与安全性能兼具的特性。据悉,Linux发展在中国也吸引了诸多行业领域的参与,产生了一个良好的生态环境,这也是其成功的重要诱因。
值得关注的一些Linux及eBPF动态: