Changes

1,291 bytes added ,  10:30, 24 October 2020
Created page with "== Initial Support for BPF Maps == BPF maps are kernel objects which store data (used by BPF programs) in the form of key-value pairs. Applications access BPF maps using file..."
== Initial Support for BPF Maps ==

BPF maps are kernel objects which store data (used by BPF programs) in the form of key-value pairs. Applications access BPF maps using file descriptors. C/R of BPF maps involves serializing their ''meta-data'' and ''data'':

: '''Meta-data''' - This includes information such as map type, key size, value size, etc. CRIU obtains this information from the proc filesystem and using the <code>bpf</code> system call with argument <code>BPF_OBJ_GET_INFO_BY_FD</code>

: '''Data''' - This is the map's contents i.e. the actual key-value pairs. CRIU relies on batch operations to read <code>(BPF_MAP_LOOKUP_BATCH)</code> key-value pairs from maps during the checkpoint stage and to write <code>(BPF_MAP_UPDATE_BATCH)</code> them during the restore phase.

CRIU currently supports C/R of the following BPF map types:

* BPF_MAP_TYPE_HASH
* BPF_MAP_TYPE_ARRAY

== To-Do ==

* C/R of BTF (BPF Type Format) information
* C/R of other kinds of BPF maps

== External Links ==
* [https://www.kernel.org/doc/html/latest/bpf/index.html BPF Documentation]
* [https://blogs.oracle.com/linux/notes-on-bpf-1 Notes on BPF]
* [https://www.collabora.com/news-and-blog/blog/2019/04/05/an-ebpf-overview-part-1-introduction/ An eBPF Overview]

[[Category: Under the hood‏‎]]