From: Thomas Monjalon <thomas@monjalon.net>
To: "Stephen Hemminger" <stephen@networkplumber.org>,
"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
dev@dpdk.org
Cc: dev@dpdk.org, "Morten Brørup" <mb@smartsharesystems.com>,
"Konstantin Ananyev" <konstantin.v.ananyev@yandex.ru>,
"David Marchand" <david.marchand@redhat.com>,
"Jerin Jacob" <jerinj@marvell.com>,
"Luka Jankovic" <luka.jankovic@ericsson.com>,
"Konstantin Ananyev" <konstantin.ananyev@huawei.com>,
"Chengwen Feng" <fengchengwen@huawei.com>,
"Mattias Rönnblom" <hofors@lysator.liu.se>
Subject: Re: [PATCH v13 1/7] eal: add static per-lcore memory allocation facility
Date: Wed, 16 Oct 2024 10:17:05 +0200 [thread overview]
Message-ID: <3173323.kC03pvyZki@thomas> (raw)
In-Reply-To: <eec7bc72-81f7-403a-abad-53e6eb9965f4@lysator.liu.se>
16/10/2024 06:13, Mattias Rönnblom:
>
> On 2024-10-16 00:33, Stephen Hemminger wrote:
> > On Tue, 15 Oct 2024 11:33:38 +0200
> > Mattias Rönnblom <mattias.ronnblom@ericsson.com> wrote:
> >
> >> + * Lcore variables
> >> + *
> >> + * This API provides a mechanism to create and access per-lcore id
> >> + * variables in a space- and cycle-efficient manner.
> >> + *
> >> + * A per-lcore id variable (or lcore variable for short) holds a
> >> + * unique value for each EAL thread and registered non-EAL
> >> + * thread. There is one instance for each current and future lcore
> >> + * id-equipped thread, with a total of @c RTE_MAX_LCORE instances. The
> >> + * value of the lcore variable for one lcore id is independent from
> >> + * the values assigned to other lcore ids within the same variable.
> >> + *
> >> + * In order to access the values of an lcore variable, a handle is
> >> + * used. The type of the handle is a pointer to the value's type
> >> + * (e.g., for an @c uint32_t lcore variable, the handle is a
> >> + * <code>uint32_t *</code>). The handle type is used to inform the
> >> + * access macros of the type of the values. A handle may be passed
> >> + * between modules and threads just like any pointer, but its value
> >> + * must be treated as an opaque identifier. An allocated handle never
> >> + * has the value NULL.
> >> + *
> >> + * @b Creation
> >> + *
> >> + * An lcore variable is created in two steps:
> >> + * 1. Define an lcore variable handle by using @ref RTE_LCORE_VAR_HANDLE.
> >> + * 2. Allocate lcore variable storage and initialize the handle with
> >> + * a unique identifier by @ref RTE_LCORE_VAR_ALLOC or
> >> + * @ref RTE_LCORE_VAR_INIT. Allocation generally occurs at the time
> >> + * of module initialization, but may be done at any time.
> >> + *
> >> + * The lifetime of an lcore variable is not tied to the thread that
> >> + * created it. Its per lcore id values (up to @c RTE_MAX_LCORE) are
> >> + * available from the moment the lcore variable is created and
> >> + * continue to exist throughout the entire lifetime of the EAL,
> >> + * whether or not the lcore id is currently in use.
> >> + *
> >> + * Lcore variables cannot and need not be freed.
> >> + *
> >> + * @b Access
> >> + *
> >> + * The value of any lcore variable for any lcore id may be accessed
> >> + * from any thread (including unregistered threads), but it should
> >> + * only be *frequently* read from or written to by the owner.
> >> + *
> >> + * Values of the same lcore variable, associated with different lcore
> >> + * ids may be frequently read or written by their respective owners
> >> + * without risking false sharing.
> >> + *
> >> + * An appropriate synchronization mechanism (e.g., atomic loads and
> >> + * stores) should be employed to prevent data races between the owning
> >> + * thread and any other thread accessing the same value instance.
> >> + *
> >> + * The value of the lcore variable for a particular lcore id is
> >> + * accessed using @ref RTE_LCORE_VAR_LCORE.
> >> + *
> >> + * A common pattern is for an EAL thread or a registered non-EAL
> >> + * thread to access its own lcore variable value. For this purpose, a
> >> + * shorthand exists as @ref RTE_LCORE_VAR.
> >> + *
> >> + * Although the handle (as defined by @ref RTE_LCORE_VAR_HANDLE) is a
> >> + * pointer with the same type as the value, it may not be directly
> >> + * dereferenced and must be treated as an opaque identifier.
> >> + *
> >> + * Lcore variable handles and value pointers may be freely passed
> >> + * between different threads.
> >> + *
> >> + * @b Storage
> >> + *
> >> + * An lcore variable's values may be of a primitive type like @c int,
> >> + * but would more typically be a @c struct.
> >> + *
> >> + * The lcore variable handle introduces a per-variable (not
> >> + * per-value/per-lcore id) overhead of @c sizeof(void *) bytes, so
> >> + * there are some memory footprint gains to be made by organizing all
> >> + * per-lcore id data for a particular module as one lcore variable
> >> + * (e.g., as a struct).
> >> + *
> >> + * An application may define an lcore variable handle without ever
> >> + * allocating it.
> >> + *
> >> + * The size of an lcore variable's value must be less than the DPDK
> >> + * build-time constant @c RTE_MAX_LCORE_VAR.
> >> + *
> >> + * Lcore variables are stored in a series of lcore buffers, which are
> >> + * allocated from the libc heap. Heap allocation failures are treated
> >> + * as fatal.
> >> + *
> >> + * Lcore variables should generally *not* be @ref __rte_cache_aligned
> >> + * and need *not* include a @ref RTE_CACHE_GUARD field, since the use
> >> + * of these constructs are designed to avoid false sharing. In the
> >> + * case of an lcore variable instance, the thread most recently
> >> + * accessing nearby data structures should almost-always be the lcore
> >> + * variable's owner. Adding padding will increase the effective memory
> >> + * working set size, potentially reducing performance.
> >> + *
> >> + * Lcore variable values are initialized to zero by default.
> >> + *
> >> + * Lcore variables are not stored in huge page memory.
> >> + *
> >> + * @b Example
> >> + *
> >> + * Below is an example of the use of an lcore variable:
> >> + *
> >> + * @code{.c}
> >> + * struct foo_lcore_state {
> >> + * int a;
> >> + * long b;
> >> + * };
> >> + *
> >> + * static RTE_LCORE_VAR_HANDLE(struct foo_lcore_state, lcore_states);
> >> + *
> >> + * long foo_get_a_plus_b(void)
> >> + * {
> >> + * struct foo_lcore_state *state = RTE_LCORE_VAR(lcore_states);
> >> + *
> >> + * return state->a + state->b;
> >> + * }
> >> + *
> >> + * RTE_INIT(rte_foo_init)
> >> + * {
> >> + * RTE_LCORE_VAR_ALLOC(lcore_states);
> >> + *
> >> + * unsigned int lcore_id;
> >> + * struct foo_lcore_state *state;
> >> + * RTE_LCORE_VAR_FOREACH(lcore_id, state, lcore_states) {
> >> + * (initialize 'state')
> >> + * }
> >> + *
> >> + * (other initialization)
> >> + * }
> >> + * @endcode
> >> + *
> >> + *
> >> + * @b Alternatives
> >> + *
> >> + * Lcore variables are designed to replace a pattern exemplified below:
> >> + * @code{.c}
> >> + * struct __rte_cache_aligned foo_lcore_state {
> >> + * int a;
> >> + * long b;
> >> + * RTE_CACHE_GUARD;
> >> + * };
> >> + *
> >> + * static struct foo_lcore_state lcore_states[RTE_MAX_LCORE];
> >> + * @endcode
> >> + *
> >> + * This scheme is simple and effective, but has one drawback: the data
> >> + * is organized so that objects related to all lcores for a particular
> >> + * module are kept close in memory. At a bare minimum, this requires
> >> + * sizing data structures (e.g., using `__rte_cache_aligned`) to an
> >> + * even number of cache lines to avoid false sharing. With CPU
> >> + * hardware prefetching and memory loads resulting from speculative
> >> + * execution (functions which seemingly are getting more eager faster
> >> + * than they are getting more intelligent), one or more "guard" cache
> >> + * lines may be required to separate one lcore's data from another's
> >> + * and prevent false sharing.
> >> + *
> >> + * Lcore variables offer the advantage of working with, rather than
> >> + * against, the CPU's assumptions. A next-line hardware prefetcher,
> >> + * for example, may function as intended (i.e., to the benefit, not
> >> + * detriment, of system performance).
> >> + *
> >> + * Another alternative to @ref rte_lcore_var.h is the @ref
> >> + * rte_per_lcore.h API, which makes use of thread-local storage (TLS,
> >> + * e.g., GCC __thread or C11 _Thread_local). The main differences
> >> + * between by using the various forms of TLS (e.g., @ref
> >> + * RTE_DEFINE_PER_LCORE or _Thread_local) and the use of lcore
> >> + * variables are:
> >> + *
> >> + * * The lifecycle of a thread-local variable instance is tied to
> >> + * that of the thread. The data cannot be accessed before the
> >> + * thread has been created, nor after it has exited. As a result,
> >> + * thread-local variables must be initialized in a "lazy" manner
> >> + * (e.g., at the point of thread creation). Lcore variables may be
> >> + * accessed immediately after having been allocated (which may occur
> >> + * before any thread beyond the main thread is running).
> >> + * * A thread-local variable is duplicated across all threads in the
> >> + * process, including unregistered non-EAL threads (i.e.,
> >> + * "regular" threads). For DPDK applications heavily relying on
> >> + * multi-threading (in conjunction to DPDK's "one thread per core"
> >> + * pattern), either by having many concurrent threads or
> >> + * creating/destroying threads at a high rate, an excessive use of
> >> + * thread-local variables may cause inefficiencies (e.g.,
> >> + * increased thread creation overhead due to thread-local storage
> >> + * initialization or increased total RAM footprint usage). Lcore
> >> + * variables *only* exist for threads with an lcore id.
> >> + * * If data in thread-local storage may be shared between threads
> >> + * (i.e., can a pointer to a thread-local variable be passed to
> >> + * and successfully dereferenced by non-owning thread) depends on
> >> + * the specifics of the TLS implementation. With GCC __thread and
> >> + * GCC _Thread_local, data sharing between threads is supported.
> >> + * In the C11 standard, accessing another thread's _Thread_local
> >> + * object is implementation-defined. Lcore variable instances may
> >> + * be accessed reliably by any thread.
> >> + */
> >
> > For me this comment too wordy for code and belongs in the documentation instead.
> > Could also be reduced to more precise succinct language.
I agree, this is what I was asking for.
> Provided this makes it into RC1, I can move most of this and some of the
> information in eal_common_lcore_var.c comments into "the documentation"
> as a RC2 patch.
>
> If "the documentation" is a the EAL programmer's guide, a description of
> lcore variables (with pictures!) in sufficient detail (both API and
> implementation) would make up a large fraction of it. That would look
> silly and in the way of more important things. Lcore variables is just a
> tiny bit of infrastructure. Other, more central EAL features, like the
> RTE spinlock, they have no mention at all in the EAL docs.
Please don't take what exists and not exists as an absolute model.
We must improve the doc, split it better and fill the gaps.
In the meantime we want new features like this one to be properly documented.
> Another option I suppose is to documentation it separately from the
> "main" EAL programmer's guide, but - correct me if I'm wrong here -
> there seem to be no precedent for doing this.
For instance, the services cores are a separate chapter of the prog guide.
The lcore variables should be a separate chapter as well.
next prev parent reply other threads:[~2024-10-16 8:17 UTC|newest]
Thread overview: 323+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-08 18:16 [RFC 0/5] Lcore variables Mattias Rönnblom
2024-02-08 18:16 ` [RFC 1/5] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-02-09 8:25 ` Morten Brørup
2024-02-09 11:46 ` Mattias Rönnblom
2024-02-09 13:04 ` Morten Brørup
2024-02-19 7:49 ` Mattias Rönnblom
2024-02-19 11:10 ` Morten Brørup
2024-02-19 14:31 ` Mattias Rönnblom
2024-02-19 15:04 ` Morten Brørup
2024-02-19 9:40 ` [RFC v2 0/5] Lcore variables Mattias Rönnblom
2024-02-19 9:40 ` [RFC v2 1/5] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 0/6] Lcore variables Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-02-20 9:11 ` Bruce Richardson
2024-02-20 10:47 ` Mattias Rönnblom
2024-02-20 11:39 ` Bruce Richardson
2024-02-20 13:37 ` Morten Brørup
2024-02-20 16:26 ` Mattias Rönnblom
2024-02-21 9:43 ` Jerin Jacob
2024-02-21 10:31 ` Morten Brørup
2024-02-21 14:26 ` Mattias Rönnblom
2024-02-22 9:22 ` Morten Brørup
2024-02-23 10:12 ` Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 0/6] Lcore variables Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-02-27 9:58 ` Morten Brørup
2024-02-27 13:44 ` Mattias Rönnblom
2024-02-27 15:05 ` Morten Brørup
2024-02-27 16:27 ` Mattias Rönnblom
2024-02-27 16:51 ` Morten Brørup
2024-02-28 10:09 ` [RFC v5 0/6] Lcore variables Mattias Rönnblom
2024-02-28 10:09 ` [RFC v5 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-03-19 12:52 ` Konstantin Ananyev
2024-03-20 10:24 ` Mattias Rönnblom
2024-03-20 14:18 ` Konstantin Ananyev
2024-05-06 8:27 ` [RFC v6 0/6] Lcore variables Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 0/6] Lcore variables Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-10 9:32 ` Morten Brørup
2024-09-10 10:44 ` Mattias Rönnblom
2024-09-10 13:07 ` Morten Brørup
2024-09-10 15:55 ` Stephen Hemminger
2024-09-11 10:32 ` Morten Brørup
2024-09-11 15:05 ` Mattias Rönnblom
2024-09-11 15:07 ` Morten Brørup
2024-09-11 17:04 ` [PATCH v2 0/6] Lcore variables Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 1/6] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-12 2:33 ` fengchengwen
2024-09-12 5:35 ` Mattias Rönnblom
2024-09-12 7:05 ` fengchengwen
2024-09-12 7:28 ` Jerin Jacob
2024-09-12 8:44 ` [PATCH v3 0/7] Lcore variables Mattias Rönnblom
2024-09-12 8:44 ` [PATCH v3 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-16 10:52 ` [PATCH v4 0/7] Lcore variables Mattias Rönnblom
2024-09-16 10:52 ` [PATCH v4 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-16 14:02 ` Konstantin Ananyev
2024-09-16 17:39 ` Morten Brørup
2024-09-16 23:19 ` Konstantin Ananyev
2024-09-17 7:12 ` Morten Brørup
2024-09-17 8:09 ` Konstantin Ananyev
2024-09-17 14:28 ` Mattias Rönnblom
2024-09-17 16:11 ` Konstantin Ananyev
2024-09-18 7:00 ` Mattias Rönnblom
2024-09-17 16:29 ` Konstantin Ananyev
2024-09-18 7:50 ` Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 0/7] Lcore variables Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 0/7] Lcore variables Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-18 8:24 ` Konstantin Ananyev
2024-09-18 8:25 ` Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 0/7] Lcore variables Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-09-18 9:23 ` Konstantin Ananyev
2024-10-09 22:15 ` Morten Brørup
2024-10-10 10:40 ` Mattias Rönnblom
2024-10-10 11:47 ` Morten Brørup
2024-10-10 13:12 ` Morten Brørup
2024-10-10 13:42 ` Mattias Rönnblom
2024-10-10 13:40 ` Mattias Rönnblom
2024-10-10 13:45 ` Morten Brørup
2024-10-10 16:21 ` Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 0/7] Lcore variables Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-10 14:21 ` [PATCH v9 0/7] Lcore variables Mattias Rönnblom
2024-10-10 14:21 ` [PATCH v9 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-10 15:54 ` Stephen Hemminger
2024-10-10 16:17 ` Mattias Rönnblom
2024-10-10 16:31 ` Stephen Hemminger
2024-10-10 21:24 ` Thomas Monjalon
2024-10-11 8:04 ` Mattias Rönnblom
2024-10-11 8:46 ` Morten Brørup
2024-10-11 9:11 ` Thomas Monjalon
2024-10-14 6:51 ` Mattias Rönnblom
2024-10-14 15:19 ` Stephen Hemminger
2024-10-16 8:05 ` Thomas Monjalon
2024-10-11 8:09 ` Morten Brørup
2024-10-11 8:42 ` Thomas Monjalon
2024-10-11 8:18 ` [PATCH v10 0/7] Lcore variables Mattias Rönnblom
2024-10-11 8:18 ` [PATCH v10 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 0/7] Lcore variables Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-14 8:17 ` Morten Brørup
2024-10-15 6:41 ` Mattias Rönnblom
2024-10-15 7:10 ` Mattias Rönnblom
2024-10-15 7:39 ` Morten Brørup
2024-10-15 9:09 ` Mattias Rönnblom
2024-10-16 8:10 ` Thomas Monjalon
2024-10-15 8:19 ` Morten Brørup
2024-10-15 6:54 ` [PATCH v12 0/7] Lcore variables Mattias Rönnblom
2024-10-15 6:54 ` [PATCH v12 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 0/7] Lcore variables Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-15 10:13 ` Morten Brørup
2024-10-15 19:02 ` Mattias Rönnblom
2024-10-15 20:19 ` Morten Brørup
2024-10-15 22:33 ` Stephen Hemminger
2024-10-16 4:13 ` Mattias Rönnblom
2024-10-16 8:17 ` Thomas Monjalon [this message]
2024-10-16 12:47 ` Mattias Rönnblom
2024-10-15 22:35 ` Stephen Hemminger
2024-10-16 4:23 ` Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 0/7] Lcore variables Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-16 14:53 ` Stephen Hemminger
2024-10-17 5:38 ` Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 0/7] Lcore variables Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 1/7] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 6/7] service: " Mattias Rönnblom
2024-10-17 5:57 ` [PATCH v15 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-18 15:37 ` [PATCH v15 0/7] Lcore variables Thomas Monjalon
2024-10-19 4:24 ` Mattias Rönnblom
2024-10-21 9:16 ` Thomas Monjalon
2024-10-23 7:52 ` [PATCH v16 0/8] " Mattias Rönnblom
2024-10-23 7:52 ` [PATCH v16 1/8] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-23 7:52 ` [PATCH v16 2/8] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-23 7:52 ` [PATCH v16 3/8] eal: add lcore variable performance test Mattias Rönnblom
2024-10-23 7:52 ` [PATCH v16 4/8] eal: add lcore variables' programmer's guide Mattias Rönnblom
2024-10-23 7:52 ` [PATCH v16 5/8] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-23 7:53 ` [PATCH v16 6/8] power: keep per-lcore " Mattias Rönnblom
2024-10-23 7:53 ` [PATCH v16 7/8] service: " Mattias Rönnblom
2024-10-23 7:53 ` [PATCH v16 8/8] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 0/8] Lcore variables Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 1/8] eal: add static per-lcore memory allocation facility Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 2/8] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 3/8] eal: add lcore variable performance test Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 4/8] eal: add lcore variables' programmer's guide Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 5/8] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 6/8] power: keep per-lcore " Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 7/8] service: " Mattias Rönnblom
2024-10-25 8:41 ` [PATCH v17 8/8] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-11-07 22:44 ` [PATCH v17 0/8] Lcore variables Thomas Monjalon
2024-10-16 13:19 ` [PATCH v14 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 6/7] service: " Mattias Rönnblom
2024-10-16 13:19 ` [PATCH v14 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-16 14:58 ` [PATCH v14 0/7] Lcore variables Stephen Hemminger
2024-10-17 5:40 ` Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 6/7] service: " Mattias Rönnblom
2024-10-15 9:33 ` [PATCH v13 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 6/7] service: " Mattias Rönnblom
2024-10-15 6:55 ` [PATCH v12 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 6/7] service: " Mattias Rönnblom
2024-10-14 7:43 ` [PATCH v11 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-14 16:30 ` Stephen Hemminger
2024-10-15 6:48 ` Mattias Rönnblom
2024-10-11 8:18 ` [PATCH v10 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-11 8:18 ` [PATCH v10 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-11 8:18 ` [PATCH v10 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-11 8:18 ` [PATCH v10 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-11 8:19 ` [PATCH v10 6/7] service: " Mattias Rönnblom
2024-10-11 8:19 ` [PATCH v10 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-11 14:25 ` [PATCH v10 0/7] Lcore variables Stephen Hemminger
2024-10-13 7:02 ` Mattias Rönnblom
2024-10-16 8:07 ` Thomas Monjalon
2024-10-10 14:22 ` [PATCH v9 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-10 14:22 ` [PATCH v9 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-10 14:22 ` [PATCH v9 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-10 14:22 ` [PATCH v9 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-10 14:22 ` [PATCH v9 6/7] service: " Mattias Rönnblom
2024-10-10 14:22 ` [PATCH v9 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 5/7] power: keep per-lcore " Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 6/7] service: " Mattias Rönnblom
2024-10-10 14:13 ` [PATCH v8 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-10-11 14:23 ` [PATCH v8 0/7] Lcore variables Stephen Hemminger
2024-10-13 7:04 ` Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-10-09 20:46 ` Morten Brørup
2024-10-10 14:17 ` Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 5/7] power: keep per-lcore " Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 6/7] service: " Mattias Rönnblom
2024-09-18 8:26 ` [PATCH v7 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-18 9:30 ` [PATCH v7 0/7] Lcore variables fengchengwen
2024-10-10 5:06 ` Stephen Hemminger
2024-09-18 8:00 ` [PATCH v6 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-09-18 8:25 ` Konstantin Ananyev
2024-09-18 8:00 ` [PATCH v6 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 5/7] power: keep per-lcore " Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 6/7] service: " Mattias Rönnblom
2024-09-18 8:00 ` [PATCH v6 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-09-17 15:40 ` Morten Brørup
2024-09-18 6:05 ` Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 5/7] power: keep per-lcore " Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 6/7] service: " Mattias Rönnblom
2024-09-17 14:32 ` [PATCH v5 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-16 10:52 ` [PATCH v4 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-09-16 10:52 ` [PATCH v4 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-09-16 11:13 ` Mattias Rönnblom
2024-09-16 11:54 ` Morten Brørup
2024-09-16 16:12 ` Mattias Rönnblom
2024-09-16 17:19 ` Morten Brørup
2024-09-16 10:52 ` [PATCH v4 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-16 16:11 ` Konstantin Ananyev
2024-09-16 10:52 ` [PATCH v4 5/7] power: keep per-lcore " Mattias Rönnblom
2024-09-16 16:12 ` Konstantin Ananyev
2024-09-16 10:52 ` [PATCH v4 6/7] service: " Mattias Rönnblom
2024-09-16 16:13 ` Konstantin Ananyev
2024-09-16 10:52 ` [PATCH v4 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-16 16:14 ` Konstantin Ananyev
2024-09-12 8:44 ` [PATCH v3 2/7] eal: add lcore variable functional tests Mattias Rönnblom
2024-09-12 8:44 ` [PATCH v3 3/7] eal: add lcore variable performance test Mattias Rönnblom
2024-09-12 9:39 ` Morten Brørup
2024-09-12 13:01 ` Mattias Rönnblom
2024-09-12 13:09 ` Jerin Jacob
2024-09-12 13:20 ` Mattias Rönnblom
2024-09-12 15:11 ` Jerin Jacob
2024-09-13 6:47 ` Mattias Rönnblom
2024-09-13 11:23 ` Jerin Jacob
2024-09-13 14:40 ` Morten Brørup
2024-09-16 8:12 ` Jerin Jacob
2024-09-16 9:51 ` Morten Brørup
2024-09-16 10:50 ` Mattias Rönnblom
2024-09-18 10:04 ` Jerin Jacob
2024-09-12 8:44 ` [PATCH v3 4/7] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-12 8:44 ` [PATCH v3 5/7] power: keep per-lcore " Mattias Rönnblom
2024-09-12 8:44 ` [PATCH v3 6/7] service: " Mattias Rönnblom
2024-09-12 8:44 ` [PATCH v3 7/7] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-12 9:10 ` [PATCH v2 1/6] eal: add static per-lcore memory allocation facility Morten Brørup
2024-09-12 13:16 ` Jerin Jacob
2024-09-12 13:41 ` Morten Brørup
2024-09-12 15:22 ` Jerin Jacob
2024-09-18 10:11 ` Jerin Jacob
2024-09-19 19:31 ` Mattias Rönnblom
2024-10-14 7:56 ` Morten Brørup
2024-10-15 6:29 ` Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-09-12 7:35 ` Jerin Jacob
2024-09-12 8:56 ` Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 4/6] power: keep per-lcore " Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 5/6] service: " Mattias Rönnblom
2024-09-11 17:04 ` [PATCH v2 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 4/6] power: keep per-lcore " Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 5/6] service: " Mattias Rönnblom
2024-09-10 7:03 ` [PATCH 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 4/6] power: keep per-lcore " Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 5/6] service: " Mattias Rönnblom
2024-05-06 8:27 ` [RFC v6 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-09-02 14:42 ` [RFC v6 0/6] Lcore variables Morten Brørup
2024-09-10 6:41 ` Mattias Rönnblom
2024-09-10 15:41 ` Stephen Hemminger
2024-02-28 10:09 ` [RFC v5 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-02-28 10:09 ` [RFC v5 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-02-28 10:09 ` [RFC v5 4/6] power: keep per-lcore " Mattias Rönnblom
2024-02-28 10:09 ` [RFC v5 5/6] service: " Mattias Rönnblom
2024-02-28 10:09 ` [RFC v5 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 4/6] power: keep per-lcore " Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 5/6] service: " Mattias Rönnblom
2024-02-25 16:28 ` Mattias Rönnblom
2024-02-25 15:03 ` [RFC v4 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 2/6] eal: add lcore variable test suite Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 3/6] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-02-20 15:31 ` Morten Brørup
2024-02-20 8:49 ` [RFC v3 4/6] power: keep per-lcore " Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 5/6] service: " Mattias Rönnblom
2024-02-22 9:42 ` Morten Brørup
2024-02-23 10:19 ` Mattias Rönnblom
2024-02-20 8:49 ` [RFC v3 6/6] eal: keep per-lcore power intrinsics " Mattias Rönnblom
2024-02-19 9:40 ` [RFC v2 2/5] eal: add lcore variable test suite Mattias Rönnblom
2024-02-19 9:40 ` [RFC v2 3/5] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-02-19 11:22 ` Morten Brørup
2024-02-19 14:04 ` Mattias Rönnblom
2024-02-19 15:10 ` Morten Brørup
2024-02-19 9:40 ` [RFC v2 4/5] power: keep per-lcore " Mattias Rönnblom
2024-02-19 9:40 ` [RFC v2 5/5] service: " Mattias Rönnblom
2024-02-08 18:16 ` [RFC 2/5] eal: add lcore variable test suite Mattias Rönnblom
2024-02-08 18:16 ` [RFC 3/5] random: keep PRNG state in lcore variable Mattias Rönnblom
2024-02-08 18:16 ` [RFC 4/5] power: keep per-lcore " Mattias Rönnblom
2024-02-08 18:16 ` [RFC 5/5] service: " Mattias Rönnblom
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=3173323.kC03pvyZki@thomas \
--to=thomas@monjalon.net \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=hofors@lysator.liu.se \
--cc=jerinj@marvell.com \
--cc=konstantin.ananyev@huawei.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=luka.jankovic@ericsson.com \
--cc=mattias.ronnblom@ericsson.com \
--cc=mb@smartsharesystems.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).