• 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上运行。此外,无需承担在内

  • 相关阅读:
    解决国产机SVN连接失败的问题
    leetcode 135.分发糖果 贪心法求解 (c++版本)
    【EI会议征稿】第三届能源动力与控制工程国际学术会议(EPECE 2024)
    卷积神经网络 图像处理,图像识别卷积神经网络
    Cisco ASA应用——NAT的类型
    reuseaddr和reuseport
    cloud探索 - aws中国
    【Redis】list常用命令&内部编码&使用场景
    leetcode:714. 买卖股票的最佳时机含手续费
    Pytorch实现的LSTM、RNN模型结构
  • 原文地址:https://blog.csdn.net/huangyabin001/article/details/130895302