Re: [PATCH v6 1/2] posix-timers: Prefer delivery of signals to the current thread

From: Dmitry Vyukov
Date: Thu Apr 04 2024 - 04:55:38 EST


On Wed, 3 Apr 2024 at 17:43, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
>
> On Wed, Apr 03 2024 at 17:03, Oleg Nesterov wrote:
> > On 04/03, Thomas Gleixner wrote:
> >> The test if fragile as hell as there is absolutely no guarantee that the
> >> signal target distribution is as expected. The expectation is based on a
> >> statistical assumption which does not really hold.
> >
> > Agreed. I too never liked this test-case.
> >
> > I forgot everything about this patch and test-case, I can't really read
> > your patch right now (sorry), so I am sure I missed something, but
> >
> >> static void *distribution_thread(void *arg)
> >> {
> >> - while (__atomic_load_n(&remain, __ATOMIC_RELAXED));
> >> - return NULL;
> >> + while (__atomic_load_n(&remain, __ATOMIC_RELAXED) && !done) {
> >> + if (got_signal)
> >> + usleep(10);
> >> + }
> >> +
> >> + return (void *)got_signal;
> >> }
> >
> > Why distribution_thread() can't simply exit if got_signal != 0 ?
> >
> > See https://lore.kernel.org/all/20230128195641.GA14906@xxxxxxxxxx/
>
> Indeed. It's too obvious :)

This test models the intended use-case that was the motivation for the change:
We want to sample execution of a running multi-threaded program, it
has multiple active threads (that don't exit), since all threads are
running and consuming CPU, they all should get a signal eventually.

If threads will exit once they get a signal, then the test will pass
even if signal delivery is biased towards a single running thread all
the time (the previous kernel impl).