diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2024-06-10 11:10:14 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-06-10 13:40:53 +0000 |
| commit | 048c640a64fd064361382a8800de05c87ff630cb (patch) | |
| tree | 2c896c8ed72d1f589472ee034accc21a3183da42 /executor/executor_linux.h | |
| parent | 348a48c80275445af03c893a955f29c3db0eb62d (diff) | |
executor: optimize waiting for child processes exit
Currently we sleep only for 1 ms, which may produce some excessive CPU load
(we usually have 6/8 such processes waiting).
Make it sleep for 10 ms, but also make the sleep return immediately on child exit.
This shuold both improve latency and reduce CPU load.
Diffstat (limited to 'executor/executor_linux.h')
| -rw-r--r-- | executor/executor_linux.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/executor/executor_linux.h b/executor/executor_linux.h index 3956127cd..bfd81776f 100644 --- a/executor/executor_linux.h +++ b/executor/executor_linux.h @@ -67,6 +67,11 @@ static void os_init(int argc, char** argv, char* data, size_t data_size) got = mmap(data + data_size, SYZ_PAGE_SIZE, PROT_NONE, MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0); if (data + data_size != got) failmsg("mmap of right data PROT_NONE page failed", "want %p, got %p", data + data_size, got); + + // A SIGCHLD handler makes sleep in loop exit immediately return with EINTR with a child exits. + struct sigaction act = {}; + act.sa_handler = [](int) {}; + sigaction(SIGCHLD, &act, nullptr); } static intptr_t execute_syscall(const call_t* c, intptr_t a[kMaxArgs]) |
