numam-dpdk/lib
Harry van Haaren 99e4e84047 service: fix stats race condition for MT safe service
This commit fixes a potential racey-add that could occur if
multiple service-lcores were executing the same MT-safe service
at the same time, with service statistics collection enabled.

Because multiple threads can run and execute the service, the
stats values can have multiple writer threads, resulting in the
requirement of using atomic addition for correctness.

Note that when a MT unsafe service is executed, a spinlock is
held, so the stats increments are protected. This fact is used
to avoid executing atomic add instructions when not required.
Regular reads and increments are used, and only the store is
specified as atomic, reducing perf impact on e.g. x86 arch.

This patch causes a 1.25x increase in cycle-cost for polling a
MT safe service when statistics are enabled. No change was seen
for MT unsafe services, or when statistics are disabled.

Fixes: 21698354c8 ("service: introduce service cores concept")

Reported-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
Suggested-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Suggested-by: Morten Brørup <mb@smartsharesystems.com>
Suggested-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
2022-10-05 15:44:48 +02:00
..
acl version: 22.11-rc0 2022-07-21 12:13:48 +02:00
bbdev version: 22.11-rc0 2022-07-21 12:13:48 +02:00
bitratestats version: 22.11-rc0 2022-07-21 12:13:48 +02:00
bpf eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
cfgfile version: 22.11-rc0 2022-07-21 12:13:48 +02:00
cmdline version: 22.11-rc0 2022-07-21 12:13:48 +02:00
compressdev dev: hide driver object 2022-09-23 16:14:34 +02:00
cryptodev security: hide session structure 2022-10-04 22:37:54 +02:00
distributor eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
dmadev dmadev: support telemetry dump dmadev 2022-10-03 12:03:36 +02:00
eal service: fix stats race condition for MT safe service 2022-10-05 15:44:48 +02:00
efd eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
ethdev ethdev: support telemetry private dump 2022-10-03 12:03:36 +02:00
eventdev eventdev: introduce event cryptodev vector type 2022-10-02 20:33:24 +02:00
fib version: 22.11-rc0 2022-07-21 12:13:48 +02:00
flow_classify lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
gpudev dev: hide driver object 2022-09-23 16:14:34 +02:00
graph eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
gro gro: fix chain index for more than 2 packets 2022-10-05 14:16:37 +02:00
gso version: 22.11-rc0 2022-07-21 12:13:48 +02:00
hash version: 22.11-rc0 2022-07-21 12:13:48 +02:00
ip_frag ip_frag: add IPv4 fragment copy 2022-08-29 16:24:18 +02:00
ipsec security: hide session structure 2022-10-04 22:37:54 +02:00
jobstats version: 22.11-rc0 2022-07-21 12:13:48 +02:00
kni version: 22.11-rc0 2022-07-21 12:13:48 +02:00
kvargs version: 22.11-rc0 2022-07-21 12:13:48 +02:00
latencystats version: 22.11-rc0 2022-07-21 12:13:48 +02:00
lpm version: 22.11-rc0 2022-07-21 12:13:48 +02:00
mbuf mem: fix API doc about allocation on secondary processes 2022-10-04 13:36:13 +02:00
member version: 22.11-rc0 2022-07-21 12:13:48 +02:00
mempool mem: fix API doc about allocation on secondary processes 2022-10-04 13:36:13 +02:00
meter eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
metrics metrics: return error code on initialization failures 2022-10-03 12:03:36 +02:00
net net: fix build with -Wpedantic 2022-09-29 09:20:12 +02:00
node eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
pcapng dev: hide driver object 2022-09-23 16:14:34 +02:00
pci eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
pdump eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
pipeline cryptodev: rework session framework 2022-10-04 22:04:59 +02:00
port port: prevent unnecessary flush for ring output port 2022-09-22 16:56:58 +02:00
power eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
rawdev rawdev: support telemetry dump rawdev 2022-10-03 12:03:36 +02:00
rcu version: 22.11-rc0 2022-07-21 12:13:48 +02:00
regexdev eal: deprecate RTE_FUNC_PTR_* macros 2022-09-23 16:14:34 +02:00
reorder version: 22.11-rc0 2022-07-21 12:13:48 +02:00
rib version: 22.11-rc0 2022-07-21 12:13:48 +02:00
ring mem: fix API doc about allocation on secondary processes 2022-10-04 13:36:13 +02:00
sched eal: remove unneeded includes from a public header 2022-09-21 15:31:03 +02:00
security security: hide session structure 2022-10-04 22:37:54 +02:00
stack version: 22.11-rc0 2022-07-21 12:13:48 +02:00
table table: add entry ID for learner tables 2022-09-24 11:35:23 +02:00
telemetry telemetry: make help command more helpful 2022-09-26 13:49:38 +02:00
timer timer: fix stopping all timers 2022-10-05 15:29:54 +02:00
vhost cryptodev: rework session framework 2022-10-04 22:04:59 +02:00
meson.build build: add definitions for use as Meson subproject 2022-06-07 20:49:20 +02:00