BPF及其衍生產物初見

2022-07-11 23:51:14 字數 1204 閱讀 9434

bpf 的全稱是 berkeley packet filter,又稱 classical bpf(cbpf);顧名思義,這是乙個用於過濾(filter)網路報文(packet)的架構,為 tcpdump 抑或 wireshark 乃至網路監控(network monitoring)領域的基石。

bpf 設計者們額外在 tcpdump 中設計了我們今天常見的過濾表示式,很大程度上推動了 bpf 的發展,此後數年,bpf 逐漸稱為大眾所認同,包括 linux 在內的眾多作業系統都開始將 bpf 引入了核心;packet filter 的功能得到了充分肯定。但同時,另一方面 bpf 用於定義 filter 的偽**為了執行要專門實現乙個虛擬機器,這也在一定程度上提高了開發和維護的門檻;因此它獲得了進化————extended bpf。

ebpf 已經為核心追蹤(kernel tracing)、應用效能調優/監控、流控(traffic control)等領域帶來了激動人心的變革,在介面的設計以及易用性上,ebpf 也有了較大的改進。

位於使用者空間中的應用在核心中闢出一塊空間建立起乙個資料庫用以和 ebpf 程式互動(bpf_create_map());資料庫本身以 key-value 的形式進行組織,無論是從使用者空間還是核心空間都可以對其進行訪問,使其在效率方面獲得了無可比擬的優勢————可以在執行時修改可程式設計的核心操作而無需重新編譯,且複製位元組極少。

cbpf 時代就開始加入了**檢查機制以防止不規範的注入**;到了 ebpf 時代則在引導程式(bpf_load_program())時加入了更複雜的verifier 機制,在執行注入程式之前,先進行一系列的安全檢查,可以保證絕對安全的獲取核心執行資訊,是核心除錯和開發者的不二選擇。

利用高階語言 c 書寫 bpf 邏輯並經由編譯器生成出偽**自然是便利了許多,但它時至今日仍使用數量有限的 c 語言庫,並且不支援使用外部庫進行操作;同時以今日的眼光來看待,其**在衍生應用中明顯存在冗餘。

在fpga加速器上ebpf的許多指令存在冗餘,以ebpf為基礎,針對fpga加速器將其精簡設計得到了hxdp

評估hxdp時用了約15%的fpga資源,在執行動態載入的程式時達到了高階cpu的資料吞吐量,並將資料報**延遲降低了10倍

參考文件:

linux核心工程導論——網路:filter(lsf、bpf、ebpf)

ebpf 簡史

hxdp: efficient software packet processing on fpga nics

Ubuntu 及其衍生版系統啟動順序

etc profile 此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。並從 etc profile.d目錄的配置檔案中蒐集shell的設定。etc bashrc 為每乙個執行bash shell的使用者執行此檔案,當bash shell被開啟時,該檔案被讀取。bash p...

Redhat及其衍生版安裝oracle11g教程

hmxgg 126.comqq 383024278 我會盡可能地解決問題和更新此文件下系統是否安裝過這些包,如果沒在對應的系統光碟查詢對應的 rpm包並安裝。檢查工作 依次執行 rpm qa grep下面軟體包 binutils 2.17.50.0.6 compat libstdc 33 3.2.3...

演化演算法及其衍生演算法的主要思想

lib libcaffe.so.1.0.0 undefined reference toleveldb db open leveldb options const std string const leveldb db lib libcaffe.so.1.0.0 undefined referenc...