+ CRIU Mailing List On Mon, Jun 22, 2020 at 10:29 PM Abhishek Vijeev <abhishek.vijeev@xxxxxxxxx> wrote: > > 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.