> From: Morten Brørup [mailto:m...@smartsharesystems.com]
> Sent: Thursday, 26 October 2023 15.45
> 
> > From: Thomas Monjalon [mailto:tho...@monjalon.net]
> > Sent: Thursday, 26 October 2023 15.37
> >
> > 25/10/2023 18:31, Thomas Monjalon:
> > > Real-time thread priority was been forbidden on Unix
> > > because of problems they can cause.
> > > Warnings and helpers are added to avoid deadlocks,
> > > so real-time can be allowed on all systems.
> >
> > Unit test is failing:
> > DPDK:fast-tests / threads_autotest      TIMEOUT 600.01 s
> >
> > It is seen in only 1 target (maybe the failure occurence is random):
> >   Debian 11 (Buster) (ARM) | PASS
> >   Fedora 37 (ARM)          | PASS
> >   CentOS Stream 9 (ARM)    | FAIL
> >   Fedora 38 (ARM)          | PASS
> >   Fedora 38 (ARM Clang)    | PASS
> >   Ubuntu 20.04 (ARM)       | PASS
> >
> > I need to send a v4 with new implementation and better comments.
> > The Unix sleep will be upgraded from 1 ns to 1 us in case it makes a
> > difference.
> 
> It will not make a difference. The kernel will go through the sleeping steps,
> then wake up again and see the real-time thread is ready to run, and then
> immediately schedule it.
> 
> For testing purposes, consider sleeping 10 milliseconds or something
> significant like that.

A bit more details...

In our recent tests, nanosleep() itself took around 50 us. So you need to sleep 
longer than that for your thread not to be runnable when the nanosleep() wakes 
up again, because 50 us has already passed in "nanosleep overhead".
10 milliseconds provides plenty of margin, and corresponds to 10 jiffies on a 
1000 Hz kernel. (I don't know if it makes any difference for the kernel 
scheduler if the timer crosses a jiffy border or not.)


Reply via email to