Checkpoint/Restore of BPF Map Data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I've been working with the CRIU project to enable CRIU to checkpoint
and restore BPF map files.
(https://github.com/checkpoint-restore/criu/issues/777).

A key component of the solution involves dumping the data contained in
BPF maps. However, I have
been unable to do this due to the following reason - as far as I'm
aware, Linux does not provide an
interface to directly retrieve the key-value pairs stored in a BPF map
without prior knowledge about
the nature of data stored in it. To explain what I mean by 'without
prior information about the data
stored', let's take the example of a BPF map that stores key-value
pairs in the form of a hash table
(BPF_MAP_TYPE_HASH). The only way to iterate through all the key-value
pairs in this map is to use
BPF_MAP_GET_NEXT_KEY. However, if I start with a lookup key that
exists in the map, I will only be
able to iterate through the key-value pairs that occur after this key.
Therefore, I must start with
a lookup key that does not already exist in the map, so that
BPF_MAP_GET_NEXT_KEY returns the
map's first key. However, information about the nature of data stored
in the map is only available to
the application programmer, and it will hence be difficult for CRIU to
guess a key that does not exist
in the map.

I would therefore like to discuss the possibility of extending Linux's
BPF API to provide easier
access to the data contained in BPF maps, in a manner that works for
all types of maps and is
potentially future-proof for other kinds of maps that may be added.

As I currently understand, this problem stems from the fact that
reading and writing to a BPF map's
kernel buffer is only possible using the BPF system call. Therefore,
functionality that allows
reading from and writing to the map in a manner that is agnostic to
the nature of data stored in it
(similar to tee and splice for pipes) would enable checkpointing and
restoring BPF map data.

Do let me know if anything I have written is factually incorrect and
also if there is something I
can explain more clearly.

I look forward to hearing the kernel community's thoughts on this.

Thank you,
Abhishek Vijeev.



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux