On Fri, Feb 16, 2024 at 03:58:20PM +0100, Benjamin Tissoires wrote:
So (and this also answers your second email today) I'm thinking at:
- have multiple flags to control the timer (with dedicated timer_cb kernel functions):
- BPF_F_TIMER_HRTIMER (default)
- BPF_F_TIMER_WORKER (no timer, just workqueue)
These two make sense, but
- BPF_F_TIMER_DELAYED_WORKER (hrtimer + workqueue, or actual delayed_work, but that's re-implementing stuffs)
This one doesn't. Unlike hrtimer the workqueue is non deterministic. Requesting a callback after a specific delay only to be randomized by the workqueue is a confusing UX to give to bpf progs. If bpf author really want to do something like that they can implement such anti-feature manually with two bpf_timers.
Later we'll add a selector for WQ. At that time we'd need to decide whether to use a dedicated kthread or any of system_*_wq or WQ_BH. For now I'd only expose 'sleepable' as a guarantee in bpf api. Hence BPF_F_TIMER_SLEEPABLE is the only extra bit in flags for bpf_timer_start(). Not sure whether it's needed in bpf_timer_init() too.