DPDK patches and discussions
 help / color / mirror / Atom feed
From: Thomas Monjalon <thomas@monjalon.net>
To: Tyler Retzlaff <roretzla@linux.microsoft.com>
Cc: "Stephen Hemminger" <stephen@networkplumber.org>,
	dev@dpdk.org, "Morten Brørup" <mb@smartsharesystems.com>,
	david.marchand@redhat.com,
	"Bruce Richardson" <bruce.richardson@intel.com>
Subject: Re: help with pthread_t deprecation / api changes
Date: Tue, 13 Dec 2022 20:34:02 +0100	[thread overview]
Message-ID: <3905723.ZaRXLXkqSa@thomas> (raw)
In-Reply-To: <20221213173843.GA8640@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net>

13/12/2022 18:38, Tyler Retzlaff:
> On Tue, Dec 13, 2022 at 09:32:06AM +0100, Thomas Monjalon wrote:
> > 12/12/2022 18:45, Tyler Retzlaff:
> > > On Sun, Dec 11, 2022 at 08:50:48AM +0100, Thomas Monjalon wrote:
> > > > 10/12/2022 00:49, Tyler Retzlaff:
> > > > > On Fri, Dec 09, 2022 at 10:13:44PM +0100, Thomas Monjalon wrote:
> > > > > > 09/12/2022 21:06, Tyler Retzlaff:
> > > > > > > On Fri, Dec 09, 2022 at 08:48:14AM -0800, Stephen Hemminger wrote:
> > > > > > > > On Fri, 09 Dec 2022 08:53:57 +0100
> > > > > > > > Thomas Monjalon <thomas@monjalon.net> wrote:
> > > > > > > > 
> > > > > > > > > > > If some execution environment doesn't support thread names, it could return a string that makes it possible for a human to identify the thread, e.g. the tread id. Again, this is assuming that it is only used for debugging, trace, and similar.  
> > > > > > > > > > 
> > > > > > > > > > i think this raises a good question. is the purpose of setting a thread name
> > > > > > > > > > meant to be something we can use from the application or is it something that
> > > > > > > > > > is for debugging diagnostics and may be a best effort?  
> > > > > > > > > 
> > > > > > > 
> > > > > > > > Thomas Monjalon <thomas@monjalon.net> wrote:
> > > > > > > 
> > > > > > > > I think yes it is only for debugging.
> > > > > > > > So best effort looks to be a good approach.
> > > > > > > > I'm not sure you need to replace the functions.
> > > > > > > > Can you just complete the implementations?
> > > > > > > 
> > > > > > > the patch series put forward allows a set / get name per-lcore, where
> > > > > > > you get implicit (but not exposed via the eal api) call to underlying
> > > > > > > platform thread setname.
> > > > > > 
> > > > > > I don't understand how lcore ID and thread ID are connected.
> > > > > > You can run multiple control threads on a single lcore.
> > > > > > 
> > > > > 
> > > > > correct.
> > > > > 
> > > > > the new public api allows the set of a name on an lcore only. as a
> > > > > side-effect if the platform supports it the name is also set on the
> > > > > thread_id associated with the lcore (from lcore_config[].thread_id).
> > > > > 
> > > > > for control threads you just get the side-effect if the platform
> > > > > supports it, otherwise it is a noop.
> > > > 
> > > > What does it mean? which side effect? what must be supported?
> > > > 
> > > > > if we want set / get name at all this seemed the most usable balance
> > > > > between application consumption with debug use where available. if this
> > > > > isn't acceptable then i would suggest we simply remove both
> > > > > rte_thread_{get,set}name because as a debugging facility we cannot offer
> > > > > a consistent abstracted api which means it shouldn't be in the eal at
> > > > > all.
> > > > 
> > > > Why it cannot be consistent?
> > > > Please be more precise.
> > > > 
> > > 
> > > sorry i thought you had been looking at our implementation, let me
> > > summarize.
> > > 
> > > here are the differences between the underlying platform capabilities
> > > that prohibit both get and set. it's not a matter of just providing missing
> > > implementation for a specific platform.
> > > 
> > > set thread name:
> > >   freebsd
> > >     - set reports no failure, but may silently fail
> > >     - uncertain what name length limit is
> > >   linux
> > >     - set not available in older glibc
> > >     - current rte wrapper silently truncates name length
> > >   windows
> > >     - set always available
> > >     - uncertain what name length limit is
> > > 
> > > get thread name:
> > >   freebsd
> > >     - not available at all
> > >   linux
> > >     - get not available in older glibc
> > >     - get can fail
> > >   windows
> > >     - get always available
> > >     - get can fail
> > > 
> > > keep in mind the purpose of an abstraction is that the application *does
> > > not* have to do conditional evaluation on a per-platform basis around
> > > call sites. once you start putting #ifdef RTE_EXEC_ENV_XXX into code you
> > > failed and i presume we want none of the use of eal to be adorned with
> > > that.
> > > 
> > > at first glance you might think oh, well if get isn't supported then
> > > just return some default string or an empty string but even that is a
> > > violation of the abstraction that leaks implementation detail.
> > > 
> > > i.e. assuming success set() success  get(set()) should also succeed
> > > without conditional compilation of the code.
> > > 
> > > the common abstraction that can be reasonably provided explicitly
> > > operating a thread is something like.
> > > 
> > >   * for set you can provide a watered down version that doesn't report
> > >     failure and silently truncates and ignores errors within the
> > >     implementation. if it works it works if it doesn't you just don't
> > >     know i.e. best effort.
> > >   * for get it cannot be provided consistently, the platforms simply
> > >     aren't providing what is needed.
> > > 
> > > for background one of the request to expose the native platform thread
> > > id was to access the best effort behavior for the thread associated with
> > > an lcore. discussion on list highlighted the constraint that this should
> > > be done without exposing platform specific detail via the eal api.
> > > 
> > > http://mails.dpdk.org/archives/dev/2022-October/253411.html
> > > 
> > > as mentioned in a previous mail i provided a series that accomplishes
> > > this as a side effect of an api that can be consistently provided when
> > > available on the platform, it has 2 benefits.
> > >   * it does not expose the platform-specific native thread handle.
> > >   * for lcores it keeps the name in the application memory so it is
> > >     available in crash/coredumps.
> > > 
> > > so we have 2 options.
> > > 
> > > 1. a watered down set (no get) that is fire and forget and reports no
> > >    failure and maybe it works, maybe it doesn't depending on your platform.
> > > 2. the lcore set / get which is basically (1) for the threads associated
> > >    with lcores but provides some additional features that are supportable
> > >    in the api surface. (set/get, stored in application namespace).
> > 
> > Given thread name is not critical at all, I think best effort is OK.
> > We could make clear in the API documentation that it is not reliable.
> > 
> > I don't think implementing thread name in the specific case of
> > datapath lcore is a real improvement.
> 
> Okay, just one final confirmation. This is what we would like?
> 
> * completely remove the existing rte_thread_getname api.
>     - by implication this means remove the 1 use of it in eal in
>       logging.
> 
> * introduce a new void rte_thread_set_name(rte_thread_t, const char *name)
>   that:
>     - returns void (does not fail), but in cases it can be detected will
>       log a DEBUG level log message.
>     - quietly truncates the name (if longer) to RTE_MAX_THREAD_NAME_LEN on
>       all platforms.
>     - document that it is best effort and only works if the stars align
>       for the target platform.
> 
> * there will be no unit test, since the set doesn't fail and there is no
>   get to validate the set.
> 
> once i get confirmation i'll update the series.

