42
42
#include "ib.h"
43
43
#include "rds_single_path.h"
44
44
45
+ static struct dentry * debugfs_basedir ;
46
+
45
47
unsigned int rds_ib_fmr_1m_pool_size = RDS_FMR_1M_POOL_SIZE ;
46
48
unsigned int rds_ib_fmr_8k_pool_size = RDS_FMR_8K_POOL_SIZE ;
47
49
unsigned int rds_ib_retry_count = RDS_IB_DEFAULT_RETRY_COUNT ;
@@ -103,32 +105,50 @@ static int ib_rds_cache_hit_show(struct seq_file *m, void *v)
103
105
struct rds_ib_refill_cache * cache ;
104
106
struct rds_ib_cache_head * head ;
105
107
unsigned long long miss , hit ;
108
+ u32 cnt ;
106
109
int i ;
107
110
int cpu ;
108
111
u64 sum_get_stats [(RDS_FRAG_CACHE_ENTRIES + 1 )];
109
112
u64 sum_hit_stats [(RDS_FRAG_CACHE_ENTRIES + 1 )];
113
+ u32 sum_cnt_stats [(RDS_FRAG_CACHE_ENTRIES + 1 )];
110
114
char heading [(RDS_FRAG_CACHE_ENTRIES + 1 )][40 ];
111
115
112
- sprintf (heading [0 ], "---------- Inc ----------" );
116
+ sprintf (heading [0 ], "------------- Inc --- ----------" );
113
117
for (i = 1 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ )
114
- sprintf (heading [i ], "---------- Frag-%d ----------" , i - 1 );
118
+ sprintf (heading [i ], "------------- Frag-%d --- ----------" , i - 1 );
115
119
116
120
seq_printf (m , "%11s" , " " );
117
121
for (i = 0 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ ) {
118
- seq_printf (m , "%35s " , heading [i ]);
122
+ seq_printf (m , "%41s " , heading [i ]);
119
123
120
124
sum_get_stats [i ] = 0 ;
121
125
sum_hit_stats [i ] = 0 ;
126
+ sum_cnt_stats [i ] = 0 ;
122
127
}
123
128
seq_puts (m , "\n" );
124
129
125
130
seq_printf (m , "%11s" , "cpu" );
126
131
for (i = 0 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ )
127
- seq_printf (m , "%15s %15s %4s" , "Get" , "Hit" , "%" );
132
+ seq_printf (m , "%15s %15s %4s %5s " , "Get" , "Hit" , "%" , "Count " );
128
133
129
134
seq_puts (m , "\n" );
130
135
131
136
for_each_possible_cpu (cpu ) {
137
+ u64 s = 0 ;
138
+
139
+ for (i = 0 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ ) {
140
+ if (i == 0 )
141
+ cache = & rds_ibdev -> i_cache_incs ;
142
+ else
143
+ cache = rds_ibdev -> i_cache_frags + i - 1 ;
144
+ head = per_cpu_ptr (cache -> percpu , cpu );
145
+ s += atomic64_read (& head -> miss_count );
146
+ s += atomic64_read (& head -> hit_count );
147
+ s += atomic_read (& head -> count );
148
+ }
149
+ if (!s )
150
+ continue ;
151
+
132
152
seq_printf (m , "%3d " , cpu );
133
153
for (i = 0 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ ) {
134
154
if (i == 0 )
@@ -138,23 +158,25 @@ static int ib_rds_cache_hit_show(struct seq_file *m, void *v)
138
158
head = per_cpu_ptr (cache -> percpu , cpu );
139
159
miss = atomic64_read (& head -> miss_count );
140
160
hit = atomic64_read (& head -> hit_count );
141
-
142
- seq_printf (m , "%15llu %15llu %4llu" ,
161
+ cnt = atomic_read ( & head -> count );
162
+ seq_printf (m , "%15llu %15llu %4llu %5u " ,
143
163
(hit + miss ),
144
164
hit ,
145
- (hit + miss ) ? hit * 100 / (hit + miss ) : 0 );
165
+ (hit + miss ) ? hit * 100 / (hit + miss ) : 0 , cnt );
146
166
sum_get_stats [i ] += (hit + miss );
147
167
sum_hit_stats [i ] += hit ;
168
+ sum_cnt_stats [i ] += cnt ;
148
169
}
149
170
seq_puts (m , "\n" );
150
171
}
151
172
seq_puts (m , "sum " );
152
173
153
174
for (i = 0 ; i <= RDS_FRAG_CACHE_ENTRIES ; i ++ ) {
154
- seq_printf (m , "%15llu %15llu %4llu" ,
175
+ seq_printf (m , "%15llu %15llu %4llu %5u " ,
155
176
sum_get_stats [i ],
156
177
sum_hit_stats [i ],
157
- sum_get_stats [i ] ? sum_hit_stats [i ] * 100 / sum_get_stats [i ] : 0 );
178
+ sum_get_stats [i ] ? sum_hit_stats [i ] * 100 / sum_get_stats [i ] : 0 ,
179
+ sum_cnt_stats [i ]);
158
180
}
159
181
seq_puts (m , "\n" );
160
182
@@ -166,10 +188,10 @@ static int ib_rds_cache_hit_show(struct seq_file *m, void *v)
166
188
cache = rds_ibdev -> i_cache_frags + i - 1 ;
167
189
miss = atomic64_read (& cache -> miss_count );
168
190
hit = atomic64_read (& cache -> hit_count );
169
- seq_printf (m , "%15s %15llu %4llu" ,
191
+ seq_printf (m , "%15s %15llu %4llu %5s " ,
170
192
"" ,
171
193
hit ,
172
- (hit + miss ) ? hit * 100 / (hit + miss ) : 0 );
194
+ (hit + miss ) ? hit * 100 / (hit + miss ) : 0 , " " );
173
195
}
174
196
seq_puts (m , "\n" );
175
197
@@ -181,8 +203,8 @@ static int ib_rds_cache_hit_show(struct seq_file *m, void *v)
181
203
else
182
204
cache = rds_ibdev -> i_cache_frags + i - 1 ;
183
205
miss = atomic64_read (& cache -> miss_count );
184
- seq_printf (m , "%15llu %15s %4s" ,
185
- miss , " " , " " );
206
+ seq_printf (m , "%15llu %15s %4s %5s " ,
207
+ miss , " " , " " , " " );
186
208
}
187
209
seq_puts (m , "\n" );
188
210
@@ -203,18 +225,13 @@ static const struct file_operations ib_rds_cache_hit_fops = {
203
225
204
226
static int ib_rds_create_debugfs_cache_hit (struct rds_ib_device * rds_ibdev )
205
227
{
206
- struct dentry * d_dev ;
207
228
struct dentry * ent ;
208
229
209
- rds_ibdev -> debugfs_dir = debugfs_create_dir ("rds_cache" , NULL );
230
+ rds_ibdev -> debugfs_dir = debugfs_create_dir (rds_ibdev -> dev -> name , debugfs_basedir );
210
231
if (!rds_ibdev -> debugfs_dir )
211
- return - ENOMEM ;
212
-
213
- d_dev = debugfs_create_dir (rds_ibdev -> dev -> name , rds_ibdev -> debugfs_dir );
214
- if (!d_dev )
215
- goto fail ;
232
+ goto out ;
216
233
217
- ent = debugfs_create_file ("hit_stats" , 0400 , d_dev ,
234
+ ent = debugfs_create_file ("hit_stats" , 0400 , rds_ibdev -> debugfs_dir ,
218
235
rds_ibdev , & ib_rds_cache_hit_fops );
219
236
if (!ent )
220
237
goto fail ;
@@ -223,6 +240,7 @@ static int ib_rds_create_debugfs_cache_hit(struct rds_ib_device *rds_ibdev)
223
240
fail :
224
241
debugfs_remove_recursive (rds_ibdev -> debugfs_dir );
225
242
rds_ibdev -> debugfs_dir = NULL ;
243
+ out :
226
244
return - ENOMEM ;
227
245
}
228
246
@@ -1230,6 +1248,10 @@ int rds_ib_init(void)
1230
1248
1231
1249
INIT_LIST_HEAD (& rds_ib_devices );
1232
1250
1251
+ debugfs_basedir = debugfs_create_dir ("rds_cache" , NULL );
1252
+ if (!debugfs_basedir )
1253
+ pr_err ("RDS/IB: can't create debugfs_basedir\n" );
1254
+
1233
1255
/* Initialise the RDS IB fragment size */
1234
1256
rds_ib_init_frag (RDS_PROTOCOL_VERSION );
1235
1257
@@ -1352,6 +1374,7 @@ void rds_ib_exit(void)
1352
1374
destroy_workqueue (rds_evt_wq );
1353
1375
destroy_workqueue (rds_aux_wq );
1354
1376
rds_ib_fmr_exit ();
1377
+ debugfs_remove_recursive (debugfs_basedir );
1355
1378
}
1356
1379
1357
1380
struct rds_transport rds_ib_transport = {
0 commit comments