* [RFC] table: report victim replace stats in LRU tables
@ 2024-08-16 11:58 Kamil Vojanec
2024-08-19 5:23 ` Kamil Vojanec
0 siblings, 1 reply; 4+ messages in thread
From: Kamil Vojanec @ 2024-08-16 11:58 UTC (permalink / raw)
To: dev; +Cc: viktorin, Kamil Vojanec, Cristian Dumitrescu
LRU caches replace records when requested table bucket is full. There
is, however, no information about this happenning 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..f97d9c1266 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..37ad87bb85 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..c5722f3709 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..bcf9c34f8e 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
^ permalink raw reply [flat|nested] 4+ messages in thread
* [RFC] table: report victim replace stats in LRU tables
2024-08-16 11:58 [RFC] table: report victim replace stats in LRU tables Kamil Vojanec
@ 2024-08-19 5:23 ` Kamil Vojanec
2024-10-12 2:57 ` Stephen Hemminger
2024-10-13 1:19 ` Stephen Hemminger
0 siblings, 2 replies; 4+ messages in thread
From: Kamil Vojanec @ 2024-08-19 5:23 UTC (permalink / raw)
To: dev; +Cc: Kamil Vojanec, Cristian Dumitrescu
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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC] table: report victim replace stats in LRU tables
2024-08-19 5:23 ` Kamil Vojanec
@ 2024-10-12 2:57 ` Stephen Hemminger
2024-10-13 1:19 ` Stephen Hemminger
1 sibling, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2024-10-12 2:57 UTC (permalink / raw)
To: Kamil Vojanec; +Cc: dev, Cristian Dumitrescu
On Mon, 19 Aug 2024 07:23:30 +0200
Kamil Vojanec <vojanec@cesnet.cz> wrote:
> 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>
Good concept, but needs work. Lots of trivial checkpatch stuff and
fails testing on 32 bit ARM might be infrastructure issue.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC] table: report victim replace stats in LRU tables
2024-08-19 5:23 ` Kamil Vojanec
2024-10-12 2:57 ` Stephen Hemminger
@ 2024-10-13 1:19 ` Stephen Hemminger
1 sibling, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2024-10-13 1:19 UTC (permalink / raw)
To: Kamil Vojanec; +Cc: dev, Cristian Dumitrescu
On Mon, 19 Aug 2024 07:23:30 +0200
Kamil Vojanec <vojanec@cesnet.cz> wrote:
> 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;
> };
>
This ABI change so it needs a release note, and has to targeted
at a LTS release, too late for 24.11; so would end up getting deferred
until 25.11..
When you send followup please reply-to the initial RFC message id
with "PATCH v3"
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-10-13 1:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-16 11:58 [RFC] table: report victim replace stats in LRU tables Kamil Vojanec
2024-08-19 5:23 ` Kamil Vojanec
2024-10-12 2:57 ` Stephen Hemminger
2024-10-13 1:19 ` Stephen Hemminger
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).