BPF程序可以使用尾部调用来调用其他BPF程序。这是一个强大的功能,它允许通过组合较小的BPF功能来实现更复杂的程序。内核版本5.2之前对BPF程序生成的机器指令数有严格限制。该限制设置为4096,以确保程序可以在合理的时间内终止。但是,随着BPF程序越来越复杂,需要一种方式扩展内核强加的指令限制,这里,可以使用尾部调用。从内核版本5.2开始,指令限制增加到100万条指令,尾部调用嵌套也受到限制,最多只能进行32次调用,这意味着你可以在调用链上创建多达32次的程序调用,从而生成更复杂的解决方案。
当从另一个BPF程序调用BPF程序时,内核会完全重置程序上下文。这一点很重要,因为你可能需要在程序之间共享信息。每个BPF程序收到的上下文对象不会帮助我们解决数据共享的问题。在第3章中,我们将讨论BPF映射,BPF映射用于BPF程序之间共享信息。同时,我们将给出一个示例,演示如何使用尾部调用从一个BPF程序转到另一个BPF程序。