Zero  0.1.0
page_evictioner_filter.hpp
Go to the documentation of this file.
1 #ifndef __PAGE_EVICTIONER_FILTER_HPP
2 #define __PAGE_EVICTIONER_FILTER_HPP
3 
4 #include <vector>
5 #include <atomic>
6 
7 #include "buffer_pool.hpp"
8 #include "btree_page_h.h"
9 
10 namespace zero::buffer_pool {
11 
19  protected:
25  explicit PageEvictionerFilter(const BufferPool* bufferPool) {};
26 
27  public:
31  virtual ~PageEvictionerFilter() {};
32 
50  virtual bool filter(bf_idx idx) const noexcept = 0;
51 
69  virtual bool filterAndUpdate(bf_idx idx) noexcept = 0;
70 
83  virtual void updateOnPageHit(bf_idx idx) noexcept = 0;
84 
97  virtual void updateOnPageUnfix(bf_idx idx) noexcept = 0;
98 
110  virtual void updateOnPageMiss(bf_idx idx, PageID pid) noexcept = 0;
111 
122  virtual void updateOnPageFixed(bf_idx idx) noexcept = 0;
123 
134  virtual void updateOnPageDirty(bf_idx idx) noexcept = 0;
135 
146  virtual void updateOnPageBlocked(bf_idx idx) noexcept = 0;
147 
158  virtual void updateOnPageSwizzled(bf_idx idx) noexcept = 0;
159 
170  virtual void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept = 0;
171 
182  virtual void updateOnPointerSwizzling(bf_idx idx) noexcept = 0;
183 
192  virtual void releaseInternalLatches() noexcept = 0;
193  };
194 
201  public:
207  explicit PageEvictionerFilterNone(const BufferPool* bufferPool) :
208  PageEvictionerFilter(bufferPool) {};
209 
217  inline bool filter(bf_idx idx) const noexcept final {
218  return true;
219  };
220 
228  inline bool filterAndUpdate(bf_idx idx) noexcept final {
229  return true;
230  };
231 
238  inline void updateOnPageHit(bf_idx idx) noexcept final {};
239 
246  inline void updateOnPageUnfix(bf_idx idx) noexcept final {};
247 
256  inline void updateOnPageMiss(bf_idx idx, PageID pid) noexcept final {};
257 
265  inline void updateOnPageFixed(bf_idx idx) noexcept final {};
266 
274  inline void updateOnPageDirty(bf_idx idx) noexcept final {};
275 
283  inline void updateOnPageBlocked(bf_idx idx) noexcept final {};
284 
292  inline void updateOnPageSwizzled(bf_idx idx) noexcept final {};
293 
301  inline void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final {};
302 
310  inline void updateOnPointerSwizzling(bf_idx idx) noexcept final {};
311 
316  inline void releaseInternalLatches() noexcept final {};
317  };
318 
335  template<bool on_hit /*= true*/, bool on_unfix /*= false*/, bool on_miss /*= true*/, bool on_fixed /*= false*/, bool on_dirty /*= false*/, bool on_blocked /*= false*/, bool on_swizzled /*= false*/>
337  public:
343  explicit PageEvictionerFilterCLOCK(const BufferPool* bufferPool) :
344  PageEvictionerFilter(bufferPool),
345  _refBits(bufferPool->getBlockCount()) {};
346 
358  inline bool filter(bf_idx idx) const noexcept final {
359  if (_refBits[idx]) {
360  return false;
361  } else {
362  return true;
363  }
364  };
365 
375  inline bool filterAndUpdate(bf_idx idx) noexcept final {
376  if (_refBits[idx]) {
377  _refBits[idx] = false;
378  return false;
379  } else {
380  return true;
381  }
382  };
383 
391  inline void updateOnPageHit(bf_idx idx) noexcept final {
392  if constexpr (on_hit) {
393  _refBits[idx] = true;
394  }
395  };
396 
404  inline void updateOnPageUnfix(bf_idx idx) noexcept final {
405  if constexpr (on_unfix) {
406  _refBits[idx] = true;
407  }
408  };
409 
419  inline void updateOnPageMiss(bf_idx b_idx, PageID pid) noexcept final {
420  if constexpr (on_miss) {
421  _refBits[b_idx] = true;
422  }
423  };
424 
433  inline void updateOnPageFixed(bf_idx idx) noexcept final {
434  if constexpr (on_fixed) {
435  _refBits[idx] = true;
436  }
437  };
438 
447  inline void updateOnPageDirty(bf_idx idx) noexcept final {
448  if constexpr (on_dirty) {
449  _refBits[idx] = true;
450  }
451  };
452 
461  inline void updateOnPageBlocked(bf_idx idx) noexcept final {
462  if constexpr (on_blocked) {
463  _refBits[idx] = true;
464  }
465  };
466 
475  inline void updateOnPageSwizzled(bf_idx idx) noexcept final {
476  if constexpr (on_swizzled) {
477  _refBits[idx] = true;
478  }
479  };
480 
491  inline void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final {
492  _refBits[idx] = true;
493  };
494 
503  inline void updateOnPointerSwizzling(bf_idx idx) noexcept final {};
504 
509  inline void releaseInternalLatches() noexcept final {};
510 
511  private:
516  std::vector<std::atomic<bool>> _refBits;
517  };
518 
647  template<uint16_t decrement/* = 1*/, bool discriminate_pages/* = false*/,
648  bool on_hit/* = true*/, bool set_on_hit/* = false*/, uint16_t level0_on_hit/* = 5*/, uint16_t level1_on_hit/* = 2*/, uint16_t level2_on_hit/* = 1*/,
649  bool on_unfix/* = false*/, bool set_on_unfix/* = false*/, uint16_t level0_on_unfix/* = 5*/, uint16_t level1_on_unfix/* = 2*/, uint16_t level2_on_unfix/* = 1*/,
650  bool on_miss/* = true*/, bool set_on_miss/* = true*/, uint16_t level0_on_miss/* = 25*/, uint16_t level1_on_miss/* = 10*/, uint16_t level2_on_miss/* = 5*/,
651  bool on_fixed/* = false*/, bool set_on_fixed/* = false*/, uint16_t level0_on_fixed/* = 5*/, uint16_t level1_on_fixed/* = 2*/, uint16_t level2_on_fixed/* = 1*/,
652  bool on_dirty/* = false*/, bool set_on_dirty/* = false*/, uint16_t level0_on_dirty/* = 5*/, uint16_t level1_on_dirty/* = 2*/, uint16_t level2_on_dirty/* = 1*/,
653  bool on_blocked/* = false*/, bool set_on_blocked/* = false*/, uint16_t level0_on_blocked/* = 5*/, uint16_t level1_on_blocked/* = 2*/, uint16_t level2_on_blocked/* = 1*/,
654  bool on_swizzled/* = false*/, bool set_on_swizzled/* = false*/, uint16_t level0_on_swizzled/* = 5*/, uint16_t level1_on_swizzled/* = 2*/, uint16_t level2_on_swizzled/* = 1*/>
656  public:
662  explicit PageEvictionerFilterGCLOCK(const BufferPool* bufferPool) :
663  PageEvictionerFilter(bufferPool),
664  _refInts(bufferPool->getBlockCount()) {};
665 
678  inline bool filter(bf_idx idx) const noexcept final {
679  if (_refInts[idx] > 0) {
680  return false;
681  } else {
682  return true;
683  }
684  };
685 
695  inline bool filterAndUpdate(bf_idx idx) noexcept final {
696  if (_refInts[idx] > 0) {
697  _refInts[idx] = std::max(_refInts[idx] - decrement, 0);
698  return false;
699  } else {
700  return true;
701  }
702  };
703 
716  inline void updateOnPageHit(bf_idx idx) noexcept final {
717  if constexpr (on_hit) {
718  if constexpr (discriminate_pages) {
719  uint8_t page_level = getLevel(idx);
720  if constexpr (set_on_hit) {
721  if (page_level == 0) {
722  _refInts[idx] = level0_on_hit;
723  } else if (page_level == 1) {
724  _refInts[idx] = level1_on_hit;
725  } else {
726  _refInts[idx] = level2_on_hit;
727  }
728  } else {
729  if (page_level == 0) {
730  _refInts[idx] += level0_on_hit;
731  } else if (page_level == 1) {
732  _refInts[idx] += level1_on_hit;
733  } else {
734  _refInts[idx] += level2_on_hit;
735  }
736  }
737  } else {
738  if constexpr (set_on_hit) {
739  _refInts[idx] = level2_on_hit;
740  } else {
741  _refInts[idx] += level2_on_hit;
742  }
743  }
744  }
745  };
746 
759  inline void updateOnPageUnfix(bf_idx idx) noexcept final {
760  if constexpr (on_unfix) {
761  if constexpr (discriminate_pages) {
762  uint8_t page_level = getLevel(idx);
763  if constexpr (set_on_unfix) {
764  if (page_level == 0) {
765  _refInts[idx] = level0_on_unfix;
766  } else if (page_level == 1) {
767  _refInts[idx] = level1_on_unfix;
768  } else {
769  _refInts[idx] = level2_on_unfix;
770  }
771  } else {
772  if (page_level == 0) {
773  _refInts[idx] += level0_on_unfix;
774  } else if (page_level == 1) {
775  _refInts[idx] += level1_on_unfix;
776  } else {
777  _refInts[idx] += level2_on_unfix;
778  }
779  }
780  } else {
781  if constexpr (set_on_unfix) {
782  _refInts[idx] = level2_on_unfix;
783  } else {
784  _refInts[idx] += level2_on_unfix;
785  }
786  }
787  }
788  };
789 
804  inline void updateOnPageMiss(bf_idx b_idx, PageID pid) noexcept final {
805  if constexpr (on_miss) {
806  if constexpr (discriminate_pages) {
807  uint8_t page_level = getLevel(b_idx);
808  if constexpr (set_on_miss) {
809  if (page_level == 0) {
810  _refInts[b_idx] = level0_on_miss;
811  } else if (page_level == 1) {
812  _refInts[b_idx] = level1_on_miss;
813  } else {
814  _refInts[b_idx] = level2_on_miss;
815  }
816  } else {
817  if (page_level == 0) {
818  _refInts[b_idx] += level0_on_miss;
819  } else if (page_level == 1) {
820  _refInts[b_idx] += level1_on_miss;
821  } else {
822  _refInts[b_idx] += level2_on_miss;
823  }
824  }
825  } else {
826  if constexpr (set_on_miss) {
827  _refInts[b_idx] = level2_on_miss;
828  } else {
829  _refInts[b_idx] += level2_on_miss;
830  }
831  }
832  }
833  };
834 
848  inline void updateOnPageFixed(bf_idx idx) noexcept final {
849  if constexpr (on_fixed) {
850  if constexpr (discriminate_pages) {
851  uint8_t page_level = getLevel(idx);
852  if constexpr (set_on_fixed) {
853  if (page_level == 0) {
854  _refInts[idx] = level0_on_fixed;
855  } else if (page_level == 1) {
856  _refInts[idx] = level1_on_fixed;
857  } else {
858  _refInts[idx] = level2_on_fixed;
859  }
860  } else {
861  if (page_level == 0) {
862  _refInts[idx] += level0_on_fixed;
863  } else if (page_level == 1) {
864  _refInts[idx] += level1_on_fixed;
865  } else {
866  _refInts[idx] += level2_on_fixed;
867  }
868  }
869  } else {
870  if constexpr (set_on_fixed) {
871  _refInts[idx] = level2_on_fixed;
872  } else {
873  _refInts[idx] += level2_on_fixed;
874  }
875  }
876  }
877  };
878 
892  inline void updateOnPageDirty(bf_idx idx) noexcept final {
893  if constexpr (on_dirty) {
894  if constexpr (discriminate_pages) {
895  uint8_t page_level = getLevel(idx);
896  if constexpr (set_on_dirty) {
897  if (page_level == 0) {
898  _refInts[idx] = level0_on_dirty;
899  } else if (page_level == 1) {
900  _refInts[idx] = level1_on_dirty;
901  } else {
902  _refInts[idx] = level2_on_dirty;
903  }
904  } else {
905  if (page_level == 0) {
906  _refInts[idx] += level0_on_dirty;
907  } else if (page_level == 1) {
908  _refInts[idx] += level1_on_dirty;
909  } else {
910  _refInts[idx] += level2_on_dirty;
911  }
912  }
913  } else {
914  if constexpr (set_on_dirty) {
915  _refInts[idx] = level2_on_dirty;
916  } else {
917  _refInts[idx] += level2_on_dirty;
918  }
919  }
920  }
921  };
922 
936  inline void updateOnPageBlocked(bf_idx idx) noexcept final {
937  if constexpr (on_blocked) {
938  if constexpr (discriminate_pages) {
939  uint8_t page_level = getLevel(idx);
940  if constexpr (set_on_blocked) {
941  if (page_level == 0) {
942  _refInts[idx] = level0_on_blocked;
943  } else if (page_level == 1) {
944  _refInts[idx] = level1_on_blocked;
945  } else {
946  _refInts[idx] = level2_on_blocked;
947  }
948  } else {
949  if (page_level == 0) {
950  _refInts[idx] += level0_on_blocked;
951  } else if (page_level == 1) {
952  _refInts[idx] += level1_on_blocked;
953  } else {
954  _refInts[idx] += level2_on_blocked;
955  }
956  }
957  } else {
958  if constexpr (set_on_blocked) {
959  _refInts[idx] = level2_on_blocked;
960  } else {
961  _refInts[idx] += level2_on_blocked;
962  }
963  }
964  }
965  };
966 
980  inline void updateOnPageSwizzled(bf_idx idx) noexcept final {
981  if constexpr (on_swizzled) {
982  if constexpr (discriminate_pages) {
983  uint8_t page_level = getLevel(idx);
984  if constexpr (set_on_swizzled) {
985  if (page_level == 0) {
986  _refInts[idx] = level0_on_swizzled;
987  } else if (page_level == 1) {
988  _refInts[idx] = level1_on_swizzled;
989  } else {
990  _refInts[idx] = level2_on_swizzled;
991  }
992  } else {
993  if (page_level == 0) {
994  _refInts[idx] += level0_on_swizzled;
995  } else if (page_level == 1) {
996  _refInts[idx] += level1_on_swizzled;
997  } else {
998  _refInts[idx] += level2_on_swizzled;
999  }
1000  }
1001  } else {
1002  if constexpr (set_on_swizzled) {
1003  _refInts[idx] = level2_on_swizzled;
1004  } else {
1005  _refInts[idx] += level2_on_swizzled;
1006  }
1007  }
1008  }
1009  };
1010 
1021  inline void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final {
1022  _refInts[idx] = std::numeric_limits<uint16_t>::max();
1023  };
1024 
1033  inline void updateOnPointerSwizzling(bf_idx idx) noexcept final {};
1034 
1039  inline void releaseInternalLatches() noexcept final {};
1040 
1041  private:
1058  inline uint8_t getLevel(const bf_idx& idx) const {
1059  const generic_page* page = smlevel_0::bf->getPage(idx);
1060  w_assert1(page != nullptr);
1061  if (page->tag == t_btree_p) {
1062  btree_page_h fixedPage;
1063  fixedPage.fix_nonbufferpool_page(const_cast<generic_page*>(page));
1064  if (fixedPage.pid() == fixedPage.btree_root() || fixedPage.level() > 2) {
1065  return 0;
1066  } else if (fixedPage.level() == 2) {
1067  return 1;
1068  } else if (fixedPage.level() == 1) {
1069  return 2;
1070  }
1071  } else { // Non-B-Tree pages are interpreted as B-Tree root pages!
1072  return 0;
1073  }
1074  };
1075 
1080  std::vector<std::atomic<uint16_t>> _refInts;
1081  };
1082 } // zero::buffer_pool
1083 
1084 #endif // __PAGE_EVICTIONER_FILTER_HPP
virtual void releaseInternalLatches() noexcept=0
Releases the internal latches of the buffer frame filter.
PageID btree_root() const
Definition: btree_page_h.h:239
bool filter(bf_idx idx) const noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:678
void updateOnPageBlocked(bf_idx idx) noexcept final
Updates the eviction statistics of pages that cannot be evicted at all.
Definition: page_evictioner_filter.hpp:936
void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final
Updates the eviction statistics on explicit unbuffer.
Definition: page_evictioner_filter.hpp:1021
void updateOnPageFixed(bf_idx idx) noexcept final
Updates the eviction statistics of fixed (i.e. used) pages during eviction.
Definition: page_evictioner_filter.hpp:433
#define w_assert1(x)
Level 1 should not add significant extra time.
Definition: w_base.h:198
bool filterAndUpdate(bf_idx idx) noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:228
void updateOnPageHit(bf_idx idx) noexcept final
Updates the eviction statistics on page hit.
Definition: page_evictioner_filter.hpp:391
void updateOnPageUnfix(bf_idx idx) noexcept final
Updates the eviction statistics on page unfix.
Definition: page_evictioner_filter.hpp:246
Definition: buffer_pool.hpp:34
bool filterAndUpdate(bf_idx idx) noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:695
Page handle for B-Tree data page.
Definition: btree_page_h.h:185
virtual void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept=0
Updates the eviction statistics on explicit unbuffer.
uint8_t getLevel(const bf_idx &idx) const
B-tree depth of the contained page.
Definition: page_evictioner_filter.hpp:1058
void updateOnPageFixed(bf_idx idx) noexcept final
Updates the eviction statistics of fixed (i.e. used) pages during eviction.
Definition: page_evictioner_filter.hpp:265
virtual void updateOnPageSwizzled(bf_idx idx) noexcept=0
Updates the eviction statistics of pages containing swizzled pointers during eviction.
void updateOnPageBlocked(bf_idx idx) noexcept final
Updates the eviction statistics of pages that cannot be evicted at all.
Definition: page_evictioner_filter.hpp:461
A generic page view: any Zero page can be viewed as being of this type but it only exposes fields sha...
Definition: generic_page.h:121
virtual void updateOnPageDirty(bf_idx idx) noexcept=0
Updates the eviction statistics of dirty pages during eviction.
bool filterAndUpdate(bf_idx idx) noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:375
void updateOnPageHit(bf_idx idx) noexcept final
Updates the eviction statistics on page hit.
Definition: page_evictioner_filter.hpp:716
virtual bool filter(bf_idx idx) const noexcept=0
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:31
void updateOnPageSwizzled(bf_idx idx) noexcept final
Updates the eviction statistics of pages containing swizzled pointers during eviction.
Definition: page_evictioner_filter.hpp:980
uint32_t bf_idx
Definition: basics.h:56
PageEvictionerFilter(const BufferPool *bufferPool)
Constructs a buffer frame filter.
Definition: page_evictioner_filter.hpp:25
PageEvictionerFilterGCLOCK(const BufferPool *bufferPool)
Constructs a GCLOCK buffer frame filter.
Definition: page_evictioner_filter.hpp:662
uint16_t tag
Page type (a page_tag_t)
Definition: generic_page.h:60
int level() const
Returns 1 if leaf, >1 if non-leaf.
Definition: btree_page_h.h:1181
void updateOnPageHit(bf_idx idx) noexcept final
Updates the eviction statistics on page hit.
Definition: page_evictioner_filter.hpp:238
uint32_t PageID
Definition: basics.h:45
std::vector< std::atomic< bool > > _refBits
Referenced bits for the buffer frames.
Definition: page_evictioner_filter.hpp:516
virtual void updateOnPageUnfix(bf_idx idx) noexcept=0
Updates the eviction statistics on page unfix.
const T max(const T x, const T y)
Definition: w_minmax.h:45
PageEvictionerFilterNone(const BufferPool *bufferPool)
Constructs a non-filtering buffer frame filter.
Definition: page_evictioner_filter.hpp:207
void updateOnPageFixed(bf_idx idx) noexcept final
Updates the eviction statistics of fixed (i.e. used) pages during eviction.
Definition: page_evictioner_filter.hpp:848
virtual void updateOnPointerSwizzling(bf_idx idx) noexcept=0
Updates the eviction statistics of pages when its pointer got swizzled in its parent page...
btree page
Definition: generic_page.h:90
void releaseInternalLatches() noexcept final
Releases the internal latches of this buffer frame filter.
Definition: page_evictioner_filter.hpp:509
void updateOnPointerSwizzling(bf_idx idx) noexcept final
Updates the eviction statistics of pages when its pointer got swizzled in its parent page...
Definition: page_evictioner_filter.hpp:503
void updateOnPageUnfix(bf_idx idx) noexcept final
Updates the eviction statistics on page unfix.
Definition: page_evictioner_filter.hpp:759
void updateOnPageBlocked(bf_idx idx) noexcept final
Updates the eviction statistics of pages that cannot be evicted at all.
Definition: page_evictioner_filter.hpp:283
void updateOnPageMiss(bf_idx idx, PageID pid) noexcept final
Updates the eviction statistics on page miss.
Definition: page_evictioner_filter.hpp:256
PageID pid() const
Definition: generic_page.h:146
void releaseInternalLatches() noexcept final
Releases the internal latches of this buffer frame filter.
Definition: page_evictioner_filter.hpp:316
virtual void updateOnPageFixed(bf_idx idx) noexcept=0
Updates the eviction statistics of fixed (i.e. used) pages during eviction.
bool filter(bf_idx idx) const noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:358
void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final
Updates the eviction statistics on explicit unbuffer.
Definition: page_evictioner_filter.hpp:491
void updateOnPageSwizzled(bf_idx idx) noexcept final
Updates the eviction statistics of pages containing swizzled pointers during eviction.
Definition: page_evictioner_filter.hpp:475
void updateOnPageDirty(bf_idx idx) noexcept final
Updates the eviction statistics of dirty pages during eviction.
Definition: page_evictioner_filter.hpp:447
A buffer manager that exploits the tree structure of indexes.
Definition: buffer_pool.hpp:40
virtual void updateOnPageHit(bf_idx idx) noexcept=0
Updates the eviction statistics on page hit.
PageEvictionerFilterCLOCK(const BufferPool *bufferPool)
Constructs a CLOCK buffer frame filter.
Definition: page_evictioner_filter.hpp:343
GCLOCK buffer frame filter
Definition: page_evictioner_filter.hpp:655
void fix_nonbufferpool_page(generic_page *s)
Definition: fixable_page_h.cpp:117
void updateOnPageMiss(bf_idx b_idx, PageID pid) noexcept final
Updates the eviction statistics on page miss.
Definition: page_evictioner_filter.hpp:419
bool filter(bf_idx idx) const noexcept final
Filters a buffer frame for eviction.
Definition: page_evictioner_filter.hpp:217
void releaseInternalLatches() noexcept final
Releases the internal latches of this buffer frame filter.
Definition: page_evictioner_filter.hpp:1039
std::vector< std::atomic< uint16_t > > _refInts
Referenced integers for the buffer frames.
Definition: page_evictioner_filter.hpp:1080
void updateOnPointerSwizzling(bf_idx idx) noexcept final
Updates the eviction statistics of pages when its pointer got swizzled in its parent page...
Definition: page_evictioner_filter.hpp:1033
virtual bool filterAndUpdate(bf_idx idx) noexcept=0
Filters a buffer frame for eviction.
Buffer frame filter for the Select-and-Filter page evictioner.
Definition: page_evictioner_filter.hpp:18
void updateOnPointerSwizzling(bf_idx idx) noexcept final
Updates the eviction statistics of pages when its pointer got swizzled in its parent page...
Definition: page_evictioner_filter.hpp:310
void updateOnPageUnfix(bf_idx idx) noexcept final
Updates the eviction statistics on page unfix.
Definition: page_evictioner_filter.hpp:404
void updateOnPageSwizzled(bf_idx idx) noexcept final
Updates the eviction statistics of pages containing swizzled pointers during eviction.
Definition: page_evictioner_filter.hpp:292
virtual void updateOnPageBlocked(bf_idx idx) noexcept=0
Updates the eviction statistics of pages that cannot be evicted at all.
virtual ~PageEvictionerFilter()
Destructs a buffer frame filter.
Definition: page_evictioner_filter.hpp:31
CLOCK buffer frame filter
Definition: page_evictioner_filter.hpp:336
virtual void updateOnPageMiss(bf_idx idx, PageID pid) noexcept=0
Updates the eviction statistics on page miss.
void updateOnPageDirty(bf_idx idx) noexcept final
Updates the eviction statistics of dirty pages during eviction.
Definition: page_evictioner_filter.hpp:892
void updateOnPageDirty(bf_idx idx) noexcept final
Updates the eviction statistics of dirty pages during eviction.
Definition: page_evictioner_filter.hpp:274
None-filtering buffer frame filter.
Definition: page_evictioner_filter.hpp:200
void updateOnPageMiss(bf_idx b_idx, PageID pid) noexcept final
Updates the eviction statistics on page miss.
Definition: page_evictioner_filter.hpp:804
void updateOnPageExplicitlyUnbuffered(bf_idx idx) noexcept final
Updates the eviction statistics on explicit unbuffer.
Definition: page_evictioner_filter.hpp:301