When doing its work CRIU needs to know some information about the kernel it runs on and the tool set that's available on the host.
E.g. when performing memory dumping and restoring CRIU needs to distinguish anonymous shared memory from tmpfs file mappings. This can be done by checking the mapped file device number to be the anon one. This device number is generated by the kernel on boot and is persistent while the node is up and running.
Thus on start CRIU collects all the needed information, but the amount of data to find out and time it takes is quite big, especially if compared to the time it takes CRIU to perform requested action (dump or restore). To speed things up CRIU caches the collected information in /run/criu.kdat
file. The directory is typically a tmpfs mount point that gets flushed when node reboots, so the cache is always clean after the kernel change.
The /run
directory is not cut in stone, it can be changed compile-time by overriding the RUNDIR
variable.