service: avoid false sharing on core state
authorNikhil Rao <nikhil.rao@intel.com>
Mon, 16 Sep 2019 10:01:02 +0000 (15:31 +0530)
committerDavid Marchand <david.marchand@redhat.com>
Fri, 18 Oct 2019 04:09:24 +0000 (06:09 +0200)
commite484ccddbe1b41886fef1e445ef2fdfa55086198
treefb9a186d3bb66825f7b48cb4c3e6f62e4d1055ef
parentc1077933d45b2bb6b8721746e63f5a125bd2353a
service: avoid false sharing on core state

For a valid service, the core mask of the service
is checked against the current core and the corresponding
entry in the active_on_lcore array is set or reset.

Upto 8 cores share the same cache line for their
service active_on_lcore array entries since each entry is a uint8_t.
Some number of these entries also share the cache line with
the internal_flags member of struct rte_service_spec_impl,
hence this false sharing also makes the service_valid() check
expensive.

Eliminate false sharing by moving the active_on_lcore array to
a per-core data structure. The array is now indexed by service id.

Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
Acked-by: Gage Eads <gage.eads@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
lib/librte_eal/common/rte_service.c