aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/Kconfig7
-rw-r--r--net/ipv4/fib_trie.c31
2 files changed, 26 insertions, 12 deletions
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
index 9f9fd2c6f6e2..24e2b7294bf8 100644
--- a/net/ipv4/Kconfig
+++ b/net/ipv4/Kconfig
@@ -85,6 +85,13 @@ endchoice
85config IP_FIB_HASH 85config IP_FIB_HASH
86 def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER 86 def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER
87 87
88config IP_FIB_TRIE_STATS
89 bool "FIB TRIE statistics"
90 depends on IP_FIB_TRIE
91 ---help---
92 Keep track of statistics on structure of FIB TRIE table.
93 Useful for testing and measuring TRIE performance.
94
88config IP_MULTIPLE_TABLES 95config IP_MULTIPLE_TABLES
89 bool "IP: policy routing" 96 bool "IP: policy routing"
90 depends on IP_ADVANCED_ROUTER 97 depends on IP_ADVANCED_ROUTER
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index e047de6873bd..2075eea7eea7 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -82,7 +82,6 @@
82#include <net/ip_fib.h> 82#include <net/ip_fib.h>
83#include "fib_lookup.h" 83#include "fib_lookup.h"
84 84
85#undef CONFIG_IP_FIB_TRIE_STATS
86#define MAX_STAT_DEPTH 32 85#define MAX_STAT_DEPTH 32
87 86
88#define KEYLENGTH (8*sizeof(t_key)) 87#define KEYLENGTH (8*sizeof(t_key))
@@ -2119,20 +2118,22 @@ static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat)
2119 bytes += sizeof(struct node *) * pointers; 2118 bytes += sizeof(struct node *) * pointers;
2120 seq_printf(seq, "Null ptrs: %u\n", stat->nullpointers); 2119 seq_printf(seq, "Null ptrs: %u\n", stat->nullpointers);
2121 seq_printf(seq, "Total size: %u kB\n", (bytes + 1023) / 1024); 2120 seq_printf(seq, "Total size: %u kB\n", (bytes + 1023) / 1024);
2121}
2122 2122
2123#ifdef CONFIG_IP_FIB_TRIE_STATS 2123#ifdef CONFIG_IP_FIB_TRIE_STATS
2124 seq_printf(seq, "Counters:\n---------\n"); 2124static void trie_show_usage(struct seq_file *seq,
2125 seq_printf(seq,"gets = %d\n", t->stats.gets); 2125 const struct trie_use_stats *stats)
2126 seq_printf(seq,"backtracks = %d\n", t->stats.backtrack); 2126{
2127 seq_printf(seq,"semantic match passed = %d\n", t->stats.semantic_match_passed); 2127 seq_printf(seq, "\nCounters:\n---------\n");
2128 seq_printf(seq,"semantic match miss = %d\n", t->stats.semantic_match_miss); 2128 seq_printf(seq,"gets = %u\n", stats->gets);
2129 seq_printf(seq,"null node hit= %d\n", t->stats.null_node_hit); 2129 seq_printf(seq,"backtracks = %u\n", stats->backtrack);
2130 seq_printf(seq,"skipped node resize = %d\n", t->stats.resize_node_skipped); 2130 seq_printf(seq,"semantic match passed = %u\n", stats->semantic_match_passed);
2131#ifdef CLEAR_STATS 2131 seq_printf(seq,"semantic match miss = %u\n", stats->semantic_match_miss);
2132 memset(&(t->stats), 0, sizeof(t->stats)); 2132 seq_printf(seq,"null node hit= %u\n", stats->null_node_hit);
2133#endif 2133 seq_printf(seq,"skipped node resize = %u\n\n", stats->resize_node_skipped);
2134#endif /* CONFIG_IP_FIB_TRIE_STATS */
2135} 2134}
2135#endif /* CONFIG_IP_FIB_TRIE_STATS */
2136
2136 2137
2137static int fib_triestat_seq_show(struct seq_file *seq, void *v) 2138static int fib_triestat_seq_show(struct seq_file *seq, void *v)
2138{ 2139{
@@ -2163,12 +2164,18 @@ static int fib_triestat_seq_show(struct seq_file *seq, void *v)
2163 seq_printf(seq, "Local:\n"); 2164 seq_printf(seq, "Local:\n");
2164 trie_collect_stats(trie_local, stat); 2165 trie_collect_stats(trie_local, stat);
2165 trie_show_stats(seq, stat); 2166 trie_show_stats(seq, stat);
2167#ifdef CONFIG_IP_FIB_TRIE_STATS
2168 trie_show_usage(seq, &trie_local->stats);
2169#endif
2166 } 2170 }
2167 2171
2168 if (trie_main) { 2172 if (trie_main) {
2169 seq_printf(seq, "Main:\n"); 2173 seq_printf(seq, "Main:\n");
2170 trie_collect_stats(trie_main, stat); 2174 trie_collect_stats(trie_main, stat);
2171 trie_show_stats(seq, stat); 2175 trie_show_stats(seq, stat);
2176#ifdef CONFIG_IP_FIB_TRIE_STATS
2177 trie_show_usage(seq, &trie_main->stats);
2178#endif
2172 } 2179 }
2173 kfree(stat); 2180 kfree(stat);
2174 2181