From d2b68f37073e94fb9e610581547b4515c06716e5 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Sat, 12 Jan 2008 21:23:17 -0800 Subject: [PATCH] --- yaml --- r: 78779 b: refs/heads/master c: 66a2f7fd2fddee1ddc5d1d286cd832e50a97258e h: refs/heads/master i: 78777: 8417f818e3dcf138c135170e24b80f1f0af6f781 78775: 2c5aac9bbbe43088c16cce0da96ee5de183855c5 v: v3 --- [refs] | 2 +- trunk/net/ipv4/Kconfig | 7 +++++++ trunk/net/ipv4/fib_trie.c | 31 +++++++++++++++++++------------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index e14dccdef2a5..2911c4bd6774 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a6db9010922f2c02db2bbea8c17c50e451be38d9 +refs/heads/master: 66a2f7fd2fddee1ddc5d1d286cd832e50a97258e diff --git a/trunk/net/ipv4/Kconfig b/trunk/net/ipv4/Kconfig index 9f9fd2c6f6e2..24e2b7294bf8 100644 --- a/trunk/net/ipv4/Kconfig +++ b/trunk/net/ipv4/Kconfig @@ -85,6 +85,13 @@ endchoice config IP_FIB_HASH def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER +config IP_FIB_TRIE_STATS + bool "FIB TRIE statistics" + depends on IP_FIB_TRIE + ---help--- + Keep track of statistics on structure of FIB TRIE table. + Useful for testing and measuring TRIE performance. + config IP_MULTIPLE_TABLES bool "IP: policy routing" depends on IP_ADVANCED_ROUTER diff --git a/trunk/net/ipv4/fib_trie.c b/trunk/net/ipv4/fib_trie.c index e047de6873bd..2075eea7eea7 100644 --- a/trunk/net/ipv4/fib_trie.c +++ b/trunk/net/ipv4/fib_trie.c @@ -82,7 +82,6 @@ #include #include "fib_lookup.h" -#undef CONFIG_IP_FIB_TRIE_STATS #define MAX_STAT_DEPTH 32 #define KEYLENGTH (8*sizeof(t_key)) @@ -2119,20 +2118,22 @@ static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat) bytes += sizeof(struct node *) * pointers; seq_printf(seq, "Null ptrs: %u\n", stat->nullpointers); seq_printf(seq, "Total size: %u kB\n", (bytes + 1023) / 1024); +} #ifdef CONFIG_IP_FIB_TRIE_STATS - seq_printf(seq, "Counters:\n---------\n"); - seq_printf(seq,"gets = %d\n", t->stats.gets); - seq_printf(seq,"backtracks = %d\n", t->stats.backtrack); - seq_printf(seq,"semantic match passed = %d\n", t->stats.semantic_match_passed); - seq_printf(seq,"semantic match miss = %d\n", t->stats.semantic_match_miss); - seq_printf(seq,"null node hit= %d\n", t->stats.null_node_hit); - seq_printf(seq,"skipped node resize = %d\n", t->stats.resize_node_skipped); -#ifdef CLEAR_STATS - memset(&(t->stats), 0, sizeof(t->stats)); -#endif -#endif /* CONFIG_IP_FIB_TRIE_STATS */ +static void trie_show_usage(struct seq_file *seq, + const struct trie_use_stats *stats) +{ + seq_printf(seq, "\nCounters:\n---------\n"); + seq_printf(seq,"gets = %u\n", stats->gets); + seq_printf(seq,"backtracks = %u\n", stats->backtrack); + seq_printf(seq,"semantic match passed = %u\n", stats->semantic_match_passed); + seq_printf(seq,"semantic match miss = %u\n", stats->semantic_match_miss); + seq_printf(seq,"null node hit= %u\n", stats->null_node_hit); + seq_printf(seq,"skipped node resize = %u\n\n", stats->resize_node_skipped); } +#endif /* CONFIG_IP_FIB_TRIE_STATS */ + static int fib_triestat_seq_show(struct seq_file *seq, void *v) { @@ -2163,12 +2164,18 @@ static int fib_triestat_seq_show(struct seq_file *seq, void *v) seq_printf(seq, "Local:\n"); trie_collect_stats(trie_local, stat); trie_show_stats(seq, stat); +#ifdef CONFIG_IP_FIB_TRIE_STATS + trie_show_usage(seq, &trie_local->stats); +#endif } if (trie_main) { seq_printf(seq, "Main:\n"); trie_collect_stats(trie_main, stat); trie_show_stats(seq, stat); +#ifdef CONFIG_IP_FIB_TRIE_STATS + trie_show_usage(seq, &trie_main->stats); +#endif } kfree(stat);