From: Thomas Monjalon <thomas@monjalon.net>
To: "Morten Brørup" <mb@smartsharesystems.com>
Cc: dev@dpdk.org, David Marchand <david.marchand@redhat.com>,
stable@dpdk.org, Anatoly Burakov <anatoly.burakov@intel.com>,
Tyler Retzlaff <roretzla@linux.microsoft.com>,
Narcisa Vasile <navasile@linux.microsoft.com>,
Stephen Hemminger <stephen@networkplumber.org>,
Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: Re: [PATCH v6 1/1] eal/unix: allow creating thread with real-time priority
Date: Fri, 27 Oct 2023 11:11:19 +0200 [thread overview]
Message-ID: <2088214.KlZ2vcFHjT@thomas> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9EFA3@smartserver.smartshare.dk>
27/10/2023 10:45, Morten Brørup:
> > From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > Sent: Friday, 27 October 2023 10.09
> >
> > When adding an API for creating threads,
> > the real-time priority has been forbidden on Unix.
> >
> > There is a known issue with ring behaviour,
> > but it should not be completely forbidden.
> >
> > Real-time thread can block some kernel threads on the same core,
> > making the system unstable.
> > That's why a sleep is added in the test thread,
> > and a warning is logged when using real-time priority.
> >
> > Fixes: ca04c78b6262 ("eal: get/set thread priority per thread
> > identifier")
> > Fixes: ce6e911d20f6 ("eal: add thread lifetime API")
> > Fixes: a7ba40b2b1bf ("drivers: convert to internal control threads")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > Acked-by: Morten Brørup <mb@smartsharesystems.com>
> > ---
>
> [...]
>
> > enum rte_thread_priority {
> > + /** Normal thread priority, the default. */
> > RTE_THREAD_PRIORITY_NORMAL = 0,
> > - /**< normal thread priority, the default */
> > + /**
> > + * Highest thread priority, use with caution.
> > + * WARNING: System may be unstable because of a real-time busy
> > loop.
> > + * @see rte_thread_yield_realtime().
>
> Please remove the reference to the now non-existing function.
>
> Also, I'd prefer to move the warning comments (about real-time threads having priority over kernel threads, and issues with rte_ring) up here, so it goes into the public API documentation.
Yes OK, thanks for the careful review.
>
> > + */
> > RTE_THREAD_PRIORITY_REALTIME_CRITICAL = 1,
> > - /**< highest thread priority allowed */
> > };
> >
> > /**
> > diff --git a/lib/eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c
> > index 278d8d342d..17ffb86c17 100644
> > --- a/lib/eal/unix/rte_thread.c
> > +++ b/lib/eal/unix/rte_thread.c
> > @@ -33,6 +33,8 @@ static int
> > thread_map_priority_to_os_value(enum rte_thread_priority eal_pri, int
> > *os_pri,
> > int *pol)
> > {
> > + static bool warned;
> > +
> > /* Clear the output parameters. */
> > *os_pri = sched_get_priority_min(SCHED_OTHER) - 1;
> > *pol = -1;
> > @@ -51,6 +53,17 @@ thread_map_priority_to_os_value(enum
> > rte_thread_priority eal_pri, int *os_pri,
> > sched_get_priority_max(SCHED_OTHER)) / 2;
> > break;
> > case RTE_THREAD_PRIORITY_REALTIME_CRITICAL:
> > + /*
> > + * WARNING: Real-time busy loop takes priority on kernel
> > threads,
> > + * making the system unstable.
> > + * There is also a known issue when using
> > rte_ring.
> > + */
> > + if (!warned) {
> > + RTE_LOG(NOTICE, EAL,
> > + "Real-time thread is unstable if polling
> > without sleep.\n");
> > + warned = true;
> > + }
>
> Is it 100 % certain that the system becomes unstable if not sleeping or using blocking system calls from a real-time thread?
> And technically, it's not the thread itself that becomes unstable.
>
> How about:
> "System may be unstable unless real-time thread uses blocking system calls or sleeps."
> or:
> "Real-time thread usually requires the use of blocking system calls or sleeps."
> or something else.
Yes something like that looks better.
I will try to find a short sentence.
>
> My ACK is still valid.
>
>
next prev parent reply other threads:[~2023-10-27 9:11 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-24 12:54 [PATCH] eal/unix: allow creating thread with real-time priority Thomas Monjalon
2023-10-24 13:55 ` Morten Brørup
2023-10-24 16:04 ` Stephen Hemminger
2023-10-25 13:15 ` Thomas Monjalon
2023-10-25 13:34 ` Bruce Richardson
2023-10-25 13:44 ` Thomas Monjalon
2023-10-25 15:08 ` Stephen Hemminger
2023-10-25 15:14 ` Bruce Richardson
2023-10-25 15:18 ` Thomas Monjalon
2023-10-25 15:32 ` Thomas Monjalon
2023-10-25 15:13 ` [PATCH v2] " Thomas Monjalon
2023-10-25 15:37 ` Stephen Hemminger
2023-10-25 16:46 ` Thomas Monjalon
2023-10-25 17:54 ` Morten Brørup
2023-10-25 21:33 ` Stephen Hemminger
2023-10-26 7:33 ` Morten Brørup
2023-10-26 16:32 ` Stephen Hemminger
2023-10-26 17:07 ` Morten Brørup
2023-10-26 0:00 ` Stephen Hemminger
2023-10-25 16:31 ` [PATCH v3 0/2] " Thomas Monjalon
2023-10-25 16:31 ` [PATCH v3 1/2] eal: add thread yield functions Thomas Monjalon
2023-10-25 16:40 ` Bruce Richardson
2023-10-25 17:06 ` Thomas Monjalon
2023-10-25 18:07 ` Morten Brørup
2023-10-25 16:31 ` [PATCH v3 2/2] eal/unix: allow creating thread with real-time priority Thomas Monjalon
2023-10-26 13:36 ` [PATCH v3 0/2] " Thomas Monjalon
2023-10-26 13:44 ` Morten Brørup
2023-10-26 13:57 ` Morten Brørup
2023-10-26 14:04 ` Thomas Monjalon
2023-10-26 14:08 ` Morten Brørup
2023-10-26 14:30 ` Thomas Monjalon
2023-10-26 14:50 ` Morten Brørup
2023-10-26 14:59 ` Morten Brørup
2023-10-26 15:54 ` Bruce Richardson
2023-10-26 16:07 ` Thomas Monjalon
2023-10-26 16:50 ` Morten Brørup
2023-10-26 19:51 ` Thomas Monjalon
2023-10-27 7:19 ` Morten Brørup
2023-10-26 16:28 ` Stephen Hemminger
2023-10-26 19:55 ` Thomas Monjalon
2023-10-26 21:10 ` Stephen Hemminger
2023-10-26 14:10 ` David Marchand
2023-10-26 13:37 ` [PATCH v4 " Thomas Monjalon
2023-10-26 13:37 ` [PATCH v4 1/2] eal: add thread yield functions Thomas Monjalon
2023-10-26 13:37 ` [PATCH v4 2/2] eal/unix: allow creating thread with real-time priority Thomas Monjalon
2023-10-26 14:19 ` [PATCH v5 0/2] " Thomas Monjalon
2023-10-26 14:19 ` [PATCH v5 1/2] eal: add thread yield functions Thomas Monjalon
2023-10-26 14:19 ` [PATCH v5 2/2] eal/unix: allow creating thread with real-time priority Thomas Monjalon
2023-10-26 20:00 ` [PATCH v5 0/2] " Thomas Monjalon
2023-10-26 23:35 ` Tyler Retzlaff
2023-10-27 8:08 ` [PATCH v6 1/1] eal/unix: " Thomas Monjalon
2023-10-27 8:45 ` Morten Brørup
2023-10-27 9:11 ` Thomas Monjalon [this message]
2023-10-27 18:15 ` Stephen Hemminger
2024-10-07 19:27 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2088214.KlZ2vcFHjT@thomas \
--to=thomas@monjalon.net \
--cc=anatoly.burakov@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=dmitry.kozliuk@gmail.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=mb@smartsharesystems.com \
--cc=navasile@linux.microsoft.com \
--cc=roretzla@linux.microsoft.com \
--cc=stable@dpdk.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.