BPF 對映¶
BPF “對映”為核心和使用者空間之間共享資料提供不同型別的通用儲存。 有幾種儲存型別可用,包括雜湊、陣列、布隆過濾器和基數樹。 存在幾種對映型別,以支援特定的 BPF 助手,這些助手根據對映內容執行操作。 這些對映透過 BPF 程式經由 BPF 助手訪問,這些助手記錄在man-pages 中的 bpf-helpers(7) 中。
BPF 對映透過 bpf 系統呼叫從使用者空間訪問,該系統呼叫提供建立對映、查詢元素、更新元素和刪除元素的命令。 有關 BPF 系統呼叫的更多詳細資訊,請參見 ebpf-syscall 以及 man-pages 中的 bpf(2)。
對映型別¶
- BPF_MAP_TYPE_ARRAY 和 BPF_MAP_TYPE_PERCPU_ARRAY
- BPF_MAP_TYPE_BLOOM_FILTER
- BPF_MAP_TYPE_CGROUP_STORAGE
- BPF_MAP_TYPE_CGRP_STORAGE
- BPF_MAP_TYPE_CPUMAP
- BPF_MAP_TYPE_DEVMAP 和 BPF_MAP_TYPE_DEVMAP_HASH
- BPF_MAP_TYPE_HASH,帶有 PERCPU 和 LRU 變體
- BPF_MAP_TYPE_LPM_TRIE
- BPF_MAP_TYPE_ARRAY_OF_MAPS 和 BPF_MAP_TYPE_HASH_OF_MAPS
- BPF_MAP_TYPE_QUEUE 和 BPF_MAP_TYPE_STACK
- BPF_MAP_TYPE_SK_STORAGE
- BPF_MAP_TYPE_SOCKMAP 和 BPF_MAP_TYPE_SOCKHASH
- BPF_MAP_TYPE_XSKMAP
使用說明¶
-
int bpf(int command, union bpf_attr *attr, u32 size)¶
使用 bpf() 系統呼叫來執行由 command 指定的操作。 該操作採用 attr 中提供的引數。 size 引數是 attr 中 union bpf_attr 的大小。
BPF_MAP_CREATE
使用 attr 中所需的型別和屬性建立對映
int fd;
union bpf_attr attr = {
.map_type = BPF_MAP_TYPE_ARRAY; /* mandatory */
.key_size = sizeof(__u32); /* mandatory */
.value_size = sizeof(__u32); /* mandatory */
.max_entries = 256; /* mandatory */
.map_flags = BPF_F_MMAPABLE;
.map_name = "example_array";
};
fd = bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
成功時返回一個程序本地檔案描述符,失敗時返回負錯誤。 可以透過呼叫 close(fd) 刪除對映。 程序退出時,將自動刪除由開啟的檔案描述符持有的對映。
注意
map_name 的有效字元為 A-Z、a-z、0-9、'_' 和 '.'。
BPF_MAP_LOOKUP_ELEM
使用 attr->map_fd、attr->key、attr->value 在給定對映中查詢鍵。 成功時返回零並將找到的元素儲存到 attr->value 中,失敗時返回負錯誤。
BPF_MAP_UPDATE_ELEM
使用 attr->map_fd、attr->key、attr->value 在給定對映中建立或更新鍵/值對。 成功時返回零,失敗時返回負錯誤。
BPF_MAP_DELETE_ELEM
使用 attr->map_fd、attr->key 在給定對映中按鍵查詢並刪除元素。 成功時返回零,失敗時返回負錯誤。