summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/api/leveldb/basho/perf_count.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/api/leveldb/basho/perf_count.h')
-rw-r--r--src/third_party/wiredtiger/api/leveldb/basho/perf_count.h298
1 files changed, 298 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/api/leveldb/basho/perf_count.h b/src/third_party/wiredtiger/api/leveldb/basho/perf_count.h
new file mode 100644
index 00000000000..b0f4abf9b66
--- /dev/null
+++ b/src/third_party/wiredtiger/api/leveldb/basho/perf_count.h
@@ -0,0 +1,298 @@
+// -------------------------------------------------------------------
+//
+// perf_count.h: performance counters LevelDB
+//
+// Copyright (c) 2012-2013 Basho Technologies, Inc. All Rights Reserved.
+//
+// This file is provided 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.
+//
+// -------------------------------------------------------------------
+
+#ifndef STORAGE_LEVELDB_INCLUDE_PERF_COUNT_H_
+#define STORAGE_LEVELDB_INCLUDE_PERF_COUNT_H_
+
+#include "leveldb_wt_config.h"
+
+#include <stdint.h>
+#include <string>
+#include "status.h"
+
+namespace leveldb {
+
+enum SstCountEnum
+{
+ //
+ // array index values/names
+ //
+ eSstCountKeys=0, //!< how many keys in this sst
+ eSstCountBlocks=1, //!< how many blocks in this sst
+ eSstCountCompressAborted=2,//!< how many blocks attempted compression and aborted use
+ eSstCountKeySize=3, //!< byte count of all keys
+ eSstCountValueSize=4, //!< byte count of all values
+ eSstCountBlockSize=5, //!< byte count of all blocks (pre-compression)
+ eSstCountBlockWriteSize=6, //!< post-compression size, or BlockSize if no compression
+ eSstCountIndexKeys=7, //!< how many keys in the index block
+ eSstCountKeyLargest=8, //!< largest key in sst
+ eSstCountKeySmallest=9, //!< smallest key in sst
+ eSstCountValueLargest=10, //!< largest value in sst
+ eSstCountValueSmallest=11, //!< smallest value in sst
+ eSstCountDeleteKey=12, //!< tombstone count
+ eSstCountBlockSizeUsed=13, //!< Options::block_size used with this file
+ eSstCountUserDataSize=14, //!< post-compression size of non-metadata (user keys/values/block overhead)
+
+ // must follow last index name to represent size of array
+ eSstCountEnumSize, //!< size of the array described by the enum values
+
+ eSstCountVersion=1
+
+}; // enum SstCountEnum
+
+
+class SstCounters
+{
+protected:
+ bool m_IsReadOnly; //!< set when data decoded from a file
+ uint32_t m_Version; //!< object revision identification
+ uint32_t m_CounterSize; //!< number of objects in m_Counter
+
+ uint64_t m_Counter[eSstCountEnumSize];
+
+public:
+ // constructors / destructor
+ SstCounters();
+
+ // Put data into disk form
+ void EncodeTo(std::string & Dst) const;
+
+ // Populate member data from prior EncodeTo block
+ Status DecodeFrom(const Slice& src);
+
+ // increment the counter
+ uint64_t Inc(unsigned Index);
+
+ // add value to the counter
+ uint64_t Add(unsigned Index, uint64_t Amount);
+
+ // return value of a counter
+ uint64_t Value(unsigned Index) const;
+
+ // set a value
+ void Set(unsigned Index, uint64_t);
+
+ // return number of counters
+ uint32_t Size() const {return(m_CounterSize);};
+
+ // printf all values
+ void Dump() const;
+
+}; // class SstCounters
+
+
+extern struct PerformanceCounters * gPerfCounters;
+
+
+enum PerformanceCountersEnum
+{
+ //
+ // array index values/names
+ // (enum explicitly numbered to allow future edits / moves / inserts)
+ //
+ ePerfROFileOpen=0, //!< PosixMmapReadableFile open
+ ePerfROFileClose=1, //!< closed
+ ePerfROFileUnmap=2, //!< unmap without close
+
+ ePerfRWFileOpen=3, //!< PosixMmapFile open
+ ePerfRWFileClose=4, //!< closed
+ ePerfRWFileUnmap=5, //!< unmap without close
+
+ ePerfApiOpen=6, //!< Count of DB::Open completions
+ ePerfApiGet=7, //!< Count of DBImpl::Get completions
+ ePerfApiWrite=8, //!< Count of DBImpl::Get completions
+
+ ePerfWriteSleep=9, //!< DBImpl::MakeRoomForWrite called sleep
+ ePerfWriteWaitImm=10, //!< DBImpl::MakeRoomForWrite called Wait on Imm compact
+ ePerfWriteWaitLevel0=11,//!< DBImpl::MakeRoomForWrite called Wait on Level0 compact
+ ePerfWriteNewMem=12, //!< DBImpl::MakeRoomForWrite created new memory log
+ ePerfWriteError=13, //!< DBImpl::MakeRoomForWrite saw bg_error_
+ ePerfWriteNoWait=14, //!< DBImpl::MakeRoomForWrite took no action
+
+ ePerfGetMem=15, //!< DBImpl::Get read from memory log
+ ePerfGetImm=16, //!< DBImpl::Get read from previous memory log
+ ePerfGetVersion=17, //!< DBImpl::Get read from Version object
+
+ // code ASSUMES the levels are in numerical order,
+ // i.e. based off of ePerfSearchLevel0
+ ePerfSearchLevel0=18, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel1=19, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel2=20, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel3=21, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel4=22, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel5=23, //!< Version::Get read searched one or more files here
+ ePerfSearchLevel6=24, //!< Version::Get read searched one or more files here
+
+ ePerfTableCached=25, //!< TableCache::FindTable found table in cache
+ ePerfTableOpened=26, //!< TableCache::FindTable had to open table file
+ ePerfTableGet=27, //!< TableCache::Get used to retrieve a key
+
+ ePerfBGCloseUnmap=28, //!< PosixEnv::BGThreaed started Unmap/Close job
+ ePerfBGCompactImm=29, //!< PosixEnv::BGThreaed started compaction of Imm
+ ePerfBGNormal=30, //!< PosixEnv::BGThreaed started normal compaction job
+ ePerfBGCompactLevel0=31,//!< PosixEnv::BGThreaed started compaction of Level0
+
+ ePerfBlockFiltered=32, //!< Table::BlockReader search stopped due to filter
+ ePerfBlockFilterFalse=33,//!< Table::BlockReader gave a false positive for match
+ ePerfBlockCached=34, //!< Table::BlockReader found block in cache
+ ePerfBlockRead=35, //!< Table::BlockReader read block from disk
+ ePerfBlockFilterRead=36,//!< Table::ReadMeta filter loaded from file
+ ePerfBlockValidGet=37, //!< Table::InternalGet has valid iterator
+
+ ePerfDebug0=38, //!< Developer debug counters, moveable
+ ePerfDebug1=39, //!< Developer debug counters, moveable
+ ePerfDebug2=40, //!< Developer debug counters, moveable
+ ePerfDebug3=41, //!< Developer debug counters, moveable
+ ePerfDebug4=42, //!< Developer debug counters, moveable
+
+ ePerfReadBlockError=43, //!< crc or compression error in ReadBlock (format.cc)
+
+ ePerfIterNew=44, //!< Count of DBImpl::NewDBIterator calls
+ ePerfIterNext=45, //!< Count of DBIter::Next calls
+ ePerfIterPrev=46, //!< Count of DBIter::Prev calls
+ ePerfIterSeek=47, //!< Count of DBIter::Seek calls
+ ePerfIterSeekFirst=48, //!< Count of DBIter::SeekFirst calls
+ ePerfIterSeekLast=49, //!< Count of DBIter::SeekLast calls
+ ePerfIterDelete=50, //!< Count of DBIter::~DBIter
+
+ ePerfElevelDirect=51, //!< eleveldb's FindWaitingThread went direct to thread
+ ePerfElevelQueued=52, //!< eleveldb's FindWaitingThread queued work item
+ ePerfElevelDequeued=53, //!< eleveldb's worker took item from backlog queue
+
+ ePerfElevelRefCreate=54,//!< eleveldb RefObject constructed
+ ePerfElevelRefDelete=55,//!< eleveldb RefObject destructed
+
+ ePerfThrottleGauge=56, //!< current throttle value
+ ePerfThrottleCounter=57,//!< running throttle by seconds
+
+ ePerfThrottleMicros0=58,//!< level 0 micros spent compacting
+ ePerfThrottleKeys0=59, //!< level 0 keys processed
+ ePerfThrottleBacklog0=60,//!< backlog at time of posting (level0)
+ ePerfThrottleCompacts0=61,//!< number of level 0 compactions
+
+ ePerfThrottleMicros1=62,//!< level 1+ micros spent compacting
+ ePerfThrottleKeys1=63, //!< level 1+ keys processed
+ ePerfThrottleBacklog1=64,//!< backlog at time of posting (level1+)
+ ePerfThrottleCompacts1=65,//!< number of level 1+ compactions
+
+ ePerfBGWriteError=66, //!< error in write/close, see syslog
+
+ ePerfThrottleWait=67, //!< milliseconds of throttle wait
+ ePerfThreadError=68, //!< system error on thread related call, no LOG access
+
+ ePerfBGImmDirect=69, //!< count Imm compactions happened directly
+ ePerfBGImmQueued=70, //!< count Imm compactions placed on queue
+ ePerfBGImmDequeued=71, //!< count Imm compactions removed from queue
+ ePerfBGImmWeighted=72, //!< total microseconds item spent on queue
+
+ ePerfBGUnmapDirect=73, //!< count Unmap operations happened directly
+ ePerfBGUnmapQueued=74, //!< count Unmap operations placed on queue
+ ePerfBGUnmapDequeued=75,//!< count Unmap operations removed from queue
+ ePerfBGUnmapWeighted=76,//!< total microseconds item spent on queue
+
+ ePerfBGLevel0Direct=77, //!< count Level0 compactions happened directly
+ ePerfBGLevel0Queued=78, //!< count Level0 compactions placed on queue
+ ePerfBGLevel0Dequeued=79,//!< count Level0 compactions removed from queue
+ ePerfBGLevel0Weighted=80,//!< total microseconds item spent on queue
+
+ ePerfBGCompactDirect=81, //!< count generic compactions happened directly
+ ePerfBGCompactQueued=82, //!< count generic compactions placed on queue
+ ePerfBGCompactDequeued=83,//!< count generic compactions removed from queue
+ ePerfBGCompactWeighted=84,//!< total microseconds item spent on queue
+
+ ePerfFileCacheInsert=85, //!< total bytes inserted into file cache
+ ePerfFileCacheRemove=86, //!< total bytes removed from file cache
+
+ ePerfBlockCacheInsert=87, //!< total bytes inserted into block cache
+ ePerfBlockCacheRemove=88, //!< total bytes removed from block cache
+
+ ePerfApiDelete=89, //!< Count of DB::Delete
+
+ // must follow last index name to represent size of array
+ // (ASSUMES previous enum is highest value)
+ ePerfCountEnumSize, //!< size of the array described by the enum values
+
+ ePerfVersion=1, //!< structure versioning
+ ePerfKey=41207 //!< random number as shared memory identifier
+};
+
+//
+// Do NOT use virtual functions. This structure will be aligned at different
+// locations in multiple processes. Things can get messy with virtuals.
+
+struct PerformanceCounters
+{
+public:
+ static int m_LastError;
+
+protected:
+ uint32_t m_Version; //!< object revision identification
+ uint32_t m_CounterSize; //!< number of objects in m_Counter
+
+ volatile uint64_t m_Counter[ePerfCountEnumSize];
+
+ static const char * m_PerfCounterNames[];
+ static int m_PerfSharedId;
+ static volatile uint64_t m_BogusCounter; //!< for out of range GetPtr calls
+
+public:
+ // only called for local object, not for shared memory
+ PerformanceCounters();
+
+ //!< does executable's idea of version match shared object?
+ bool VersionTest()
+ {return(ePerfCountEnumSize<=m_CounterSize && ePerfVersion==m_Version);};
+
+ //!< mostly for perf_count_test.cc
+ void SetVersion(uint32_t Version, uint32_t CounterSize)
+ {m_Version=Version; m_CounterSize=CounterSize;};
+
+ static PerformanceCounters * Init(bool IsReadOnly);
+ static int Close(PerformanceCounters * Counts);
+
+ uint64_t Inc(unsigned Index);
+ uint64_t Dec(unsigned Index);
+
+ // add value to the counter
+ uint64_t Add(unsigned Index, uint64_t Amount);
+
+ // return value of a counter
+ uint64_t Value(unsigned Index) const;
+
+ // set a value
+ void Set(unsigned Index, uint64_t);
+
+ volatile const uint64_t * GetPtr(unsigned Index) const;
+
+ static const char * GetNamePtr(unsigned Index);
+
+ int LookupCounter(const char * Name);
+
+ void Dump();
+
+}; // struct PerformanceCounters
+
+extern PerformanceCounters * gPerfCounters;
+
+} // namespace leveldb
+
+#endif // STORAGE_LEVELDB_INCLUDE_PERF_COUNT_H_