Image cache/proxy TODO
This is the plan for image cache and proxy further development before it gets into master
- 1 Document the whole thing
- 2 Make the unix sockets reside in work-dir
- 3 Tune up the image_cache and image_proxy commands to obey daemon CLI rules
- 4 Fix local connections not to generate per-image threads
- 5 No strings in protocol
- 6 Check how proxy/cache works with incremental dumps
- 7 Add support for cache/proxy into go-phaul code
Document the whole thing
Add articles for newly introduced actions and options to the CLI page. Also, it would be good to have an article describing the protocols involved.
Make the unix sockets reside in work-dir
Looking at do_open_remote_image() I see that it fchdir-s to image dir before connecting to proxy/cache. Better solution is to put the socket into workdir.
Tune up the image_cache and image_proxy commands to obey daemon CLI rules
They should accept the
--pidfile options. Presumably the very
cr_daemon() call should be equipped with everything that should be done for CLI/opt/--daemon and proxy/cache tasks should just call it :)
Fix local connections not to generate per-image threads
There can be many images and it's not nice to stress the system with such amount of threads. The
criu/uffd.c manages multiple descriptors with page-faults using the epoll stuff and can be used as an example.
accept_remote_image_connections() seem not to work well with
opts.ps_socket RPC as the former just calls
accept() on whatever socket is passed there, while the
opts.ps_socket is already an established socket for data transfer.
No strings in protocol
Now the hard-coded "RESTORE_FINISH" string (and DUMP_FINISHED one) is used to terminate the communication. Need to tune up the protobuf objects to send boolean (or integer) EOF sign rather that the string.
Check how proxy/cache works with incremental dumps
Looking at the
skip_remote_bytes() I think that image-cache and -proxy still do not work well with stacked pages images. Probably for those we'll need the page server or lazy pages like protocol that would request the needed regions and receive it back rather than read bytes from sockets simply to skip those.
Add support for cache/proxy into go-phaul code
I haven't yet finished with the prototype, but plan to do it soon, so once the above steps are done we'll be able to proceed with this one.