6.走向未来
未来BPF将如何发展呢?它已经具备图灵机的雏形,拥有巨大的计算能力潜能。它目前的计算能力仍然受到约束,但是已经足够改变现有应用开发的基础,必将引发应用的蓬勃发展,会衍生出开发工具、测试方法等等的发展,使业务逻辑的开发与BPF的开发统一在一个开发模型当中,甚至引发新的开发语言出现。当在应用领域中生根后,就会继续发芽壮大,需要吸收计算能力作为养料才能抽枝散叶。BPF应用与BPF技术内涵的发展就像两面相对的镜子,相互映照,形成斑斓的德罗斯特效应图景。
随着近几年云计算、人工智能、智能设备的蓬勃发展,信息系统基础设施结构、设备类型、业务复杂度都迎来再一次的变革。
Linux系统作为现今最为广泛使用的操作系统,其自身也在发展变化。初期,沿着原有的技术路线,通过量的积累,足以应对时代的演进,这一点从代码增长就可以看出来,其背后是Linux支持的设备、驱动、特性、机制也来越多。产品构型也越来也复杂,Web服务器、并行计算、异构计算、桌面、智能终端、嵌入式系统。Linux的技术设施,需要面对不同的应用场景和问题。量的积累,可以解决一段时间的问题。但是,当这种变化积累到一定程度时,需要新的手段,才能支持上层结构的灵活度。
需要指出的是,现有的文档中,大多将BPF定位为网络和安全工具的利器。但是BPF作为一种通用的动态逻辑机制,绝不仅仅可以应用这两个地方。
6.1.通用性
BPF已经从最初网络报文分析技术,扩展到了很多应用领域,以后必然成为一种通用的内核开发技术,在定制化和功能扩展两方面推动内核发展。
目前BPF的核心组建基本轮廓已经确定,由运行上下文、帮助函数、Map、指令集、Verifier、JIT、系统调用等关键模块构成BPF的核心运行机制。
运行上下文是BPF程序运行的语境,目前除了网络语境发展比较快速之外,其他程序类型的运行上下文发展相对落后,文件系统目前甚至还没有。
对于运行上下文应该设计成什么样子,达到什么要求,有怎样的约束,还没有统一的范式,主要由各程序类型根据实际应用需要进行定义。彼此间缺乏共通性,发展比较随意,还处于比较原始的阶段。
帮助函数还不完备,各个程序类型存在差异。程序类型的定义,缺乏逻辑基础,其设计元语还需澄清。语境相关部分和通用部分划分不清楚,影响到安全机制也无法针对性设计,安全性无法验证。
Map担负的角色过于宽泛,既是通讯机制,也是存储机制,既是Local的也是Global的。是对BPF核心机制补全的过渡手段。随着,远程调用、间接调用、跳转表、全局变量等的实现,Map的作用和使用方式也将改变。
6.2.表达能力
内核已经在扩展性方面在不断改进,但是这些始终还是不能根本解决问题,引入更多编译器技术特别是动态编译技术、可信编译技术才是解决问题的根本。
目前BPF的程序的表达能力相当于弱化的C语言,这显然是不够的。实现一种和传统应用开发相同的开发体验,让程序员专注于理解业务逻辑,自由地表达,需要编译器填补通用语言与BPF自身限制之间的沟壑,需要语言层面的扩展,也需要运行时和工具链的支持。
6.3.开发工具
目前还没有在前端支持BPF的开发工具,只是实现了后端的支持,这显然还远远不够。这种情况,正说明了BPF的发展急需编译器的支持,在前端支持BPF,通过语言特性的扩展和新的开发支持库,实现BPF与通用编程语言的融合,将大大缩减包含BPF特性的应用程序的开发、测试和维护难度。对于BPF作为一项应用开发技术大力推广至关重要。
6.4.开发流程
目前,在设计阶段,需要将BPF的逻辑部分和一般编程逻辑部分分离出来,这增加了设计的开销,同时对于设计人员的要求加大。原本的应用设计人员,只了解业务逻辑,这显然不够,还需要了解内核的基本原理,才能够做好逻辑划分工作。既了解内核又懂应用开发和业务逻辑的人员,是交叉性人才,这样的人员往往少且难以培养。如果让原本的应用开发人员,学习掌握内核相关的知识,以便可以满足BPF应用开发的需要,显然费时费力不说,费效比更是难以达到商业决策的最低门槛。
而在开发阶段,BPF和应用需要分开编码,这无疑增加了联调联试的开销。特别是,出现问题的时候需要频繁的跨组跨部门沟通,效率实在太低。如果能把BPF的开发完全应用化,让一个程序员承担所有工作,成本、效率都可以得到优化。
在测试阶段,还缺少专用的高效率的工具。
因此,以开发工具的进步为基础,目前采用的开发流程也一定会同步地被改进。可以预想,未来的开发流程一定是融合和简化的。
7.结束语
Linux内核的发展,将技术发展与创新演绎得淋漓尽致。
源自于用户和开发者的需求,始终是推动技术不断进步的根本动力。在需求的推动下,Linux内核始终在快速的发展,保持着强劲的动力。
同时,热爱与坚持,还有最重要的开发原则的坚守,是Linux能够将源源不断的需求转化为创新动力的基础,而不至于被爆炸的需求摧毁。基本原则体系的维护,使Linux内核始终保持如一的设计框架。
在Linux的发展过程中,一些很小的需求,最终也可以发展成为复杂的架构。坚持与打破壁垒,是创新的范式。
在不断寻求问题的最终答案的过程中,有很多优秀的思想启发我们的认知,但限于技术发展阶段、条件是否成熟,这些优秀的思想有的潜入水底,有的浮现水面独领一段风骚。历史会有所偏好,作出它的选择,但不可否认的是这些优秀的思想,都一直在发挥着它们的作用。当历史的拐点到来的时候,它们又会重新融合,以一种全新的方式继续推动技术的进步。
BPF是内核交互问题不断挖掘、迭代后的最新答案。内核的交互问题,本质上是内核结构问题。BPF的强大计算能力,将推动更好地实现内核与用户态的动态交互,使内核能够更加灵活满足各种应用场景的需要,使整个系统的性能不因为这种能力而遭受损失。保持软件良好分层的基础上,减小分层对信息交互、资源共享的阻碍。而围绕BPF的基础设施的发展,也必定会为内核结构带来巨大改变,将安全性、规范性更加深入地融入到内核的细微层次。
安全可靠是BPF持续发展的原则的,在BPF的功能性不断扩展、计算能力不断释放的过程中,安全检查、可信编译的加持是可持续性的基础。
而作为一种全新的编程方式,BPF的开发和传统编程范式具有同样的地位和发展前景。从语言的支持到代码的生成乃至JIT的优化等等,是必不可少的一环。
BPF来源于Linux内核发展过程中,众多优秀的开发者在效率、能力方面的不断改进,以及对技术本源的孜孜以求。它是内核发展中,众多优秀思想的集大成者,但同时,它也仅仅是新时代的开始。新的方法、新的语言、新的架构都在不断出现,催生着巨大的变革,如汹涌的波涛。而BPF将成为乘波之舟,它存在很多可能性,相信以此为起点,开发者们将会谱写更华丽的篇章。这是包括作者在内的众多开发者,所期待的广阔未来。
标签:发展,BPF,石器时代,eBPF,---,开发,内核,应用,Linux From: https://blog.51cto.com/u_14142479/6233842