@@ -62,7 +62,7 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
62
62
read -> header .ver = 1 ;
63
63
read -> header .compat = 1 ;
64
64
read -> header .data_len = cpu_to_le32 (sizeof (* read ) - header_len );
65
- sum = m -> read_latency_sum ;
65
+ sum = m -> metric [ METRIC_READ ]. latency_sum ;
66
66
jiffies_to_timespec64 (sum , & ts );
67
67
read -> sec = cpu_to_le32 (ts .tv_sec );
68
68
read -> nsec = cpu_to_le32 (ts .tv_nsec );
@@ -74,7 +74,7 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
74
74
write -> header .ver = 1 ;
75
75
write -> header .compat = 1 ;
76
76
write -> header .data_len = cpu_to_le32 (sizeof (* write ) - header_len );
77
- sum = m -> write_latency_sum ;
77
+ sum = m -> metric [ METRIC_WRITE ]. latency_sum ;
78
78
jiffies_to_timespec64 (sum , & ts );
79
79
write -> sec = cpu_to_le32 (ts .tv_sec );
80
80
write -> nsec = cpu_to_le32 (ts .tv_nsec );
@@ -86,7 +86,7 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
86
86
meta -> header .ver = 1 ;
87
87
meta -> header .compat = 1 ;
88
88
meta -> header .data_len = cpu_to_le32 (sizeof (* meta ) - header_len );
89
- sum = m -> metadata_latency_sum ;
89
+ sum = m -> metric [ METRIC_METADATA ]. latency_sum ;
90
90
jiffies_to_timespec64 (sum , & ts );
91
91
meta -> sec = cpu_to_le32 (ts .tv_sec );
92
92
meta -> nsec = cpu_to_le32 (ts .tv_nsec );
@@ -141,8 +141,8 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
141
141
rsize -> header .ver = 1 ;
142
142
rsize -> header .compat = 1 ;
143
143
rsize -> header .data_len = cpu_to_le32 (sizeof (* rsize ) - header_len );
144
- rsize -> total_ops = cpu_to_le64 (m -> total_reads );
145
- rsize -> total_size = cpu_to_le64 (m -> read_size_sum );
144
+ rsize -> total_ops = cpu_to_le64 (m -> metric [ METRIC_READ ]. total );
145
+ rsize -> total_size = cpu_to_le64 (m -> metric [ METRIC_READ ]. size_sum );
146
146
items ++ ;
147
147
148
148
/* encode the write io size metric */
@@ -151,8 +151,8 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
151
151
wsize -> header .ver = 1 ;
152
152
wsize -> header .compat = 1 ;
153
153
wsize -> header .data_len = cpu_to_le32 (sizeof (* wsize ) - header_len );
154
- wsize -> total_ops = cpu_to_le64 (m -> total_writes );
155
- wsize -> total_size = cpu_to_le64 (m -> write_size_sum );
154
+ wsize -> total_ops = cpu_to_le64 (m -> metric [ METRIC_WRITE ]. total );
155
+ wsize -> total_size = cpu_to_le64 (m -> metric [ METRIC_WRITE ]. size_sum );
156
156
items ++ ;
157
157
158
158
put_unaligned_le32 (items , & head -> num );
@@ -220,7 +220,8 @@ static void metric_delayed_work(struct work_struct *work)
220
220
221
221
int ceph_metric_init (struct ceph_client_metric * m )
222
222
{
223
- int ret ;
223
+ struct ceph_metric * metric ;
224
+ int ret , i ;
224
225
225
226
if (!m )
226
227
return - EINVAL ;
@@ -243,32 +244,18 @@ int ceph_metric_init(struct ceph_client_metric *m)
243
244
if (ret )
244
245
goto err_i_caps_mis ;
245
246
246
- spin_lock_init (& m -> read_metric_lock );
247
- m -> read_latency_sq_sum = 0 ;
248
- m -> read_latency_min = KTIME_MAX ;
249
- m -> read_latency_max = 0 ;
250
- m -> total_reads = 0 ;
251
- m -> read_latency_sum = 0 ;
252
- m -> read_size_min = U64_MAX ;
253
- m -> read_size_max = 0 ;
254
- m -> read_size_sum = 0 ;
255
-
256
- spin_lock_init (& m -> write_metric_lock );
257
- m -> write_latency_sq_sum = 0 ;
258
- m -> write_latency_min = KTIME_MAX ;
259
- m -> write_latency_max = 0 ;
260
- m -> total_writes = 0 ;
261
- m -> write_latency_sum = 0 ;
262
- m -> write_size_min = U64_MAX ;
263
- m -> write_size_max = 0 ;
264
- m -> write_size_sum = 0 ;
265
-
266
- spin_lock_init (& m -> metadata_metric_lock );
267
- m -> metadata_latency_sq_sum = 0 ;
268
- m -> metadata_latency_min = KTIME_MAX ;
269
- m -> metadata_latency_max = 0 ;
270
- m -> total_metadatas = 0 ;
271
- m -> metadata_latency_sum = 0 ;
247
+ for (i = 0 ; i < METRIC_MAX ; i ++ ) {
248
+ metric = & m -> metric [i ];
249
+ spin_lock_init (& metric -> lock );
250
+ metric -> size_sum = 0 ;
251
+ metric -> size_min = U64_MAX ;
252
+ metric -> size_max = 0 ;
253
+ metric -> total = 0 ;
254
+ metric -> latency_sum = 0 ;
255
+ metric -> latency_sq_sum = 0 ;
256
+ metric -> latency_min = KTIME_MAX ;
257
+ metric -> latency_max = 0 ;
258
+ }
272
259
273
260
atomic64_set (& m -> opened_files , 0 );
274
261
ret = percpu_counter_init (& m -> opened_inodes , 0 , GFP_KERNEL );
@@ -338,73 +325,22 @@ static inline void __update_stdev(ktime_t total, ktime_t lsum,
338
325
* sq_sump += sq ;
339
326
}
340
327
341
- void ceph_update_read_metrics (struct ceph_client_metric * m ,
342
- ktime_t r_start , ktime_t r_end ,
343
- unsigned int size , int rc )
328
+ void ceph_update_metrics (struct ceph_metric * m ,
329
+ ktime_t r_start , ktime_t r_end ,
330
+ unsigned int size , int rc )
344
331
{
345
332
ktime_t lat = ktime_sub (r_end , r_start );
346
333
ktime_t total ;
347
334
348
335
if (unlikely (rc < 0 && rc != - ENOENT && rc != - ETIMEDOUT ))
349
336
return ;
350
337
351
- spin_lock (& m -> read_metric_lock );
352
- total = ++ m -> total_reads ;
353
- m -> read_size_sum += size ;
354
- m -> read_latency_sum += lat ;
355
- METRIC_UPDATE_MIN_MAX (m -> read_size_min ,
356
- m -> read_size_max ,
357
- size );
358
- METRIC_UPDATE_MIN_MAX (m -> read_latency_min ,
359
- m -> read_latency_max ,
360
- lat );
361
- __update_stdev (total , m -> read_latency_sum ,
362
- & m -> read_latency_sq_sum , lat );
363
- spin_unlock (& m -> read_metric_lock );
364
- }
365
-
366
- void ceph_update_write_metrics (struct ceph_client_metric * m ,
367
- ktime_t r_start , ktime_t r_end ,
368
- unsigned int size , int rc )
369
- {
370
- ktime_t lat = ktime_sub (r_end , r_start );
371
- ktime_t total ;
372
-
373
- if (unlikely (rc && rc != - ETIMEDOUT ))
374
- return ;
375
-
376
- spin_lock (& m -> write_metric_lock );
377
- total = ++ m -> total_writes ;
378
- m -> write_size_sum += size ;
379
- m -> write_latency_sum += lat ;
380
- METRIC_UPDATE_MIN_MAX (m -> write_size_min ,
381
- m -> write_size_max ,
382
- size );
383
- METRIC_UPDATE_MIN_MAX (m -> write_latency_min ,
384
- m -> write_latency_max ,
385
- lat );
386
- __update_stdev (total , m -> write_latency_sum ,
387
- & m -> write_latency_sq_sum , lat );
388
- spin_unlock (& m -> write_metric_lock );
389
- }
390
-
391
- void ceph_update_metadata_metrics (struct ceph_client_metric * m ,
392
- ktime_t r_start , ktime_t r_end ,
393
- int rc )
394
- {
395
- ktime_t lat = ktime_sub (r_end , r_start );
396
- ktime_t total ;
397
-
398
- if (unlikely (rc && rc != - ENOENT ))
399
- return ;
400
-
401
- spin_lock (& m -> metadata_metric_lock );
402
- total = ++ m -> total_metadatas ;
403
- m -> metadata_latency_sum += lat ;
404
- METRIC_UPDATE_MIN_MAX (m -> metadata_latency_min ,
405
- m -> metadata_latency_max ,
406
- lat );
407
- __update_stdev (total , m -> metadata_latency_sum ,
408
- & m -> metadata_latency_sq_sum , lat );
409
- spin_unlock (& m -> metadata_metric_lock );
338
+ spin_lock (& m -> lock );
339
+ total = ++ m -> total ;
340
+ m -> size_sum += size ;
341
+ METRIC_UPDATE_MIN_MAX (m -> size_min , m -> size_max , size );
342
+ m -> latency_sum += lat ;
343
+ METRIC_UPDATE_MIN_MAX (m -> latency_min , m -> latency_max , lat );
344
+ __update_stdev (total , m -> latency_sum , & m -> latency_sq_sum , lat );
345
+ spin_unlock (& m -> lock );
410
346
}
0 commit comments