summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2023-10-26 17:54:52 +0800
committerLu Qiuwen <[email protected]>2023-10-26 17:54:52 +0800
commitfa6b5d694fb1f0e32123ddef37e8a253751b7e60 (patch)
tree62c37162a6529189a70dbc419ff5590accd4d35f /include
parent751e5173f85fb6be3786fa2bbd8e589092862ad3 (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.h19
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