• 1.2 什么是eBPF?(下)


    四,eBPF的优势

    4.1 eBPF程序的动态加载

        eBPF程序可以动态地加载到内核中,或从内核中删除。这个要与内核模块的加载与卸载区分开来。这里顺便讨论下eBPF程序与内核模块的区别,如下:

    • 而Linux内核模块是面向内核API编程的,可以直接运行在内核当中。eBPF程序是面向BPF体系结构指令集编写的,它并不直接运行在Linux内核中,我们可以理解为它是运行在eBPF虚拟机,由eBPF虚拟机来执行eBPF字节码,就像java运行在jvm一样。
    • eBPF架构更强调安全性和稳定性,eBPF程序只能通过 BPF Helper 函数调用,不能直接调用内核函数。此外eBPF程序在通过加载器加载到内核时,必须通过验证器进行检查,这极大的保障六内核安全。而开发者编写的内核模块,在内核进行加载运行时可以直接调用内核函数,因为没有经过内核维护者的评审发布,风险很高,可能会引入安全漏洞或直接导致内核Panic。
    • eBPF可以通过map映射与用户空间的进程进行交互,而内核模块只能通过传统的打印日志或文件节点进行交流,灵活性差。
    • 让做过内核Porting的同学很头疼的就是内核模块的移植性差,这一点在eBPF上得到了极大地改善。

        加载到内核的eBPF程序一旦被附加到一个事件上,无论是什么导致了该事件的发生,它就会被该事件触发。例如如果你将一个eBPF程序附加到用于打开文件的系统调用上,则只要有其他任何进程试图打开这个文件,它就会被触发。eBPF被加载时,那个进程是否已经运行起来并不重要。

    4.2 eBPF程序的高性能

        eBPF程序被加载并进行JIT编译后,该程序将作为本机机器指令在CPU上运行。此外,无需承担在内

  • 相关阅读:
    洛谷P2370 yyy2015c01 的 U 盘
    MySQL导入导出、视图、索引、执行计划
    建模杂谈系列170 APIFunc继续实践-数据处理体系
    VR全景看房:超越传统的看房方式
    代码随想录训练营第33天|休息日 小结
    解决:Navicat导入sql脚本时报2006
    Mysql8.0安装教程
    【单调队列】
    在线客服系统源码 聊天记录实时保存 附带完整的搭建教程
    05-SA8155 QNX SPI 全双工通讯
  • 原文地址:https://blog.csdn.net/huangyabin001/article/details/130895302