diff --git a/tcmalloc/huge_page_filler.h b/tcmalloc/huge_page_filler.h index e13e8659a..36aec4472 100644 --- a/tcmalloc/huge_page_filler.h +++ b/tcmalloc/huge_page_filler.h @@ -20,18 +20,13 @@ #include #include -#include #include -#include #include "absl/algorithm/container.h" #include "absl/base/attributes.h" #include "absl/base/internal/cycleclock.h" #include "absl/base/optimization.h" #include "absl/base/thread_annotations.h" -#include "absl/numeric/bits.h" -#include "absl/status/status.h" -#include "absl/strings/str_format.h" #include "absl/strings/string_view.h" #include "absl/time/time.h" #include "absl/types/span.h" @@ -47,7 +42,7 @@ #include "tcmalloc/internal/optimization.h" #include "tcmalloc/internal/pageflags.h" #include "tcmalloc/internal/range_tracker.h" -#include "tcmalloc/internal/residency.h" +#include "tcmalloc/internal/timeseries_tracker.h" #include "tcmalloc/pages.h" #include "tcmalloc/span.h" #include "tcmalloc/stats.h" @@ -167,17 +162,6 @@ class PageTracker : public TList::Elem { Length free_pages() const; bool empty() const; - struct NativePageCounterInfo { - size_t n_free_swapped; - size_t n_used_swapped; - size_t n_used_unbacked; - size_t n_non_free_non_used_unbacked; - }; - - NativePageCounterInfo CountInfoInHugePage( - Residency::SinglePageBitmaps bitmaps, - int native_pages_in_huge_page) const; - bool unbroken() const { return unbroken_; } // Returns the hugepage whose availability is being tracked. @@ -405,8 +389,8 @@ class HugePageFiller { SubreleaseStats subrelease_stats() const { return subrelease_stats_; } HugePageFillerStats GetStats() const; - void Print(Printer& out, bool everything, Residency* residency = nullptr); - void PrintInPbtxt(PbtxtRegion& hpaa, Residency* residency = nullptr) const; + void Print(Printer& out, bool everything); + void PrintInPbtxt(PbtxtRegion& hpaa) const; template void ForEachHugePage(const F& func) @@ -650,76 +634,6 @@ inline Length PageTracker::free_pages() const { return kPagesPerHugePage - used_pages(); } -inline size_t scaleIdx(bool bit_shift_left, size_t idx, - int page_scale_bit_width) { - return bit_shift_left ? idx << page_scale_bit_width - : idx >> page_scale_bit_width; -} - -inline PageTracker::NativePageCounterInfo PageTracker::CountInfoInHugePage( - Residency::SinglePageBitmaps bitmaps, int native_pages_in_huge_page) const { - Bitmap unbacked = bitmaps.unbacked; - Bitmap swapped = bitmaps.swapped; - Bitmap free = free_.bits(); - Bitmap released_by_page = released_by_page_; - - int page_scale; - bool bit_shift_left; - // If the number of native pages per hugepage is greater than the number of - // TCMalloc pages per hugepage, scale up the tracker bitmap data to read - // native_pages_in_huge_page bits, else, scale down. - if (native_pages_in_huge_page > kPagesPerHugePage.raw_num()) { - page_scale = native_pages_in_huge_page / kPagesPerHugePage.raw_num(); - bit_shift_left = false; - } else { - page_scale = kPagesPerHugePage.raw_num() / native_pages_in_huge_page; - bit_shift_left = true; - } - int page_scale_bit_width = absl::bit_width(page_scale - 1); - TC_ASSERT_LT(scaleIdx(bit_shift_left, native_pages_in_huge_page - 1, - page_scale_bit_width), - kPagesPerHugePage.raw_num()); - size_t swapped_idx = 0; - size_t n_free_swapped = 0; - size_t n_used_swapped = 0; - size_t n_used_unbacked = 0; - size_t n_non_free_non_used_unbacked = 0; - while (swapped_idx < native_pages_in_huge_page) { - swapped_idx = swapped.FindSet(swapped_idx); - if (swapped_idx >= native_pages_in_huge_page) { - break; - } - // Number of free pages that are swapped - // free_bitmap 1 means used and 0 means free - if (!free.GetBit( - scaleIdx(bit_shift_left, swapped_idx, page_scale_bit_width))) { - ++n_free_swapped; - } else { - ++n_used_swapped; - } - swapped_idx++; - } - size_t unbacked_idx = 0; - while (unbacked_idx < native_pages_in_huge_page) { - unbacked_idx = unbacked.FindSet(unbacked_idx); - if (unbacked_idx >= native_pages_in_huge_page) { - break; - } - // Number of used pages that are unbacked - if (free.GetBit( - scaleIdx(bit_shift_left, unbacked_idx, page_scale_bit_width))) { - ++n_used_unbacked; - } - // Number of non-free non-used unbacked pages - if (released_by_page.GetBit( - scaleIdx(bit_shift_left, unbacked_idx, page_scale_bit_width))) { - ++n_non_free_non_used_unbacked; - } - unbacked_idx++; - } - return {n_free_swapped, n_used_swapped, n_used_unbacked, - n_non_free_non_used_unbacked}; -} template inline HugePageFiller::HugePageFiller( HugePageFillerDenseTrackerType dense_tracker_type, @@ -1303,8 +1217,7 @@ class UsageInfo { kNumTypes }; - explicit UsageInfo(Residency* residency) { - residency_ = residency; + UsageInfo() { size_t i; for (i = 0; i <= kBucketsAtBounds && i < kPagesPerHugePage.raw_num(); ++i) { bucket_bounds_[buckets_size_] = i; @@ -1336,52 +1249,12 @@ class UsageInfo { buckets_size_++; } - // Native page Histograms bounds - int kNativePagesInHugePage = residency->GetNativePagesInHugePage(); - const int step = kNativePagesInHugePage / kBucketsInBetween; - // Ensure that the number of native page buckets is at least the number of - // buckets at a bound. - TC_ASSERT_GE(kNativePagesInHugePage, kBucketsAtBounds); - // First kBucketsAtBounds buckets have a step size of 1 - for (int i = 0; i <= kBucketsAtBounds && - native_page_buckets_size_ < kNativePagesInHugePage; - ++i) { - native_page_bucket_bounds_[native_page_buckets_size_] = i; - native_page_buckets_size_++; - } - - // All the buckets in between should increment with a step of - // kNativePagesInHugePage / kBucketsInBetween - for (int i = 0; i < kNativePagesInHugePage - kBucketsAtBounds; ++i) { - int bound = - native_page_bucket_bounds_[native_page_buckets_size_ - 1] + step; - // We break early so that we can log histogram at the end with step 1 - if (bound >= kNativePagesInHugePage - kBucketsAtBounds) { - break; - } - native_page_bucket_bounds_[native_page_buckets_size_] = bound; - native_page_buckets_size_++; - } - - // End kBucketBoundsBuckets have a step size of 1 - for (int i = 0; i < kBucketsAtBounds; ++i) { - int end_bound = kNativePagesInHugePage - kBucketsAtBounds + i; - // Prevent duplicate end bounds from being added to the histogram - if (native_page_bucket_bounds_[native_page_buckets_size_ - 1] >= - end_bound) { - continue; - } - native_page_bucket_bounds_[native_page_buckets_size_] = end_bound; - native_page_buckets_size_++; - } - lifetime_bucket_bounds_[0] = 0; lifetime_bucket_bounds_[1] = 1; for (int i = 2; i <= kLifetimeBuckets; ++i) { lifetime_bucket_bounds_[i] = lifetime_bucket_bounds_[i - 1] * 10; } TC_CHECK_LE(buckets_size_, kBucketCapacity); - TC_CHECK_LE(native_page_buckets_size_, kBucketCapacity); } template @@ -1399,18 +1272,6 @@ class UsageInfo { return hugepage_backed_previously_released_; } - // Reports the number of native pages that are free and swapped. - size_t NumFreeSwapped() { return n_free_swapped_.raw_num(); } - // Reports the number of native pages that are used and swapped. - size_t NumUsedSwapped() { return n_used_swapped_.raw_num(); } - // Reports the number of native pages that are used and unbacked. - size_t NumUsedUnbacked() { return n_used_unbacked_.raw_num(); } - // Reports the number of native pages that are non-free, non-used, and - // unbacked. - size_t NumNonFreeNonUsedUnbacked() { - return n_non_free_non_used_unbacked_.raw_num(); - } - template void Record(const TrackerType& pt, PageFlags& pageflags, Type which, double clock_now, double clock_frequency) { @@ -1445,28 +1306,6 @@ class UsageInfo { } } ++total_pages_[which]; - - Residency::SinglePageBitmaps bitmaps = - residency_->GetUnbackedAndSwappedBitmaps(pt.location().start_addr()); - if (bitmaps.status == absl::StatusCode::kOk) { - const int kNativePagesInHugepage = residency_->GetNativePagesInHugePage(); - PageTracker::NativePageCounterInfo counter_info = - pt.CountInfoInHugePage(bitmaps, kNativePagesInHugepage); - - ++unbacked_histo_[which] - [NativePageBucketNum(bitmaps.unbacked.CountBits())]; - ++swapped_histo_[which][NativePageBucketNum(bitmaps.swapped.CountBits())]; - ++used_and_swapped_histo_[which][NativePageBucketNum( - counter_info.n_used_swapped)]; - ++used_and_unbacked_histo_[which][NativePageBucketNum( - counter_info.n_used_unbacked)]; - - n_free_swapped_ += Length(counter_info.n_free_swapped); - n_used_swapped_ += Length(counter_info.n_used_swapped); - n_used_unbacked_ += Length(counter_info.n_used_unbacked); - n_non_free_non_used_unbacked_ += - Length(counter_info.n_non_free_non_used_unbacked); - } } void Print(Printer& out) { @@ -1515,29 +1354,6 @@ class UsageInfo { PrintHisto(out, long_lived_hps_histo_[type], type, "hps with a <= # of allocations < b", 0); } - for (int i = 0; i < kNumTypes; ++i) { - const Type type = static_cast(i); - PrintNativePageHisto(out, unbacked_histo_[type], type, - "hps with a <= # of unbacked < b", 0); - } - - for (int i = 0; i < kNumTypes; ++i) { - const Type type = static_cast(i); - PrintNativePageHisto(out, swapped_histo_[type], type, - "hps with a <= # of swapped < b", 0); - } - - for (int i = 0; i < kNumTypes; ++i) { - const Type type = static_cast(i); - PrintNativePageHisto(out, used_and_swapped_histo_[type], type, - "hps with a <= # of used and swapped < b", 0); - } - - for (int i = 0; i < kNumTypes; ++i) { - const Type type = static_cast(i); - PrintNativePageHisto(out, used_and_unbacked_histo_[type], type, - "hps with a <= # of used and unbacked < b", 0); - } for (int i = 0; i < kNumTypes; ++i) { const Type type = static_cast(i); @@ -1563,12 +1379,6 @@ class UsageInfo { "low_occupancy_lifetime_histogram"); PrintHisto(scoped, long_lived_hps_histo_[i], "long_lived_hugepages_histogram", 0); - PrintNativePageHisto(scoped, unbacked_histo_[i], "unbacked_histogram", 0); - PrintNativePageHisto(scoped, swapped_histo_[i], "swapped_histogram", 0); - PrintNativePageHisto(scoped, used_and_swapped_histo_[i], - "used_and_swapped_histogram", 0); - PrintNativePageHisto(scoped, used_and_unbacked_histo_[i], - "used_and_unbacked_histogram", 0); scoped.PrintI64("total_pages", total_pages_[type]); scoped.PrintI64("num_pages_hugepage_backed", hugepage_backed_[type]); } @@ -1587,9 +1397,8 @@ class UsageInfo { static constexpr Length kLowOccupancyNumFreePages = Length(kPagesPerHugePage.raw_num() - (kPagesPerHugePage.raw_num() >> 3)); // 16 buckets in the middle. - static constexpr size_t kBucketsInBetween = 16; static constexpr size_t kBucketCapacity = - kBucketsAtBounds + kBucketsInBetween + kBucketsAtBounds; + kBucketsAtBounds + 16 + kBucketsAtBounds; using Histo = size_t[kBucketCapacity]; using LifetimeHisto = size_t[kLifetimeBuckets]; @@ -1608,13 +1417,6 @@ class UsageInfo { TC_CHECK_NE(it, lifetime_bucket_bounds_); return it - lifetime_bucket_bounds_ - 1; } - int NativePageBucketNum(size_t page) { - auto it = - std::upper_bound(native_page_bucket_bounds_, - native_page_bucket_bounds_ + buckets_size_, page); - TC_CHECK_NE(it, native_page_bucket_bounds_); - return it - native_page_bucket_bounds_ - 1; - } void PrintHisto(Printer& out, Histo h, Type type, absl::string_view blurb, size_t offset) { @@ -1628,18 +1430,6 @@ class UsageInfo { out.printf("\n"); } - void PrintNativePageHisto(Printer& out, Histo h, Type type, - absl::string_view blurb, size_t offset) { - out.printf("\nHugePageFiller: # of %s %s", TypeToStr(type), blurb); - for (size_t i = 0; i < native_page_buckets_size_; ++i) { - if (i % 6 == 0) { - out.printf("\nHugePageFiller:"); - } - out.printf(" <%3zu<=%6zu", native_page_bucket_bounds_[i] + offset, h[i]); - } - out.printf("\n"); - } - void PrintLifetimeHisto(Printer& out, Histo h, Type type, absl::string_view blurb) { out.printf("\nHugePageFiller: # of %s %s", TypeToStr(type), blurb); @@ -1666,21 +1456,6 @@ class UsageInfo { } } - void PrintNativePageHisto(PbtxtRegion& hpaa, Histo h, absl::string_view key, - size_t offset) { - for (size_t i = 0; i < buckets_size_; ++i) { - if (h[i] == 0) continue; - auto hist = hpaa.CreateSubRegion(key); - hist.PrintI64("lower_bound", native_page_bucket_bounds_[i] + offset); - hist.PrintI64( - "upper_bound", - (i == buckets_size_ - 1 ? native_page_bucket_bounds_[i] - : native_page_bucket_bounds_[i + 1] - 1) + - offset); - hist.PrintI64("value", h[i]); - } - } - void PrintLifetimeHisto(PbtxtRegion& hpaa, Histo h, absl::string_view key) { for (size_t i = 0; i < kLifetimeBuckets; ++i) { if (h[i] == 0) continue; @@ -1755,35 +1530,15 @@ class UsageInfo { Histo free_page_histo_[kNumTypes]{}; Histo longest_free_histo_[kNumTypes]{}; Histo nalloc_histo_[kNumTypes]{}; - Histo unbacked_histo_[kNumTypes]{}; - Histo swapped_histo_[kNumTypes]{}; - Histo used_and_swapped_histo_[kNumTypes]{}; - Histo used_and_unbacked_histo_[kNumTypes]{}; LifetimeHisto lifetime_histo_[kNumTypes]{}; Histo long_lived_hps_histo_[kNumTypes]{}; LifetimeHisto low_occupancy_lifetime_histo_[kNumTypes]{}; size_t bucket_bounds_[kBucketCapacity]; - size_t native_page_bucket_bounds_[kBucketCapacity]; size_t lifetime_bucket_bounds_[kBucketCapacity]; size_t hugepage_backed_[kNumTypes] = {0}; size_t total_pages_[kNumTypes] = {0}; size_t hugepage_backed_previously_released_ = 0; - typedef Length NativeLength; - // n_free_swapped_ is the number of native pages which are free and swapped. - NativeLength n_free_swapped_; - // n_used_unbacked_ is the number of native pages which are used and - // unbacked. - NativeLength n_used_unbacked_; - // n_used_swapped_ is the number of native pages which are used and swapped. - NativeLength n_used_swapped_; - // n_non_free_non_used_unbacked_ is the number of native pages which are not - // free, unused and unbacked. Pages that are not free and unused indicate that - // they are released. - NativeLength n_non_free_non_used_unbacked_; - int buckets_size_ = 0; - int native_page_buckets_size_ = 0; - Residency* residency_; }; } // namespace huge_page_filler_internal @@ -1842,8 +1597,7 @@ inline HugePageFillerStats HugePageFiller::GetStats() const { } template -inline void HugePageFiller::Print(Printer& out, bool everything, - Residency* residency) { +inline void HugePageFiller::Print(Printer& out, bool everything) { out.printf("HugePageFiller: densely pack small requests into hugepages\n"); const HugePageFillerStats stats = GetStats(); @@ -1923,12 +1677,7 @@ inline void HugePageFiller::Print(Printer& out, bool everything, // Compute some histograms of fullness. using huge_page_filler_internal::UsageInfo; - std::optional residency_obj; - if (residency == nullptr) { - residency_obj.emplace(); - residency = &*residency_obj; - } - UsageInfo usage(residency); + UsageInfo usage; const double now = clock_.now(); const double frequency = clock_.freq(); PageFlags pageflags; @@ -2000,8 +1749,7 @@ inline void HugePageFiller::PrintAllocStatsInPbtxt( } template -inline void HugePageFiller::PrintInPbtxt( - PbtxtRegion& hpaa, Residency* residency) const { +inline void HugePageFiller::PrintInPbtxt(PbtxtRegion& hpaa) const { const HugePageFillerStats stats = GetStats(); // A donated alloc full list is impossible because it would have never been @@ -2067,12 +1815,7 @@ inline void HugePageFiller::PrintInPbtxt( subrelease_stats_.total_hugepages_broken_due_to_limit.raw_num()); // Compute some histograms of fullness. using huge_page_filler_internal::UsageInfo; - std::optional residency_obj; - if (residency == nullptr) { - residency_obj.emplace(); - residency = &*residency_obj; - } - UsageInfo usage(residency); + UsageInfo usage; const double now = clock_.now(); const double frequency = clock_.freq(); PageFlags pageflags; @@ -2116,12 +1859,6 @@ inline void HugePageFiller::PrintInPbtxt( hpaa.PrintI64("filler_previously_released_backed_huge_pages", usage.HugepageBackedPreviouslyReleased()); - - hpaa.PrintI64("filler_num_free_pages_swapped", usage.NumFreeSwapped()); - hpaa.PrintI64("filler_num_used_pages_swapped", usage.NumUsedSwapped()); - hpaa.PrintI64("filler_num_used_pages_unbacked", usage.NumUsedUnbacked()); - hpaa.PrintI64("filler_num_non_free_non_used_unbacked_pages", - usage.NumNonFreeNonUsedUnbacked()); usage.Print(hpaa); fillerstats_tracker_.PrintSubreleaseStatsInPbtxt(hpaa, "filler_skipped_subrelease"); diff --git a/tcmalloc/huge_page_filler_test.cc b/tcmalloc/huge_page_filler_test.cc index 31993820a..5f3adcbc0 100644 --- a/tcmalloc/huge_page_filler_test.cc +++ b/tcmalloc/huge_page_filler_test.cc @@ -17,13 +17,9 @@ #include #include #include -#include #include #include -#include -#include -#include #include #include #include @@ -38,7 +34,6 @@ #include "absl/container/flat_hash_set.h" #include "absl/flags/flag.h" #include "absl/random/random.h" -#include "absl/status/status.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_join.h" #include "absl/strings/string_view.h" @@ -52,8 +47,6 @@ #include "tcmalloc/internal/clock.h" #include "tcmalloc/internal/config.h" #include "tcmalloc/internal/logging.h" -#include "tcmalloc/internal/range_tracker.h" -#include "tcmalloc/internal/residency.h" #include "tcmalloc/pages.h" #include "tcmalloc/span.h" #include "tcmalloc/stats.h" @@ -264,42 +257,6 @@ class PageTrackerTest : public testing::Test { } }; -class FakeResidency : public Residency { - public: - FakeResidency() : native_pages_in_huge_page_(kMaxResidencyBits) {} - explicit FakeResidency(size_t native_pages_in_huge_page) { - native_pages_in_huge_page_ = native_pages_in_huge_page; - }; - std::optional Get(const void* addr, size_t size) override { - return std::nullopt; - }; - - // Returns a bitmap of pages that are unbacked and a bitmap of pages that are - // swapped. - // The histogram creates bitmaps with the following pattern: - // unbacked: h - // swapped: s - // | h | h | | | - // | | | s | s | - SinglePageBitmaps GetUnbackedAndSwappedBitmaps(const void* addr) override { - Bitmap page_unbacked; - Bitmap page_swapped; - ResidencyPageMap residency; - size_t kNativePagesInHugePage = residency.GetNativePagesInHugePage(); - page_unbacked.SetRange(0, kNativePagesInHugePage / 2); - page_swapped.SetRange(kNativePagesInHugePage / 2, - kNativePagesInHugePage / 2); - return SinglePageBitmaps{page_unbacked, page_swapped, - absl::StatusCode::kOk}; - }; - size_t GetNativePagesInHugePage() const override { - return native_pages_in_huge_page_; - }; - - private: - size_t native_pages_in_huge_page_; -}; - TEST_F(PageTrackerTest, AllocSane) { Length free = kPagesPerHugePage; auto n = Length(1); @@ -652,54 +609,6 @@ TEST_F(PageTrackerTest, b151915873) { &small.normal_length[kMaxPages.raw_num()])); } -TEST_F(PageTrackerTest, CountInfoInHugePage) { - // This test verifies that CountInfoInHugePage returns the correct number of - // free_swapped, used_swapped, used_unbacked, and non_free_non_used_unbacked - // pages. - // The test creates a hugepage with the following pattern: - // unbacked: h - // swapped: s - // used: u - // free: f - - // | h | h | | | - // | | | s | s | - // | u | | u | | - // | | f | | f | - - static const Length kAllocSize = kPagesPerHugePage / 4; - SpanAllocInfo info = {1, AccessDensityPrediction::kSparse}; - Get(kAllocSize - Length(4), info); // 60 used pages - PAlloc a2 = Get(kAllocSize, info); // 64 free pages - Get(kAllocSize + Length(3), info); // 67 used pages - PAlloc a4 = Get(kAllocSize + Length(1), info); // 65 free pages - Put(a2); - Put(a4); - // We now have a hugepage that looks like [alloced] [free] [alloced] [free]. - // The free parts should be released when we mark the hugepage as such, - // but not the allocated parts. - ExpectPages(a2, /*success=*/true); - ExpectPages(a4, /*success=*/false); - ReleaseFree(); - mock_.VerifyAndClear(); - - EXPECT_EQ(tracker_.released_pages(), a2.n); - EXPECT_EQ(tracker_.free_pages(), a2.n + a4.n); - - FakeResidency fake_residency; - FakeResidency::SinglePageBitmaps bitmaps = - fake_residency.GetUnbackedAndSwappedBitmaps( - tracker_.location().start_addr()); - int native_pages_in_huge_page = fake_residency.GetNativePagesInHugePage(); - PageTracker::NativePageCounterInfo counter_info = - tracker_.CountInfoInHugePage(bitmaps, native_pages_in_huge_page); - - EXPECT_EQ(counter_info.n_free_swapped, native_pages_in_huge_page / 4 + 2); - EXPECT_EQ(counter_info.n_used_swapped, native_pages_in_huge_page / 4 - 2); - EXPECT_EQ(counter_info.n_used_unbacked, native_pages_in_huge_page / 4); - EXPECT_EQ(counter_info.n_non_free_non_used_unbacked, - native_pages_in_huge_page / 4); -} class BlockingUnback final : public MemoryModifyFunction { public: constexpr BlockingUnback() = default; @@ -3837,101 +3746,6 @@ TEST_P(FillerTest, CheckFillerStats_SpansAllocated) { Delete(alloc); } } -// Test the native page bounds where kNativePagesInHugePage (kernel) is < -// kPagesPerHugePage (tcmalloc), kNativePagesInHugePage = kPagesPerHugePage, -// kNativePagesInHugePage > kPagesPerHugePage. -TEST_P(FillerTest, CheckNativePageHistoBounds) { - if (std::get<0>(GetParam()) == - HugePageFillerDenseTrackerType::kSpansAllocated) { - GTEST_SKIP() << "Skipping test for kSpansAllocated"; - } - if (kPagesPerHugePage != Length(256)) { - // The output is hardcoded on this assumption, and dynamically calculating - // it would be way too much of a pain. - return; - } - // Case for 256 KiB pages, 8 pages in a huge page region - FakeResidency residency_8_native_pages(8); - std::string buffer(1024 * 1024, '\0'); - { - PageHeapSpinLockHolder l; - Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &residency_8_native_pages); - } - buffer.resize(strlen(buffer.c_str())); - EXPECT_THAT(buffer, testing::HasSubstr(R"( -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 -)")); - - // Case for 128 KiB pages, 16 pages in a huge page region - FakeResidency residency_16_native_pages(16); - { - PageHeapSpinLockHolder l; - Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &residency_16_native_pages); - } - buffer.resize(strlen(buffer.c_str())); - EXPECT_THAT(buffer, testing::HasSubstr(R"( -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 9<= 0 < 10<= 0 < 11<= 0 -HugePageFiller: < 12<= 0 < 13<= 0 < 14<= 0 < 15<= 0 -)")); - - // Case for arm 64 KiB native pages, 32 pages in a huge page region - FakeResidency residency_32_native_pages(32); - { - PageHeapSpinLockHolder l; - Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &residency_32_native_pages); - } - buffer.resize(strlen(buffer.c_str())); - EXPECT_THAT(buffer, testing::HasSubstr(R"( -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 10<= 0 < 12<= 0 < 14<= 0 -HugePageFiller: < 16<= 0 < 18<= 0 < 20<= 0 < 22<= 0 < 24<= 0 < 25<= 0 -HugePageFiller: < 26<= 0 < 27<= 0 < 28<= 0 < 29<= 0 < 30<= 0 < 31<= 0 -)")); - - // Case for 8 KiB kib pages, 256 pages in a huge page region - FakeResidency residency_256_native_pages(256); - { - PageHeapSpinLockHolder l; - Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &residency_256_native_pages); - } - buffer.resize(strlen(buffer.c_str())); - EXPECT_THAT(buffer, testing::HasSubstr(R"( -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 24<= 0 < 40<= 0 < 56<= 0 -HugePageFiller: < 72<= 0 < 88<= 0 <104<= 0 <120<= 0 <136<= 0 <152<= 0 -HugePageFiller: <168<= 0 <184<= 0 <200<= 0 <216<= 0 <232<= 0 <248<= 0 -HugePageFiller: <249<= 0 <250<= 0 <251<= 0 <252<= 0 <253<= 0 <254<= 0 -HugePageFiller: <255<= 0 -)")); - - // Case for 4kib native pages, 512 pages in a huge page region - FakeResidency residency_512_native_pages(512); - { - PageHeapSpinLockHolder l; - Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &residency_512_native_pages); - } - buffer.resize(strlen(buffer.c_str())); - EXPECT_THAT(buffer, testing::HasSubstr(R"( -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 -)")); -} // Test the output of Print(). This is something of a change-detector test, // but that's not all bad in this case. @@ -3951,12 +3765,12 @@ TEST_P(FillerTest, Print) { // chosen at random. randomize_density_ = false; auto allocs = GenerateInterestingAllocs(); - FakeResidency fake_residency; + std::string buffer(1024 * 1024, '\0'); { PageHeapSpinLockHolder l; Printer printer(&*buffer.begin(), buffer.size()); - filler_.Print(printer, /*everything=*/true, &fake_residency); + filler_.Print(printer, /*everything=*/true); buffer.erase(printer.SpaceRequired()); } @@ -4242,230 +4056,6 @@ HugePageFiller: <160<= 0 <176<= 0 <192<= 0 <208<= 0 <224<= 0 HugePageFiller: <248<= 0 <249<= 0 <250<= 0 <251<= 0 <252<= 0 <253<= 0 HugePageFiller: <254<= 0 <255<= 0 -HugePageFiller: # of sparsely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed regular hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of donated hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 1 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed partial released hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed partial released hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed released hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed released hps with a <= # of unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed regular hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed regular hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of donated hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 1 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed partial released hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed partial released hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed released hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed released hps with a <= # of swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed regular hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed regular hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of donated hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 1 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed partial released hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed partial released hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed released hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed released hps with a <= # of used and swapped < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed regular hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed regular hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 5 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of donated hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 1 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed partial released hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed partial released hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 0 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of sparsely-accessed released hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - -HugePageFiller: # of densely-accessed released hps with a <= # of used and unbacked < b -HugePageFiller: < 0<= 0 < 1<= 0 < 2<= 0 < 3<= 0 < 4<= 0 < 5<= 0 -HugePageFiller: < 6<= 0 < 7<= 0 < 8<= 0 < 40<= 0 < 72<= 0 <104<= 0 -HugePageFiller: <136<= 0 <168<= 0 <200<= 0 <232<= 2 <264<= 0 <296<= 0 -HugePageFiller: <328<= 0 <360<= 0 <392<= 0 <424<= 0 <456<= 0 <488<= 0 -HugePageFiller: <504<= 0 <505<= 0 <506<= 0 <507<= 0 <508<= 0 <509<= 0 -HugePageFiller: <510<= 0 <511<= 0 - HugePageFiller: 0 of sparsely-accessed regular pages hugepage backed out of 5. HugePageFiller: 0 of densely-accessed regular pages hugepage backed out of 5. HugePageFiller: 0 of donated pages hugepage backed out of 1.