From: Kamil Vojanec <vojanec@cesnet.cz>
To: dev@dpdk.org
Cc: Kamil Vojanec <vojanec@cesnet.cz>,
Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Subject: [RFC] table: report victim replace stats in LRU tables
Date: Mon, 19 Aug 2024 07:23:30 +0200 [thread overview]
Message-ID: <20240819052330.46122-1-vojanec@cesnet.cz> (raw)
In-Reply-To: <20240816115848.432547-1-vojanec@cesnet.cz>
LRU caches replace records when requested table bucket is full. There
is, however, no information about this happening in either the return
value or the statistics. This commit introduces a counter for such
cases.
Signed-off-by: Kamil Vojanec <vojanec@cesnet.cz>
---
lib/table/rte_table.h | 1 +
lib/table/rte_table_hash_key16.c | 4 ++++
lib/table/rte_table_hash_key32.c | 4 ++++
lib/table/rte_table_hash_key8.c | 4 ++++
lib/table/rte_table_hash_lru.c | 4 ++++
5 files changed, 17 insertions(+)
diff --git a/lib/table/rte_table.h b/lib/table/rte_table.h
index 9a5faf0e32..e097e25868 100644
--- a/lib/table/rte_table.h
+++ b/lib/table/rte_table.h
@@ -33,6 +33,7 @@ struct rte_mbuf;
struct rte_table_stats {
uint64_t n_pkts_in;
uint64_t n_pkts_lookup_miss;
+ uint64_t n_pkts_insert_victims;
};
/**
diff --git a/lib/table/rte_table_hash_key16.c b/lib/table/rte_table_hash_key16.c
index 67b77c16a0..bebaec8f71 100644
--- a/lib/table/rte_table_hash_key16.c
+++ b/lib/table/rte_table_hash_key16.c
@@ -27,11 +27,14 @@
table->stats.n_pkts_in += val
#define RTE_TABLE_HASH_KEY16_STATS_PKTS_LOOKUP_MISS(table, val) \
table->stats.n_pkts_lookup_miss += val
+#define RTE_TABLE_HASH_KEY16_STATS_PKTS_INSERT_VICTIMS_ADD(table, val) \
+ (table->stats.n_pkts_insert_victims += val)
#else
#define RTE_TABLE_HASH_KEY16_STATS_PKTS_IN_ADD(table, val)
#define RTE_TABLE_HASH_KEY16_STATS_PKTS_LOOKUP_MISS(table, val)
+#define RTE_TABLE_HASH_KEY16_STATS_PKTS_INSERT_VICTIMS_ADD(table, val)
#endif
@@ -304,6 +307,7 @@ rte_table_hash_entry_add_key16_lru(
}
/* Bucket full: replace LRU entry */
+ RTE_TABLE_HASH_KEY16_STATS_PKTS_INSERT_VICTIMS_ADD(f, 1);
pos = lru_pos(bucket);
bucket->signature[pos] = signature;
keycpy(&bucket->key[pos], key, f->key_mask);
diff --git a/lib/table/rte_table_hash_key32.c b/lib/table/rte_table_hash_key32.c
index 1aa86c6a49..29ef61249b 100644
--- a/lib/table/rte_table_hash_key32.c
+++ b/lib/table/rte_table_hash_key32.c
@@ -27,11 +27,14 @@
table->stats.n_pkts_in += val
#define RTE_TABLE_HASH_KEY32_STATS_PKTS_LOOKUP_MISS(table, val) \
table->stats.n_pkts_lookup_miss += val
+#define RTE_TABLE_HASH_KEY32_STATS_PKTS_INSERT_VICTIMS_ADD(table, val) \
+ (table->stats.n_pkts_insert_victims += val)
#else
#define RTE_TABLE_HASH_KEY32_STATS_PKTS_IN_ADD(table, val)
#define RTE_TABLE_HASH_KEY32_STATS_PKTS_LOOKUP_MISS(table, val)
+#define RTE_TABLE_HASH_KEY32_STATS_PKTS_INSERT_VICTIMS_ADD(table, val)
#endif
@@ -312,6 +315,7 @@ rte_table_hash_entry_add_key32_lru(
}
/* Bucket full: replace LRU entry */
+ RTE_TABLE_HASH_KEY32_STATS_PKTS_INSERT_VICTIMS_ADD(f, 1);
pos = lru_pos(bucket);
bucket->signature[pos] = signature;
keycpy(&bucket->key[pos], key, f->key_mask);
diff --git a/lib/table/rte_table_hash_key8.c b/lib/table/rte_table_hash_key8.c
index c8d72b333d..187acb5e24 100644
--- a/lib/table/rte_table_hash_key8.c
+++ b/lib/table/rte_table_hash_key8.c
@@ -25,11 +25,14 @@
table->stats.n_pkts_in += val
#define RTE_TABLE_HASH_KEY8_STATS_PKTS_LOOKUP_MISS(table, val) \
table->stats.n_pkts_lookup_miss += val
+#define RTE_TABLE_HASH_KEY8_STATS_PKTS_INSERT_VICTIMS_ADD(table, val) \
+ (table->stats.n_pkts_insert_victims += val)
#else
#define RTE_TABLE_HASH_KEY8_STATS_PKTS_IN_ADD(table, val)
#define RTE_TABLE_HASH_KEY8_STATS_PKTS_LOOKUP_MISS(table, val)
+#define RTE_TABLE_HASH_KEY8_STATS_PKTS_INSERT_VICTIMS_ADD(table, val)
#endif
@@ -292,6 +295,7 @@ rte_table_hash_entry_add_key8_lru(
}
/* Bucket full: replace LRU entry */
+ RTE_TABLE_HASH_KEY8_STATS_PKTS_INSERT_VICTIMS_ADD(f, 1);
pos = lru_pos(bucket);
keycpy(&bucket->key[pos], key, &f->key_mask);
memcpy(&bucket->data[pos * f->entry_size], entry, f->entry_size);
diff --git a/lib/table/rte_table_hash_lru.c b/lib/table/rte_table_hash_lru.c
index 801e48f5ba..f4d07bc4e0 100644
--- a/lib/table/rte_table_hash_lru.c
+++ b/lib/table/rte_table_hash_lru.c
@@ -23,11 +23,14 @@
table->stats.n_pkts_in += val
#define RTE_TABLE_HASH_LRU_STATS_PKTS_LOOKUP_MISS(table, val) \
table->stats.n_pkts_lookup_miss += val
+#define RTE_TABLE_HASH_LRU_STATS_PKTS_INSERT_VICTIMS_ADD(table, val) \
+ (table->stats.n_pkts_insert_victims += val)
#else
#define RTE_TABLE_HASH_LRU_STATS_PKTS_IN_ADD(table, val)
#define RTE_TABLE_HASH_LRU_STATS_PKTS_LOOKUP_MISS(table, val)
+#define RTE_TABLE_HASH_LRU_STATS_PKTS_INSERT_VICTIMS_ADD(table, val)
#endif
@@ -340,6 +343,7 @@ rte_table_hash_lru_entry_add(void *table, void *key, void *entry,
/* Bucket full */
{
+ RTE_TABLE_HASH_LRU_STATS_PKTS_INSERT_VICTIMS_ADD(t, 1);
uint64_t pos = lru_pos(bkt);
uint32_t bkt_key_index = bkt->key_pos[pos];
uint8_t *bkt_key = &t->key_mem[bkt_key_index <<
--
2.43.5
next prev parent reply other threads:[~2024-08-19 5:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 11:58 Kamil Vojanec
2024-08-19 5:23 ` Kamil Vojanec [this message]
2024-10-12 2:57 ` Stephen Hemminger
2024-10-13 1:19 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240819052330.46122-1-vojanec@cesnet.cz \
--to=vojanec@cesnet.cz \
--cc=cristian.dumitrescu@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).