Re: [RFC 00/26] amdgpu plugin render node only discussion

Andrei Vagin <[email protected]> Mon, 23 Feb 2026 10:46:42 -0800
Newsgroups dev.linux.lists.criu
Message-ID <CAEWA0a4ghpPeQjg1ETiQysGj5agfWwJRvMbWzhrYL5r8WZ5H7Q@mail.gmail.com>
David, could you or someone else form your team please review this
series? All changes are just in the amd plugin, so I am ready to take
them after your review.

Thanks,
Andrei

On Fri, Feb 20, 2026 at 4:05 AM Tvrtko Ursulin
<[email protected]> wrote:
>
> Hi all,
>
> Long story short, I am trying to make some inroads towards having a working
> checkpoint and restore for render node only applications (ie. no KFD).
>
> Plan is to write test scenarios in an increasing order of complexity and make
> them work. Those tests can be found here:
>
> https://cgit.freedesktop.org/~tursulin/intel-gpu-tools/log/?h=amd-criu
>
> For those unfamiliar, once built the list of subtest can be obtained like this:
>
> $ amd_criu --l
> open
> one-bo
> map-one
> mmap-one
> map-and-mmap-one
> map-mmap-fork
>
> Each test will pause after the setup phase waiting for a return key. This is the
> point when they can be checkpointed and restored. The tests are in the order of
> how I was fixing issues one by one, give or take some details.
>
> Without this series nothing works, while with it, they all pass (last one is the
> superset of all previous ones, or the most complex test):
>
> $ amd_criu --r map-mmap-fork
> ...
> $ sudo /usr/local/sbin/criu dump -t `pgrep amd_criu | head -1` -L /usr/local/lib/criu/ -vvv -o criu.log -j --link-remap --tcp-established --file-locks --ext-unix-sk
> $ sudo /usr/local/sbin/criu restore  -L /usr/local/lib/criu/ -vvv -o restore.log --shell-job --link-remap --tcp-established --file-locks --ext-unix-sk
>
> Subtest map-mmap-fork: SUCCESS (6.310s)
>
> However trivial the tests may currently be, the combination of them and this
> series is supposed to be a starting point for a design discussion since it
> appears there are many issues to address.
>
> Having said that, this series actually starts with a fair number of cleanup
> patches which can be reviewed and merged independently. Or I can easily send
> them as a standalone pull request if that would work better.
>
> Only the last six patches, plus "plugins/amdgpu: Add plugin to inventory even if
> process has no vmas", are the ones with fixes and hacks which make the tests
> pass.
>
> In no particular order the main issues I currently see are:
>
>  * GPU discovery with no KFD open or present
>  * Rendernode VMA handling
>  * VMA handling with forked processes
>  * GPU VA conflicts during restore
>
> Some of these may require changes to CRIU plugin parameters and input from
> CRIU experts.
>
> More details on each of these topics can be found in the respective patch commit
> messages. I will also gladly expand on any.
>
> For now I wanted to test the waters first by sending this early and see who is
> interested and to what extent. This is far from a working render node support
> but it illustrates that such basic scenarios currently do not work, that I think
> those basics need to be fixed first before proceeding with anything more
> complex.
>
> Also, nothing in this series is supposed to negatively influence the KFD paths,
> but with a disclaimer that I did not test that side at all. Suggestions on a
> suitable KFD test program would be welcomed.
>
> Tvrtko
>
> Tvrtko Ursulin (26):
>   plugins/amgdpu: Fix one error message
>   plugins/amdgpu: Remove unused current_pid global variable
>   plugins/amdgpu: Remove unused new_minor from struct vma_metadata
>   plugins/amdgpu: Fix drm pages size header
>   plugins/amdgpu: Fix logging of failures to open files during restore
>     init
>   plugins/amdgpu: Propagate failure to save buffer object content
>   plugins/amdgpu: Close the directory when image probing fails
>   plugins/amdgpu: Close dma-buf image file if the read fails
>   plugins/amdgpu: Check images were opened successfully
>   plugins/amdgpu: Flatten amdgpu_restore_init a bit
>   plugins/amdgpu: Fix error handling in amdgpu_plugin_drm_restore_file()
>   plugins/amdgpu: Add error handling for seek operations
>   plugins/amdgpu: Consolidate vm_info collection
>   plugins/amdgpu: Remove plugin_log_msg()
>   plugins/amdgpu: Add plugin to inventory even if process has no vmas
>   plugins/amdgpu: Move drm file dump and restore into helpers
>   plugins/amdgpu: Use the load_img helper in drm file restore
>   plugins/amdgpu: Convert away from libc buffered file IO
>   plugins/amdgpu: Use save_vma_updates for all call sites
>   plugins/amdgpu: amdgpu_plugin_drm_restore_file() does not need to use
>     libdrm
>   plugins/amdgpu: Enable restore with only the drm node open
>   plugins/amdgpu: Handle DRM render node mmaps
>   plugins/amdgpu: Consolidate shared memory handling
>   plugins/amdgpu: Store VMA data in shared memory
>   plugins/amdgpu: Hack to save a fd number which works for vma restore
>   plugins/amdgpu: Hack to work around GPU virtual address conflicts
>
>  plugins/amdgpu/amdgpu_plugin.c          | 856 ++++++++++++++----------
>  plugins/amdgpu/amdgpu_plugin_dmabuf.c   |  17 +-
>  plugins/amdgpu/amdgpu_plugin_drm.c      | 125 ++--
>  plugins/amdgpu/amdgpu_plugin_drm.h      |   5 +-
>  plugins/amdgpu/amdgpu_plugin_topology.c |   2 +
>  plugins/amdgpu/amdgpu_plugin_topology.h |   2 +
>  plugins/amdgpu/amdgpu_plugin_util.c     | 106 +--
>  plugins/amdgpu/amdgpu_plugin_util.h     |  17 +-
>  8 files changed, 636 insertions(+), 494 deletions(-)
>
> --
> 2.52.0
>
>