From: "Mattias Rönnblom" <hofors@lysator.liu.se>
To: "Morten Brørup" <mb@smartsharesystems.com>,
"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
David Marchand <david.marchand@redhat.com>
Subject: Re: [PATCH 1/6] eal: add static per-lcore memory allocation facility
Date: Tue, 10 Sep 2024 12:44:49 +0200 [thread overview]
Message-ID: <7894817a-2ae1-40d8-946d-c1b7de1d63b7@lysator.liu.se> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9F6C4@smartserver.smartshare.dk>
On 2024-09-10 11:32, Morten Brørup wrote:
>> From: Mattias Rönnblom [mailto:mattias.ronnblom@ericsson.com]
>> Sent: Tuesday, 10 September 2024 09.04
>>
>> Introduce DPDK per-lcore id variables, or lcore variables for short.
>
> Throughout the descriptions and comments,
> please replace "lcore id" with "lcore" (e.g. "per-lcore variables"),
> when referring to the lcore, and not the index of the lcore.
> (Your intention might be to highlight that it only covers threads with an lcore id,
> but if that wasn't the case, you would refer to them as "threads" not "lcores".)
> Except, of course, when referring to an actual lcore id, e.g. lcore_id function parameters.
"lcore" is just another word for "EAL thread." The lcore variables exist
in one instance for every thread with an lcore id, thus also for
registered non-EAL threads (i.e., threads which are not lcores).
I've tried to summarize the (very confusing) terminology of DPDK's
threading model here:
https://ericsson.github.io/dataplanebook/threading/threading.html#eal-threads
So, in my world, "per-lcore id variables" is pretty accurate. You could
say "variables with per-lcore id values" if you want to make it even
more clear, what's going on.
>
> Paraphrasing:
> Consider the type of what you are referring to;
> use "lcore" if its type is "thread", and
> use "lcore id" if its type is "int".
>
> I might be wrong here, but please think hard about it.
>
>>
>> An lcore variable has one value for every current and future lcore
>> id-equipped thread.
>>
>> The primary <rte_lcore_var.h> use case is for statically allocating
>> small, frequently-accessed data structures, for which one instance
>> should exist for each lcore.
>>
>> Lcore variables are similar to thread-local storage (TLS, e.g., C11
>> _Thread_local), but decoupling the values' life time with that of the
>> threads.
>>
>> Lcore variables are also similar in terms of functionality provided by
>> FreeBSD kernel's DPCPU_*() family of macros and the associated
>> build-time machinery. DPCPU uses linker scripts, which effectively
>> prevents the reuse of its, otherwise seemingly viable, approach.
>>
>> The currently-prevailing way to solve the same problem as lcore
>> variables is to keep a module's per-lcore data as RTE_MAX_LCORE-sized
>> array of cache-aligned, RTE_CACHE_GUARDed structs. The benefit of
>> lcore variables over this approach is that data related to the same
>> lcore now is close (spatially, in memory), rather than data used by
>> the same module, which in turn avoid excessive use of padding,
>> polluting caches with unused data.
>>
>> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
>> Acked-by: Morten Brørup <mb@smartsharesystems.com>
>>
>> --
>
>> +++ b/doc/api/doxy-api-index.md
>> @@ -99,6 +99,7 @@ The public API headers are grouped by topics:
>> [interrupts](@ref rte_interrupts.h),
>> [launch](@ref rte_launch.h),
>> [lcore](@ref rte_lcore.h),
>> + [lcore-varible](@ref rte_lcore_var.h),
>
> Typo: varible -> variable
>
>
I'll change it to "lcore variables" (no dash, plural).
>> +++ b/doc/guides/rel_notes/release_24_11.rst
>> @@ -55,6 +55,20 @@ New Features
>> Also, make sure to start the actual text at the margin.
>> =======================================================
>>
>> +* **Added EAL per-lcore static memory allocation facility.**
>> +
>> + Added EAL API <rte_lcore_var.h> for statically allocating small,
>> + frequently-accessed data structures, for which one instance should
>> + exist for each lcore.
>> +
>> + With lcore variables, data is organized spatially on a per-lcore
>> + basis, rather than per library or PMD, avoiding the need for cache
>> + aligning (or RTE_CACHE_GUARDing) data structures, which in turn
>> + reduces CPU cache internal fragmentation, improving performance.
>> +
>> + Lcore variables are similar to thread-local storage (TLS, e.g.,
>> + C11 _Thread_local), but decoupling the values' life time from that
>> + of the threads.
>
> When referring to TLS, you might want to clarify that lcore variables are not instantiated for unregistered threads.
>
Isn't that clear from the first paragraph? Although it should say "per
lcore id", rather than "per lcore."
>
>> +static void *lcore_buffer;
>> +static size_t offset = RTE_MAX_LCORE_VAR;
>> +
>> +static void *
>> +lcore_var_alloc(size_t size, size_t align)
>> +{
>> + void *handle;
>> + void *value;
>> +
>> + offset = RTE_ALIGN_CEIL(offset, align);
>> +
>> + if (offset + size > RTE_MAX_LCORE_VAR) {
>> + lcore_buffer = aligned_alloc(RTE_CACHE_LINE_SIZE,
>> + LCORE_BUFFER_SIZE);
>> + RTE_VERIFY(lcore_buffer != NULL);
>> +
>> + offset = 0;
>> + }
>
> To determine if the lcore_buffer memory should be allocated, why not just check if lcore_buffer == NULL?
Because it may be the case, lcore_buffer is non-NULL but the remaining
space is too small to service the allocation.
> Then offset wouldn't need an initial value of RTE_MAX_LCORE_VAR.
>
>> +
>> + handle = RTE_PTR_ADD(lcore_buffer, offset);
>> +
>> + offset += size;
>> +
>> + RTE_LCORE_VAR_FOREACH_VALUE(value, handle)
>> + memset(value, 0, size);
>> +
>> + EAL_LOG(DEBUG, "Allocated %"PRIuPTR" bytes of per-lcore data with a "
>> + "%"PRIuPTR"-byte alignment", size, align);
>> +
>> + return handle;
>> +}
>
>
>> +/**
>> + * @file
>> + *
>> + * RTE Per-lcore id variables
>
> Suggest mentioning the short form too, e.g.:
> "RTE Per-lcore id variables (RTE Lcore variables)"
What about just "RTE Lcore variables"?
Exactly what they are is thoroughly described in the text that follows.
>
>> + *
>> + * 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) has one value
>> + * for each EAL thread and registered non-EAL thread.
>
> And service thread.
Service threads are EAL threads, or, at a bare minimum, must have a
lcore id, and thus must be registered.
>
>> + * There is one
>> + * copy for each current and future lcore id-equipped thread, with the
>
> "one copy" -> "one instance"
>
Fixed.
>> + * total number of copies amounting to @c RTE_MAX_LCORE. The value of
>
> "copies" -> "instances"
>
OK, I'll rephrase that sentence.
>> + * an lcore variable for a particular lcore id is independent from
>> + * other values (for other lcore ids) within the same lcore 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 @c uint32_t lcore variable, the handle is a
>> + * <code>uint32_t *</code>. The handler type is used to inform the
>
> Typo: "handler" -> "handle", I think :-/
> Found this typo multiple times; search-replace.
Fixed.
>
>> + * access macros 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 a an opaque identifier. An allocated handle
>> + * never has the value NULL.
>> + *
>> + * @b Creation
>> + *
>> + * An lcore variable is created in two steps:
>> + * 1. Define a 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 the time of
>> + * module initialization, but may be done at any time.
>> + *
>> + * An lcore variable is not tied to the owning thread's lifetime. It's
>> + * available for use by any thread immediately after having been
>> + * allocated, and continues to be available throughout the lifetime of
>> + * the EAL.
>> + *
>> + * 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 but owned by to different lcore
>
> Typo: to -> two
>
Fixed.
>> + * ids may be frequently read or written by the owners without risking
>> + * false sharing.
>> + *
>> + * An appropriate synchronization mechanism (e.g., atomic loads and
>> + * stores) should employed to assure there are no data races between
>> + * the owning thread and any non-owner threads accessing the same
>> + * lcore variable instance.
>> + *
>> + * The value of the lcore variable for a particular lcore id is
>> + * accessed using @ref RTE_LCORE_VAR_LCORE_VALUE.
>> + *
>> + * 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
>> + * short-hand exists in the form of @ref RTE_LCORE_VAR_VALUE.
>> + *
>> + * 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 by of a primitive type like @c int,
>
> Two typos: "values may by" -> "value may be"
>
That's not a typo. An lcore variable take on multiple values, one for
each lcore id. That said, I guess you could refer to the whole thing
(the set of values) as the "value" as well.
>> + * 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 choose to define an lcore variable handle, which
>> + * it then it goes on to never allocate.
>> + *
>> + * The size of a lcore variable's value must be less than the DPDK
>> + * build-time constant @c RTE_MAX_LCORE_VAR.
>> + *
>> + * The lcore variable 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 the lcore
>
> Missing word: should almost-always *be* the lcore variables' owner.
>
Fixed.
>
>> + * variables' owner. Adding padding will increase the effective memory
>> + * working set size, potentially reducing performance.
>> + *
>> + * Lcore variable values take on an initial value of zero.
>> + *
>> + * @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_VALUE(lcore_states);
>> + *
>> + * return state->a + state->b;
>> + * }
>> + *
>> + * RTE_INIT(rte_foo_init)
>> + * {
>> + * RTE_LCORE_VAR_ALLOC(lcore_states);
>> + *
>> + * struct foo_lcore_state *state;
>> + * RTE_LCORE_VAR_FOREACH_VALUE(state, lcore_states) {
>> + * (initialize 'state')
>
> Consider: (initialize 'state') -> /* initialize 'state' */
>
I think I tried that, and it failed because the compiler didn't like
nested comments.
>> + * }
>> + *
>> + * (other initialization)
>
> Consider: (other initialization) -> /* 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 is kept close in memory. At a bare minimum, this forces the
>> + * use of cache-line alignment to avoid false sharing. With CPU
>
> Consider adding: use of *padding to* cache-line alignment
> My point here is:
> This sentence should somehow include the word "padding".
I'm not sure everyone thinks about __rte_cache_aligned or cache-aligned
heap allocations as "padded."
> This paragraph is not only aboud cache line alignment, it is primarily about padding.
>
"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."
How about this?
>> + * 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.
>> + *
>> + * Lcore variables has the upside of working with, not against, the
>
> Typo: has -> have
>
Fixed.
>> + * CPU's assumptions and for example next-line prefetchers may well
>> + * work the way its designers 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 make use of thread-local storage (TLS,
>
> Typo: make -> makes >
Fixed.
>> + * 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 existence and non-existence of a thread-local variable
>> + * instance follow that of particular thread's. The data cannot be
>
> Typo: "thread's" -> "threads", I think. :-/
>
It's not a typo.
>> + * accessed before the thread has been created, nor after it has
>> + * exited. As a result, thread-local variables must initialized in
>
> Missing word: must *be* initialized
>
Fixed.
>> + * a "lazy" manner (e.g., at the point of thread creation). Lcore
>> + * variables may be accessed immediately after having been
>> + * allocated (which may be prior 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 details of the TLS implementation. With GCC __thread and
>> + * GCC _Thread_local, such data sharing is supported. In the C11
>> + * standard, the result of accessing another thread's
>> + * _Thread_local object is implementation-defined. Lcore variable
>> + * instances may be accessed reliably by any thread.
>> + */
>> +
>> +#include <stddef.h>
>> +#include <stdalign.h>
>> +
>> +#include <rte_common.h>
>> +#include <rte_config.h>
>> +#include <rte_lcore.h>
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +/**
>> + * Given the lcore variable type, produces the type of the lcore
>> + * variable handle.
>> + */
>> +#define RTE_LCORE_VAR_HANDLE_TYPE(type) \
>> + type *
>> +
>> +/**
>> + * Define a lcore variable handle.
>
> Typo: "a lcore" -> "an lcore"
> Found this typo multiple times; search-replace "a lcore".
>
Yes, fixed.
>> + *
>> + * This macro defines a variable which is used as a handle to access
>> + * the various per-lcore id instances of a per-lcore id variable.
>
> Suggest:
> "the various per-lcore id instances of a per-lcore id variable" ->
> "the various instances of a per-lcore id variable" >
Sounds good.
>> + *
>> + * The aim with this macro is to make clear at the point of
>> + * declaration that this is an lcore handler, rather than a regular
>> + * pointer.
>> + *
>> + * Add @b static as a prefix in case the lcore variable are only to be
>
> Typo: are -> is
>
Fixed.
>> + * accessed from a particular translation unit.
>> + */
>> +#define RTE_LCORE_VAR_HANDLE(type, name) \
>> + RTE_LCORE_VAR_HANDLE_TYPE(type) name
>> +
>> +/**
>> + * Allocate space for an lcore variable, and initialize its handle.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>
> Consider adding: "the lcore variable *instances* are initialized"
> Found this typo multiple times; search-replace.
>
It's not a typo. "Values" is just short for "instances of the value",
just like "instances" is. Using instances everywhere may confuse the
reader that an instance both a name and a value, which is not the case.
I don't know, maybe I should be using "values" everywhere instead of
"instances".
I agree there's some lack of consistency here and potential room for
improvement, but I'm not sure exactly how improvement looks like.
>> + */
>> +#define RTE_LCORE_VAR_ALLOC_SIZE_ALIGN(handle, size, align) \
>> + handle = rte_lcore_var_alloc(size, align)
>> +
>> +/**
>> + * Allocate space for an lcore variable, and initialize its handle,
>> + * with values aligned for any type of object.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>> + */
>> +#define RTE_LCORE_VAR_ALLOC_SIZE(handle, size) \
>> + RTE_LCORE_VAR_ALLOC_SIZE_ALIGN(handle, size, 0)
>> +
>> +/**
>> + * Allocate space for an lcore variable of the size and alignment
>> requirements
>> + * suggested by the handler pointer type, and initialize its handle.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>> + */
>> +#define RTE_LCORE_VAR_ALLOC(handle) \
>> + RTE_LCORE_VAR_ALLOC_SIZE_ALIGN(handle, sizeof(*(handle)), \
>> + alignof(typeof(*(handle))))
>> +
>> +/**
>> + * Allocate an explicitly-sized, explicitly-aligned lcore variable by
>> + * means of a @ref RTE_INIT constructor.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>> + */
>> +#define RTE_LCORE_VAR_INIT_SIZE_ALIGN(name, size, align) \
>> + RTE_INIT(rte_lcore_var_init_ ## name) \
>> + { \
>> + RTE_LCORE_VAR_ALLOC_SIZE_ALIGN(name, size, align); \
>> + }
>> +
>> +/**
>> + * Allocate an explicitly-sized lcore variable by means of a @ref
>> + * RTE_INIT constructor.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>> + */
>> +#define RTE_LCORE_VAR_INIT_SIZE(name, size) \
>> + RTE_LCORE_VAR_INIT_SIZE_ALIGN(name, size, 0)
>> +
>> +/**
>> + * Allocate an lcore variable by means of a @ref RTE_INIT constructor.
>> + *
>> + * The values of the lcore variable are initialized to zero.
>> + */
>> +#define RTE_LCORE_VAR_INIT(name) \
>> + RTE_INIT(rte_lcore_var_init_ ## name) \
>> + { \
>> + RTE_LCORE_VAR_ALLOC(name); \
>> + }
>> +
>> +/**
>> + * Get void pointer to lcore variable instance with the specified
>> + * lcore id.
>> + *
>> + * @param lcore_id
>> + * The lcore id specifying which of the @c RTE_MAX_LCORE value
>> + * instances should be accessed. The lcore id need not be valid
>> + * (e.g., may be @ref LCORE_ID_ANY), but in such a case, the pointer
>> + * is also not valid (and thus should not be dereferenced).
>> + * @param handle
>> + * The lcore variable handle.
>> + */
>> +static inline void *
>> +rte_lcore_var_lcore_ptr(unsigned int lcore_id, void *handle)
>> +{
>> + return RTE_PTR_ADD(handle, lcore_id * RTE_MAX_LCORE_VAR);
>> +}
>> +
>> +/**
>> + * Get pointer to lcore variable instance with the specified lcore id.
>> + *
>> + * @param lcore_id
>> + * The lcore id specifying which of the @c RTE_MAX_LCORE value
>> + * instances should be accessed. The lcore id need not be valid
>> + * (e.g., may be @ref LCORE_ID_ANY), but in such a case, the pointer
>> + * is also not valid (and thus should not be dereferenced).
>> + * @param handle
>> + * The lcore variable handle.
>> + */
>> +#define RTE_LCORE_VAR_LCORE_VALUE(lcore_id, handle) \
>> + ((typeof(handle))rte_lcore_var_lcore_ptr(lcore_id, handle))
>> +
>> +/**
>> + * Get pointer to lcore variable instance of the current thread.
>> + *
>> + * May only be used by EAL threads and registered non-EAL threads.
>> + */
>> +#define RTE_LCORE_VAR_VALUE(handle) \
>> + RTE_LCORE_VAR_LCORE_VALUE(rte_lcore_id(), handle)
>> +
>> +/**
>> + * Iterate over each lcore id's value for a lcore variable.
>> + *
>> + * @param value
>> + * A pointer set successivly set to point to lcore variable value
>
> "set successivly set" -> "successivly set"
>
> Thinking out loud, ignore at your preference:
> During the RFC discussions, the term used for referring to an lcore variable was discussed;
> we considered "pointer", but settled for "value".
> Perhaps "instance" would be usable in comments like like the one describing this function...
> "A pointer set successivly set to point to lcore variable value" ->
> "A pointer set successivly set to point to lcore variable instance".
> I don't know.
>
I also don't know.
>
>> + * corresponding to every lcore id (up to @c RTE_MAX_LCORE).
>> + * @param handle
>> + * The lcore variable handle.
>> + */
>> +#define RTE_LCORE_VAR_FOREACH_VALUE(value, handle) \
>> + for (unsigned int lcore_id = \
>> + (((value) = RTE_LCORE_VAR_LCORE_VALUE(0, handle)), 0); \
>> + lcore_id < RTE_MAX_LCORE; \
>> + lcore_id++, (value) = RTE_LCORE_VAR_LCORE_VALUE(lcore_id, handle))
>> +
>> +/**
>> + * Allocate space in the per-lcore id buffers for a lcore variable.
>> + *
>> + * The pointer returned is only an opaque identifer of the variable. To
>> + * get an actual pointer to a particular instance of the variable use
>> + * @ref RTE_LCORE_VAR_VALUE or @ref RTE_LCORE_VAR_LCORE_VALUE.
>> + *
>> + * The lcore variable values' memory is set to zero.
>> + *
>> + * The allocation is always successful, barring a fatal exhaustion of
>> + * the per-lcore id buffer space.
>> + *
>> + * rte_lcore_var_alloc() is not multi-thread safe.
>> + *
>> + * @param size
>> + * The size (in bytes) of the variable's per-lcore id value. Must be > 0.
>> + * @param align
>> + * If 0, the values will be suitably aligned for any kind of type
>> + * (i.e., alignof(max_align_t)). Otherwise, the values will be aligned
>> + * on a multiple of *align*, which must be a power of 2 and equal or
>> + * less than @c RTE_CACHE_LINE_SIZE.
>> + * @return
>> + * The id of the variable, stored in a void pointer value. The value
>
> "id" -> "handle"
>
Fixed.
>> + * is always non-NULL.
>> + */
>> +__rte_experimental
>> +void *
>> +rte_lcore_var_alloc(size_t size, size_t align);
>> +
>> +#ifdef __cplusplus
>> +}
>> +#endif
>> +
>> +#endif /* _RTE_LCORE_VAR_H_ */
>> diff --git a/lib/eal/version.map b/lib/eal/version.map
>> index e3ff412683..5f5a3522c0 100644
>> --- a/lib/eal/version.map
>> +++ b/lib/eal/version.map
>> @@ -396,6 +396,9 @@ EXPERIMENTAL {
>>
>> # added in 24.03
>> rte_vfio_get_device_info; # WINDOWS_NO_EXPORT
>> +
>> + rte_lcore_var_alloc;
>> + rte_lcore_var;
>
> No such function: rte_lcore_var
Indeed. That variable is gone. Fixed.
Thanks a lot of your review Morten.
>
>> };
>>
>> INTERNAL {
>> --
>> 2.34.1
>
next prev parent reply other threads:[~2024-09-10 10:44 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 [this message]
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
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=7894817a-2ae1-40d8-946d-c1b7de1d63b7@lysator.liu.se \
--to=hofors@lysator.liu.se \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=konstantin.v.ananyev@yandex.ru \
--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).