1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2009 Oracle. All rights reserved. 5 * 6 */ 7using System; 8using System.Collections.Generic; 9using System.Text; 10 11namespace BerkeleyDB { 12 /// <summary> 13 /// Statistical information about the memory pool subsystem 14 /// </summary> 15 public class MPoolStats { 16 private Internal.MPoolStatStruct st; 17 private CacheInfo ci; 18 private List<MPoolFileStats> mempfiles; 19 20 internal MPoolStats(Internal.MempStatStruct stats) { 21 st = stats.st; 22 ci = new CacheInfo(st.st_gbytes, st.st_bytes, (int)st.st_max_ncache); 23 mempfiles = new List<MPoolFileStats>(); 24 foreach (Internal.MPoolFileStatStruct file in stats.files) 25 mempfiles.Add(new MPoolFileStats(file)); 26 } 27 /// <summary> 28 /// Total cache size and number of regions 29 /// </summary> 30 public CacheInfo CacheSettings { get { return ci; } } 31 /// <summary> 32 /// Maximum number of regions. 33 /// </summary> 34 public uint CacheRegions { get { return st.st_ncache; } } 35 /// <summary> 36 /// Maximum file size for mmap. 37 /// </summary> 38 public ulong MaxMMapSize { get { return (ulong)st.st_mmapsize.ToInt64(); } } 39 /// <summary> 40 /// Maximum number of open fd's. 41 /// </summary> 42 public int MaxOpenFileDescriptors { get { return st.st_maxopenfd; } } 43 /// <summary> 44 /// Maximum buffers to write. 45 /// </summary> 46 public int MaxBufferWrites { get { return st.st_maxwrite; } } 47 /// <summary> 48 /// Sleep after writing max buffers. 49 /// </summary> 50 public uint MaxBufferWritesSleep { get { return st.st_maxwrite_sleep; } } 51 /// <summary> 52 /// Total number of pages. 53 /// </summary> 54 public uint Pages { get { return st.st_pages; } } 55 /// <summary> 56 /// Pages from mapped files. 57 /// </summary> 58 public uint MappedPages { get { return st.st_map; } } 59 /// <summary> 60 /// Pages found in the cache. 61 /// </summary> 62 public ulong PagesInCache { get { return st.st_cache_hit; } } 63 /// <summary> 64 /// Pages not found in the cache. 65 /// </summary> 66 public ulong PagesNotInCache { get { return st.st_cache_miss; } } 67 /// <summary> 68 /// Pages created in the cache. 69 /// </summary> 70 public ulong PagesCreatedInCache { get { return st.st_page_create; } } 71 /// <summary> 72 /// Pages read in. 73 /// </summary> 74 public ulong PagesRead { get { return st.st_page_in; } } 75 /// <summary> 76 /// Pages written out. 77 /// </summary> 78 public ulong PagesWritten { get { return st.st_page_out; } } 79 /// <summary> 80 /// Clean pages forced from the cache. 81 /// </summary> 82 public ulong CleanPagesEvicted { get { return st.st_ro_evict; } } 83 /// <summary> 84 /// Dirty pages forced from the cache. 85 /// </summary> 86 public ulong DirtyPagesEvicted { get { return st.st_rw_evict; } } 87 /// <summary> 88 /// Pages written by memp_trickle. 89 /// </summary> 90 public ulong PagesTrickled { get { return st.st_page_trickle; } } 91 /// <summary> 92 /// Clean pages. 93 /// </summary> 94 public uint CleanPages { get { return st.st_page_clean; } } 95 /// <summary> 96 /// Dirty pages. 97 /// </summary> 98 public uint DirtyPages { get { return st.st_page_dirty; } } 99 /// <summary> 100 /// Number of hash buckets. 101 /// </summary> 102 public uint HashBuckets { get { return st.st_hash_buckets; } } 103 /// <summary> 104 /// Assumed page size. 105 /// </summary> 106 public uint PageSize { get { return st.st_pagesize; } } 107 /// <summary> 108 /// Total hash chain searches. 109 /// </summary> 110 public uint HashChainSearches { get { return st.st_hash_searches; } } 111 /// <summary> 112 /// Longest hash chain searched. 113 /// </summary> 114 public uint LongestHashChainSearch { get { return st.st_hash_longest; } } 115 /// <summary> 116 /// Total hash entries searched. 117 /// </summary> 118 public ulong HashEntriesSearched { get { return st.st_hash_examined; } } 119 /// <summary> 120 /// Hash lock granted with nowait. 121 /// </summary> 122 public ulong HashLockNoWait { get { return st.st_hash_nowait; } } 123 /// <summary> 124 /// Hash lock granted after wait. 125 /// </summary> 126 public ulong HashLockWait { get { return st.st_hash_wait; } } 127 /// <summary> 128 /// Max hash lock granted with nowait. 129 /// </summary> 130 public ulong MaxHashLockNoWait { get { return st.st_hash_max_nowait; } } 131 /// <summary> 132 /// Max hash lock granted after wait. 133 /// </summary> 134 public ulong MaxHashLockWait { get { return st.st_hash_max_wait; } } 135 /// <summary> 136 /// Region lock granted with nowait. 137 /// </summary> 138 public ulong RegionLockNoWait { get { return st.st_region_nowait; } } 139 /// <summary> 140 /// Region lock granted after wait. 141 /// </summary> 142 public ulong RegionLockWait { get { return st.st_region_wait; } } 143 /// <summary> 144 /// Buffers frozen. 145 /// </summary> 146 public ulong FrozenBuffers { get { return st.st_mvcc_frozen; } } 147 /// <summary> 148 /// Buffers thawed. 149 /// </summary> 150 public ulong ThawedBuffers { get { return st.st_mvcc_thawed; } } 151 /// <summary> 152 /// Frozen buffers freed. 153 /// </summary> 154 public ulong FrozenBuffersFreed { get { return st.st_mvcc_freed; } } 155 /// <summary> 156 /// Number of page allocations. 157 /// </summary> 158 public ulong PageAllocations { get { return st.st_alloc; } } 159 /// <summary> 160 /// Buckets checked during allocation. 161 /// </summary> 162 public ulong BucketsCheckedDuringAlloc { get { return st.st_alloc_buckets; } } 163 /// <summary> 164 /// Max checked during allocation. 165 /// </summary> 166 public ulong MaxBucketsCheckedDuringAlloc { get { return st.st_alloc_max_buckets; } } 167 /// <summary> 168 /// Pages checked during allocation. 169 /// </summary> 170 public ulong PagesCheckedDuringAlloc { get { return st.st_alloc_pages; } } 171 /// <summary> 172 /// Max checked during allocation. 173 /// </summary> 174 public ulong MaxPagesCheckedDuringAlloc { get { return st.st_alloc_max_pages; } } 175 /// <summary> 176 /// Thread waited on buffer I/O. 177 /// </summary> 178 public ulong BlockedOperations { get { return st.st_io_wait; } } 179 /// <summary> 180 /// Number of times sync interrupted. 181 /// </summary> 182 public ulong SyncInterrupted { get { return st.st_sync_interrupted; } } 183 /// <summary> 184 /// Region size. 185 /// </summary> 186 public ulong RegionSize { get { return (ulong)st.st_regsize.ToInt64(); } } 187 /// <summary> 188 /// Stats for files open in the memory pool 189 /// </summary> 190 public List<MPoolFileStats> Files { get { return mempfiles; } } 191 } 192}