criu/compel/include
Andrei Vagin 03d41eff5d
compel/infect: Use waitpid with specific PIDs in compel_stop_tasks_on_syscall
When CRIU traces a large number of tasks, calling wait4(-1, ...) can
be slow because the kernel has to iterate over many tasks to find one
that has changed state. This overhead becomes significant when
thousands of tasks are involved. The time complexity of the old approach
was O(n^2) because we called wait4(-1, ...) N times, and each call
took O(N) time in the kernel.

This patch introduces compel_stop_tasks_on_syscall which takes an
array of PIDs and waits for each one specifically. This avoids the
O(N) search in the kernel's do_wait implementation and significantly
improves performance during the restore phase when many tasks are
being resumed and stopped at the rt_sigreturn syscall.

Some parallelism still exists in this approach. The loop waits for each
process to stop on a syscall, verifies it, and then lets it continue
running. While we move to wait for the next process in the array, the
previously processed ones continue their execution in parallel.

The performance profile of the bottleneck showed:
   - 70.45% entry_SYSCALL_64
      - do_syscall_64
         - 68.29% __do_sys_wait4
            - kernel_wait4
               - 68.28% do_wait
                  - 68.26% __do_wait
                     - 65.69% wait_consider_task
                          8.71% _raw_spin_lock_irq
                          2.39% _raw_spin_unlock_irq

Signed-off-by: Andrei Vagin <avagin@google.com>
2026-07-21 13:40:18 +02:00
..
uapi compel/infect: Use waitpid with specific PIDs in compel_stop_tasks_on_syscall 2026-07-21 13:40:18 +02:00
compel-cpu.h compel: fpu -- Add compel_test_fpu_cap helper 2018-10-30 19:27:55 +03:00
elf32-types.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
elf64-types.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
errno.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
infect-priv.h criu/restore: gcs: adds restore implementation for Guarded Control Stack 2026-07-21 13:40:17 +02:00
log.h log: remove all uses of %m specifier in pr_* functions 2023-04-15 21:17:21 -07:00
piegen.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
ptrace.h compel: set TRACESYSGOOD to distinguish breakpoints from syscalls 2023-04-15 21:17:21 -07:00
rpc-pie-priv.h clang-format: do automatic comment fixups 2022-04-28 17:53:52 -07:00
shmem.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00