Morten Brørup
b77f58604a
mempool: align cache objects on cache lines
Add __rte_cache_aligned to the objs array.
It makes no difference in the general case, but if get/put operations are
always 32 objects, it will reduce the number of memory (or last level
cache) accesses from five to four 64 B cache lines for every get/put
operation.
For readability reasons, an example using 16 objects follows:
Currently, with 16 objects (128B), we access to 3
cache lines:
┌────────┐
│len │
cache │********│---
line0 │********│ ^
│********│ |
├────────┤ | 16 objects
│********│ | 128B
cache │********│ |
line1 │********│ |
│********│ |
├────────┤ |
│********│_v_
cache │ │
line2 │ │
│ │
└────────┘
With the alignment, it is also 3 cache lines:
┌────────┐
│len │
cache │ │
line0 │ │
│ │
├────────┤---
│********│ ^
cache │********│ |
line1 │********│ |
│********│ |
├────────┤ | 16 objects
│********│ | 128B
cache │********│ |
line2 │********│ |
│********│ v
└────────┘---
However, accessing the objects at the bottom of the mempool cache is a
special case, where cache line0 is also used for objects.
Consider the next burst (and any following bursts):
Current:
┌────────┐
│len │
cache │ │
line0 │ │
│ │
├────────┤
│ │
cache │ │
line1 │ │
│ │
├────────┤
│ │
cache │********│---
line2 │********│ ^
│********│ |
├────────┤ | 16 objects
│********│ | 128B
cache │********│ |
line3 │********│ |
│********│ |
├────────┤ |
│********│_v_
cache │ │
line4 │ │
│ │
└────────┘
4 cache lines touched, incl. line0 for len.
With the proposed alignment:
┌────────┐
│len │
cache │ │
line0 │ │
│ │
├────────┤
│ │
cache │ │
line1 │ │
│ │
├────────┤
│ │
cache │ │
line2 │ │
│ │
├────────┤
│********│---
cache │********│ ^
line3 │********│ |
│********│ | 16 objects
├────────┤ | 128B
│********│ |
cache │********│ |
line4 │********│ |
│********│_v_
└────────┘
Only 3 cache lines touched, incl. line0 for len.
Credits go to Olivier Matz for the nice ASCII graphics.
Signed-off-by: Morten Brørup <mb@smartsharesystems.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
2022-10-30 10:07:58 +01:00
..
2022-07-21 12:13:48 +02:00
2022-10-11 01:34:07 +02:00
2022-07-21 12:13:48 +02:00
2022-09-21 15:31:03 +02:00
2022-07-21 12:13:48 +02:00
2022-07-21 12:13:48 +02:00
2022-09-23 16:14:34 +02:00
2022-10-04 22:37:54 +02:00
2022-09-21 15:31:03 +02:00
2022-10-03 12:03:36 +02:00
2022-10-27 13:00:11 +02:00
2022-09-21 15:31:03 +02:00
2022-10-28 12:41:03 +02:00
2022-10-21 11:42:08 +02:00
2022-10-26 17:51:51 +02:00
2022-10-28 16:20:59 +02:00
2022-09-23 16:14:34 +02:00
2022-10-10 17:30:39 +02:00
2022-10-26 17:18:11 +02:00
2022-07-21 12:13:48 +02:00
2022-10-26 17:51:51 +02:00
2022-08-29 16:24:18 +02:00
2022-10-26 17:51:51 +02:00
2022-07-21 12:13:48 +02:00
2022-10-10 17:04:09 +02:00
2022-07-21 12:13:48 +02:00
2022-07-21 12:13:48 +02:00
2022-10-26 17:51:51 +02:00
2022-10-09 13:14:57 +02:00
2022-10-10 12:20:01 +02:00
2022-10-30 10:07:58 +01:00
2022-09-21 15:31:03 +02:00
2022-10-03 12:03:36 +02:00
2022-09-29 09:20:12 +02:00
2022-10-10 17:53:12 +02:00
2022-10-27 10:29:59 +02:00
2022-09-21 15:31:03 +02:00
2022-10-21 14:54:26 +02:00
2022-10-08 23:58:26 +02:00
2022-09-22 16:56:58 +02:00
2022-10-26 23:36:56 +02:00
2022-10-03 12:03:36 +02:00
2022-10-06 12:37:11 +02:00
2022-10-09 14:54:30 +02:00
2022-10-26 17:51:51 +02:00
2022-10-26 17:51:51 +02:00
2022-10-04 13:36:13 +02:00
2022-10-28 16:20:59 +02:00
2022-10-04 22:37:54 +02:00
2022-07-21 12:13:48 +02:00
2022-09-24 11:35:23 +02:00
2022-09-26 13:49:38 +02:00
2022-10-05 15:29:54 +02:00
2022-10-26 11:11:03 +02:00
2022-10-28 16:20:59 +02:00