Storage Engine API
record_access_tracker.h
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include <memory>
32 
33 #include "mongo/util/concurrency/mutex.h"
34 #include "mongo/util/time_support.h"
35 
36 namespace mongo {
37 
38 class ClockSource;
39 class Date_t;
40 class MmapV1RecordHeader;
41 
51 
52 public:
53  RecordAccessTracker(ClockSource* cs);
54 
55  enum Constants {
56  SliceSize = 1024,
57  MaxChain = 20, // intentionally very low
58  NumSlices = 10,
61  };
62 
66  void markAccessed(const void* record);
67 
74  bool checkAccessedAndMark(const void* record);
75 
79  void reset();
80 
81  //
82  // For testing.
83  //
84 
91 
92 private:
93  enum State { In, Out, Unk };
94 
95  struct Entry {
96  size_t region;
97  unsigned long long value;
98  };
99 
105  class Slice {
106  public:
107  Slice();
108 
109  void reset();
110 
111  State get(int regionHash, size_t region, short offset);
112 
116  bool put(int regionHash, size_t region, short offset);
117 
118  private:
119  Entry* _get(int start, size_t region, bool add);
120 
122  };
123 
129  class Rolling {
130  public:
131  Rolling() = default;
132 
140  bool access(size_t region, short offset, bool doHalf, ClockSource* cs);
141 
145  void updateLastRotate(ClockSource* cs);
146 
147  private:
148  void _rotate(ClockSource* cs);
149 
150  int _curSlice = 0;
151  Date_t _lastRotate;
152  Slice _slices[NumSlices];
153 
154  SimpleMutex _lock;
155  };
156 
157  // Should this record tracker fallback to making a system call?
159  ClockSource* _clock;
160 
161  // An array of Rolling instances for tracking record accesses.
162  std::unique_ptr<Rolling[]> _rollingTable;
163 };
164 
165 } // namespace
Definition: record_access_tracker.h:56
void markAccessed(const void *record)
Informs this record access tracker that &#39;record&#39; has been accessed.
Definition: record_access_tracker.cpp:294
MONGO_DISALLOW_COPYING(RecordAccessTracker)
void disableSystemBlockInMemCheck()
The accessedRecently() implementation falls back to making a system call if it appears that the recor...
Definition: record_access_tracker.cpp:334
void reset()
Clears out any history of record accesses.
Definition: record_access_tracker.cpp:286
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
bool _blockSupported
Definition: record_access_tracker.h:158
Definition: record_access_tracker.h:95
Definition: record_access_tracker.h:93
SimpleMutex _lock
Definition: record_access_tracker.h:154
Date_t _lastRotate
Definition: record_access_tracker.h:151
ClockSource * _clock
Definition: record_access_tracker.h:159
Definition: record_access_tracker.h:57
std::unique_ptr< Rolling[]> _rollingTable
Definition: record_access_tracker.h:162
Definition: record_access_tracker.h:93
Definition: record_access_tracker.h:59
Constants
Definition: record_access_tracker.h:55
bool checkAccessedAndMark(const void *record)
Definition: record_access_tracker.cpp:307
Definition: record_access_tracker.h:93
Used to implement likelyInPhysicalMemory() for the MMAP v1 storage engine.
Definition: record_access_tracker.h:49
this contains many slices of times the idea you put mem status in the current time slice and then aft...
Definition: record_access_tracker.h:129
RecordAccessTracker(ClockSource *cs)
Definition: record_access_tracker.cpp:281
State
Definition: record_access_tracker.h:93
Definition: record_access_tracker.h:60
unsigned long long value
Definition: record_access_tracker.h:97
size_t region
Definition: record_access_tracker.h:96
IndexSet *const _data
Definition: ephemeral_for_test_btree_impl.cpp:131
simple hash map for region -> status this constitutes a single region of time it does chaining...
Definition: record_access_tracker.h:105
Definition: record_access_tracker.h:58