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.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.currentTimeMillis();
36
37 @Override
38 public String toString() {
39 return super.toString() + ", ioHitsPerSecond=" + getIOHitsPerSecond() +
40 ", ioTimePerHit=" + getIOTimePerHit();
41 }
42
43 public void ioHit(long time) {
44 ioHitCount.incrementAndGet();
45 ioHitTime.addAndGet(time);
46 }
47
48 public long getIOHitsPerSecond() {
49 long now = EnvironmentEdgeManager.currentTimeMillis();
50 long took = (now - lastLogTime) / 1000;
51 lastLogTime = now;
52 return took == 0? 0: ioHitCount.get() / took;
53 }
54
55 public double getIOTimePerHit() {
56 long time = ioHitTime.get() / nanoTime;
57 long count = ioHitCount.get();
58 return ((float) time / (float) count);
59 }
60
61 public void reset() {
62 ioHitCount.set(0);
63 ioHitTime.set(0);
64 }
65 }