On Wed, 3 Apr 2024 at 17:43, Thomas Gleixner tglx@linutronix.de 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@redhat.com/
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).