Just my opinion: this proposal is my preference, yes.
What others think?





  reply	other threads:[~2022-12-13 19:34 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-30 22:54 Tyler Retzlaff
2022-12-02  1:12 ` Tyler Retzlaff
2022-12-02  8:03   ` Morten Brørup
2022-12-02 19:57     ` Tyler Retzlaff
2022-12-09  7:53       ` Thomas Monjalon
2022-12-09 16:48         ` Stephen Hemminger
2022-12-09 20:06           ` Tyler Retzlaff
2022-12-09 21:13             ` Thomas Monjalon
2022-12-09 23:49               ` Tyler Retzlaff
2022-12-11  7:50                 ` Thomas Monjalon
2022-12-12 17:45                   ` Tyler Retzlaff
2022-12-13  8:32                     ` Thomas Monjalon
2022-12-13 17:38                       ` Tyler Retzlaff
2022-12-13 19:34                         ` Thomas Monjalon [this message]
2022-12-13 20:39                           ` Morten Brørup
2022-12-14  0:16                             ` Tyler Retzlaff
2022-12-09 21:14           ` Thomas Monjalon
2022-12-09 22:38             ` Stephen Hemminger
2022-12-09 23:55               ` Tyler Retzlaff

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=3905723.ZaRXLXkqSa@thomas \
    --to=thomas@monjalon.net \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=mb@smartsharesystems.com \
    --cc=roretzla@linux.microsoft.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).