table: improve lookup performance with prefetch offset
[dpdk.git] / lib / librte_table / rte_table_hash_ext.c
index 1fa15c8..e283a3d 100644 (file)
@@ -648,6 +648,7 @@ static int rte_table_hash_ext_lookup_unoptimized(
 {                                                                      \
        uint64_t pkt00_mask, pkt01_mask;                                \
        struct rte_mbuf *mbuf00, *mbuf01;                               \
+       uint32_t key_offset = t->key_offset;                    \
                                                                        \
        pkt00_index = __builtin_ctzll(pkts_mask);                       \
        pkt00_mask = 1LLU << pkt00_index;                               \
@@ -659,8 +660,8 @@ static int rte_table_hash_ext_lookup_unoptimized(
        pkts_mask &= ~pkt01_mask;                                       \
        mbuf01 = pkts[pkt01_index];                                     \
                                                                        \
-       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf00, 0));          \
-       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf01, 0));          \
+       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf00, key_offset));\
+       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf01, key_offset));\
 }
 
 #define lookup2_stage0_with_odd_support(t, g, pkts, pkts_mask, pkt00_index, \
@@ -668,6 +669,7 @@ static int rte_table_hash_ext_lookup_unoptimized(
 {                                                                      \
        uint64_t pkt00_mask, pkt01_mask;                                \
        struct rte_mbuf *mbuf00, *mbuf01;                               \
+       uint32_t key_offset = t->key_offset;                    \
                                                                        \
        pkt00_index = __builtin_ctzll(pkts_mask);                       \
        pkt00_mask = 1LLU << pkt00_index;                               \
@@ -681,8 +683,8 @@ static int rte_table_hash_ext_lookup_unoptimized(
        pkts_mask &= ~pkt01_mask;                                       \
        mbuf01 = pkts[pkt01_index];                                     \
                                                                        \
-       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf00, 0));          \
-       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf01, 0));          \
+       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf00, key_offset));\
+       rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf01, key_offset));\
 }
 
 #define lookup2_stage1(t, g, pkts, pkt10_index, pkt11_index)           \
@@ -1139,6 +1141,8 @@ struct rte_table_ops rte_table_hash_ext_ops        = {
        .f_free = rte_table_hash_ext_free,
        .f_add = rte_table_hash_ext_entry_add,
        .f_delete = rte_table_hash_ext_entry_delete,
+       .f_add_bulk = NULL,
+       .f_delete_bulk = NULL,
        .f_lookup = rte_table_hash_ext_lookup,
        .f_stats = rte_table_hash_ext_stats_read,
 };
@@ -1148,6 +1152,8 @@ struct rte_table_ops rte_table_hash_ext_dosig_ops  = {
        .f_free = rte_table_hash_ext_free,
        .f_add = rte_table_hash_ext_entry_add,
        .f_delete = rte_table_hash_ext_entry_delete,
+       .f_add_bulk = NULL,
+       .f_delete_bulk = NULL,
        .f_lookup = rte_table_hash_ext_lookup_dosig,
        .f_stats = rte_table_hash_ext_stats_read,
 };