• Andrey Vagin's avatar
    dump: use breakpoints instead of tracing syscalls (v2) · 0b1b8151
    Andrey Vagin authored
    Currently CRIU traces syscalls to catch a moment, when sigreturn() is
    called. Now we trace recv(cmd), close(logfd), close(cmdfd), sigreturn().
    
    We can reduce a number of steps by using hw breakpoints. A breakpoint is
    set before sigreturn, so we will need to trace only it.
    
    v2: In the first version a breakpoint is set after sigreturn. In this
    case we have a problem with signals. If a process has pending signals,
    it will start to precess them after exiting from sigreturn(), but before
    returning to userspace. So the breakpoint will not be triggered.
    
    And at the end Here are a few numbers how we catch sigreturn.
    Before this patch criu executes 36 syscalls and gets 12 signals.
    With this patch criu executes 18 syscalls and gets 5 signals.
    Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    0b1b8151
parasite.c 12.1 KB