20 #include <glog/logging.h>
38 <<
" prefetching " <<
get_name() <<
" from=" << from <<
", to=" << to;
73 for (uint8_t i = 0; i < count; ++i) {
88 for (uint8_t i = 0; i <= count; ++i) {
89 if (i < count && page->get_separator(i) >= from) {
96 for (uint8_t j = 0; j <= minipage.
key_count_; ++j) {
125 reinterpret_cast<Page**>(&child)));
ErrorCode prefetch_pages_follow(thread::Thread *context, DualPagePointer *pointer, bool vol_on, bool snp_on, KeySlice from, KeySlice to)
const KeySlice kInfimumSlice
const StorageName & get_name() const
ErrorCode find_or_read_a_snapshot_page(storage::SnapshotPagePointer page_id, storage::Page **out)
Find the given page in snapshot cache, reading it if not found.
SlotIndex get_key_count() const __attribute__((always_inline))
physical key count (those keys might be deleted) in this page.
KeySlice get_slice(SlotIndex index) const __attribute__((always_inline))
ErrorCode install_a_volatile_page(storage::DualPagePointer *pointer, storage::Page **installed_page)
Installs a volatile page to the given dual pointer as a copy of the snapshot page.
Represents a pointer to another page (usually a child page).
bool is_empty_range() const __attribute__((always_inline))
An empty-range page, either intermediate or border, never has any entries.
Page * to_page(const void *address)
super-dirty way to obtain Page the address belongs to.
Root package of FOEDUS (Fast Optimistic Engine for Data Unification Services).
bool is_border() const __attribute__((always_inline))
Represents one thread running on one NUMA core.
ThreadId get_thread_id() const
MiniPage & get_minipage(uint8_t index) __attribute__((always_inline))
Represents one border page in Masstree Storage.
DualPagePointer * get_next_layer(SlotIndex index) __attribute__((always_inline))
ErrorCode prefetch_pages_normalized(thread::Thread *context, bool install_volatile, bool cache_snapshot, KeySlice from, KeySlice to)
defined in masstree_storage_prefetch.cpp
uint64_t KeySlice
Each key slice is an 8-byte integer.
Common base of MasstreeIntermediatePage and MasstreeBorderPage.
VolatilePagePointer get_foster_minor() const __attribute__((always_inline))
VolatilePagePointer get_foster_major() const __attribute__((always_inline))
KeySlice get_separator(uint8_t index) const __attribute__((always_inline))
DualPagePointer pointers_[kMaxIntermediateMiniSeparators+1]
VolatilePagePointer volatile_pointer_
ErrorCode get_first_root(thread::Thread *context, bool for_write, MasstreeIntermediatePage **root)
Root-node related, such as a method to retrieve 1st-root, to grow, etc.
uint64_t stop()
Take another current time tick.
void prefetch_page_l2(const void *page)
Prefetch a page to L2/L3 cache.
SnapshotPagePointer snapshot_pointer_
Just a marker to denote that the memory region represents a data page.
P * resolve_cast(storage::VolatilePagePointer ptr) const
resolve() plus reinterpret_cast
KeySlice separators_[kMaxIntermediateMiniSeparators]
Same semantics as separators_ in enclosing class.
bool has_foster_child() const __attribute__((always_inline))
ErrorCode prefetch_pages_normalized_recurse(thread::Thread *context, bool install_volatile, bool cache_snapshot, KeySlice from, KeySlice to, MasstreePage *page)
double elapsed_us() const
#define CHECK_ERROR_CODE(x)
This macro calls x and checks its returned error code.
const KeySlice kSupremumSlice
Represents one intermediate page in Masstree Storage.
#define ASSERT_ND(x)
A warning-free wrapper macro of assert() that has no performance effect in release mode even when 'x'...
A high-resolution stop watch.
bool does_point_to_layer(SlotIndex index) const __attribute__((always_inline))
ErrorCode
Enum of error codes defined in error_code.xmacro.