| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.sysds.runtime.controlprogram.caching; |
| |
| import java.util.concurrent.atomic.LongAdder; |
| |
| /** |
| * This singleton provides basic caching statistics in CP. |
| * |
| * 1) Hit statistics for caching (mem, fs, hdfs, total) |
| * |
| * NOTE: In order to provide accurate statistics in multi-threaded |
| * synchronized increments are required. Since those functions are |
| * called potentially very often, we use atomic increments |
| * (compare and swap) instead of heavy-weight 'synchronized' methods. |
| * |
| */ |
| public class CacheStatistics |
| { |
| //enum used for MR counters |
| public enum Stat { |
| CACHE_HITS_MEM, |
| CACHE_HITS_FSBUFF, |
| CACHE_HITS_FS, |
| CACHE_HITS_HDFS, |
| CACHE_WRITES_FSBUFF, |
| CACHE_WRITES_FS, |
| CACHE_WRITES_HDFS, |
| CACHE_TIME_ACQR, //acquire read |
| CACHE_TIME_ACQM, //acquire read |
| CACHE_TIME_RLS, //release |
| CACHE_TIME_EXP, //export |
| } |
| |
| //hit statistics (for acquire read) |
| private static final LongAdder _numHitsMem = new LongAdder(); |
| private static final LongAdder _numHitsFSBuff = new LongAdder(); |
| private static final LongAdder _numHitsFS = new LongAdder(); |
| private static final LongAdder _numHitsHDFS = new LongAdder(); |
| |
| //write statistics caching |
| private static final LongAdder _numWritesFSBuff = new LongAdder(); |
| private static final LongAdder _numWritesFS = new LongAdder(); |
| private static final LongAdder _numWritesHDFS = new LongAdder(); |
| |
| //time statistics caching |
| private static final LongAdder _ctimeAcquireR = new LongAdder(); //in nano sec |
| private static final LongAdder _ctimeAcquireM = new LongAdder(); //in nano sec |
| private static final LongAdder _ctimeRelease = new LongAdder(); //in nano sec |
| private static final LongAdder _ctimeExport = new LongAdder(); //in nano sec |
| |
| public static void reset() { |
| _numHitsMem.reset(); |
| _numHitsFSBuff.reset(); |
| _numHitsFS.reset(); |
| _numHitsHDFS.reset(); |
| |
| _numWritesFSBuff.reset(); |
| _numWritesFS.reset(); |
| _numWritesHDFS.reset(); |
| |
| _ctimeAcquireR.reset(); |
| _ctimeAcquireM.reset(); |
| _ctimeRelease.reset(); |
| _ctimeExport.reset(); |
| } |
| |
| public static void incrementMemHits() { |
| _numHitsMem.increment(); |
| } |
| |
| public static void incrementMemHits(int delta) { |
| _numHitsMem.add(delta); |
| } |
| |
| public static long getMemHits() { |
| return _numHitsMem.longValue(); |
| } |
| |
| public static void incrementFSBuffHits() { |
| _numHitsFSBuff.increment(); |
| } |
| |
| public static void incrementFSBuffHits( int delta ) { |
| _numHitsFSBuff.add(delta); |
| } |
| |
| public static long getFSBuffHits() { |
| return _numHitsFSBuff.longValue(); |
| } |
| |
| public static void incrementFSHits() { |
| _numHitsFS.increment(); |
| } |
| |
| public static void incrementFSHits(int delta) { |
| _numHitsFS.add(delta); |
| } |
| |
| public static long getFSHits() { |
| return _numHitsFS.longValue(); |
| } |
| |
| public static void incrementHDFSHits() { |
| _numHitsHDFS.increment(); |
| } |
| |
| public static void incrementHDFSHits(int delta) { |
| _numHitsHDFS.add(delta); |
| } |
| |
| public static long getHDFSHits() { |
| return _numHitsHDFS.longValue(); |
| } |
| |
| public static void incrementFSBuffWrites() { |
| _numWritesFSBuff.increment(); |
| } |
| |
| public static void incrementFSBuffWrites(int delta) { |
| _numWritesFSBuff.add(delta); |
| } |
| |
| public static long getFSBuffWrites() { |
| return _numWritesFSBuff.longValue(); |
| } |
| |
| public static void incrementFSWrites() { |
| _numWritesFS.increment(); |
| } |
| |
| public static void incrementFSWrites(int delta) { |
| _numWritesFS.add(delta); |
| } |
| |
| public static long getFSWrites() { |
| return _numWritesFS.longValue(); |
| } |
| |
| public static void incrementHDFSWrites() { |
| _numWritesHDFS.increment(); |
| } |
| |
| public static void incrementHDFSWrites(int delta) { |
| _numWritesHDFS.add(delta); |
| } |
| |
| public static long getHDFSWrites() { |
| return _numWritesHDFS.longValue(); |
| } |
| |
| public static void incrementAcquireRTime(long delta) { |
| _ctimeAcquireR.add(delta); |
| } |
| |
| public static long getAcquireRTime() { |
| return _ctimeAcquireR.longValue(); |
| } |
| |
| public static void incrementAcquireMTime(long delta) { |
| _ctimeAcquireM.add(delta); |
| } |
| |
| public static long getAcquireMTime() { |
| return _ctimeAcquireM.longValue(); |
| } |
| |
| public static void incrementReleaseTime(long delta) { |
| _ctimeRelease.add(delta); |
| } |
| |
| public static long getReleaseTime() { |
| return _ctimeRelease.longValue(); |
| } |
| |
| public static void incrementExportTime(long delta) { |
| _ctimeExport.add(delta); |
| } |
| |
| public static long getExportTime() { |
| return _ctimeExport.longValue(); |
| } |
| |
| public static String displayHits() { |
| StringBuilder sb = new StringBuilder(); |
| sb.append(_numHitsMem.longValue()); |
| sb.append("/"); |
| sb.append(_numHitsFSBuff.longValue()); |
| sb.append("/"); |
| sb.append(_numHitsFS.longValue()); |
| sb.append("/"); |
| sb.append(_numHitsHDFS.longValue()); |
| |
| return sb.toString(); |
| } |
| |
| public static String displayWrites() { |
| StringBuilder sb = new StringBuilder(); |
| sb.append(_numWritesFSBuff.longValue()); |
| sb.append("/"); |
| sb.append(_numWritesFS.longValue()); |
| sb.append("/"); |
| sb.append(_numWritesHDFS.longValue()); |
| |
| return sb.toString(); |
| } |
| |
| public static String displayTime() { |
| StringBuilder sb = new StringBuilder(); |
| sb.append(String.format("%.3f", ((double)_ctimeAcquireR.longValue())/1000000000)); //in sec |
| sb.append("/"); |
| sb.append(String.format("%.3f", ((double)_ctimeAcquireM.longValue())/1000000000)); //in sec |
| sb.append("/"); |
| sb.append(String.format("%.3f", ((double)_ctimeRelease.longValue())/1000000000)); //in sec |
| sb.append("/"); |
| sb.append(String.format("%.3f", ((double)_ctimeExport.longValue())/1000000000)); //in sec |
| |
| return sb.toString(); |
| } |
| } |