]> git.proxmox.com Git - proxmox-backup.git/commit
api daemons: periodically unpark a tokio thread to ensure progress
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 18 Jul 2022 12:11:01 +0000 (14:11 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 18 Jul 2022 12:11:03 +0000 (14:11 +0200)
commitc2206e21e0f27fbb7610180fc9dc3cb2fe1c4c16
tree02bd6612eb5ce629720a4a23045d77a978aa8ff8
parent4f04ecb2f681b2d2805a3e033d6bff0492d39023
api daemons: periodically unpark a tokio thread to ensure progress

The underlying issue seems to be the case when the thread that runs
the IO driver is polling its own tasks, while that happens the IO
driver/poller won't run and thus work stealing won't happen, meaning
that idle and parked threads will keep being parked even if there's
pending work they could do.

A promising solution for tokio is proposed in its issue tracker [0],
but it wasn't yet implemented. So, as stop gap spawn a separate
thread that periodically spawns a no-op ready future in the runtime
which would unpark a worker in the aforementioned case and thus
should break the bogus idleness. Choose a 3s period for that without
any overly elaborate reasons, our main goal is to ensure we accept
incoming connections and 3s is well below a HTTP timeout and leaves
some room for high network latencies while not invoking to much
additional wakeups for systems that are really idling.

[0]: https://github.com/tokio-rs/tokio/issues/4730#issuecomment-1147975074

Link: https://github.com/tokio-rs/tokio/issues/4730
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/bin/proxmox-backup-api.rs
src/bin/proxmox-backup-proxy.rs