1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.io.hfile.bucket;
20
21 import java.util.concurrent.atomic.AtomicLong;
22
23 import org.apache.hadoop.hbase.classification.InterfaceAudience;
24 import org.apache.hadoop.hbase.io.hfile.CacheStats;
25 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
26
27
28
29
30 @InterfaceAudience.Private
31 public class BucketCacheStats extends CacheStats {
32 private final AtomicLong ioHitCount = new AtomicLong(0);
33 private final AtomicLong ioHitTime = new AtomicLong(0);
34 private final static int nanoTime = 1000000;
35 private long lastLogTime = EnvironmentEdgeManager.currentTime();
36
37 BucketCacheStats() {
38 super("BucketCache");
39 }
40
41 @Override
42 public String toString() {
43 return super.toString() + ", ioHitsPerSecond=" + getIOHitsPerSecond() +
44 ", ioTimePerHit=" + getIOTimePerHit();
45 }
46
47 public void ioHit(long time) {
48 ioHitCount.incrementAndGet();
49 ioHitTime.addAndGet(time);
50 }
51
52 public long getIOHitsPerSecond() {
53 long now = EnvironmentEdgeManager.currentTime();
54 long took = (now - lastLogTime) / 1000;
55 lastLogTime = now;
56 return took == 0? 0: ioHitCount.get() / took;
57 }
58
59 public double getIOTimePerHit() {
60 long time = ioHitTime.get() / nanoTime;
61 long count = ioHitCount.get();
62 return ((float) time / (float) count);
63 }
64
65 public void reset() {
66 ioHitCount.set(0);
67 ioHitTime.set(0);
68 }
69 }