diff options
| author | Lu Qiuwen <[email protected]> | 2023-10-26 17:54:52 +0800 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2023-10-26 17:54:52 +0800 |
| commit | fa6b5d694fb1f0e32123ddef37e8a253751b7e60 (patch) | |
| tree | 62c37162a6529189a70dbc419ff5590accd4d35f /include | |
| parent | 751e5173f85fb6be3786fa2bbd8e589092862ad3 (diff) | |
perf: set the priv_size to 128 bytes to prefetch, clear the mrb_metadata by AVX/SSE.
Diffstat (limited to 'include')
| -rw-r--r-- | include/internal/mrb_define.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/internal/mrb_define.h b/include/internal/mrb_define.h index 767ab70..1063ef7 100644 --- a/include/internal/mrb_define.h +++ b/include/internal/mrb_define.h @@ -52,6 +52,25 @@ struct mrb_metadata struct pkt_parser_result pkt_parser_result; } __rte_cache_aligned; +static inline void mrb_metadata_clear(struct mrb_metadata * mrb_meta) +{ + static_assert(sizeof(struct mrb_metadata) == 128, "mrb_metadata size is not 128 bytes"); + +#if __AVX512F__ + __m512i zero = _mm512_setzero_si512(); + _mm512_store_si512((__m512i *)mrb_meta + 0, zero); + _mm512_store_si512((__m512i *)mrb_meta + 1, zero); +#elif __AVX2__ + __m256i zero = _mm256_setzero_si256(); + _mm256_store_si256((__m256i *)mrb_meta + 0, zero); + _mm256_store_si256((__m256i *)mrb_meta + 1, zero); + _mm256_store_si256((__m256i *)mrb_meta + 2, zero); + _mm256_store_si256((__m256i *)mrb_meta + 3, zero); +#else + memset(mrb_meta, 0, sizeof(struct mrb_metadata)); +#endif +} + #define MR_NODE_CTRLZONE_ID 1 struct mrb_priv_zone |
