Re: [RFC PATCH 02/12] khugepaged: Generalize alloc_charge_folio()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 17/12/24 8:21 am, Baolin Wang wrote:


On 2024/12/17 00:50, Dev Jain wrote:
Pass order to alloc_charge_folio() and update mTHP statistics.

Signed-off-by: Dev Jain <dev.jain@xxxxxxx>
---
  include/linux/huge_mm.h |  2 ++
  mm/huge_memory.c        |  4 ++++
  mm/khugepaged.c         | 13 +++++++++----
  3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index 93e509b6c00e..8b6d0fed99b3 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -119,6 +119,8 @@ enum mthp_stat_item {
      MTHP_STAT_ANON_FAULT_ALLOC,
      MTHP_STAT_ANON_FAULT_FALLBACK,
      MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE,
+    MTHP_STAT_ANON_COLLAPSE_ALLOC,
+    MTHP_STAT_ANON_COLLAPSE_ALLOC_FAILED,
      MTHP_STAT_ZSWPOUT,
      MTHP_STAT_SWPIN,
      MTHP_STAT_SWPIN_FALLBACK,
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 2da5520bfe24..2e582fad4c77 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -615,6 +615,8 @@ static struct kobj_attribute _name##_attr = __ATTR_RO(_name)
  DEFINE_MTHP_STAT_ATTR(anon_fault_alloc, MTHP_STAT_ANON_FAULT_ALLOC);
  DEFINE_MTHP_STAT_ATTR(anon_fault_fallback, MTHP_STAT_ANON_FAULT_FALLBACK);   DEFINE_MTHP_STAT_ATTR(anon_fault_fallback_charge, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE); +DEFINE_MTHP_STAT_ATTR(anon_collapse_alloc, MTHP_STAT_ANON_COLLAPSE_ALLOC); +DEFINE_MTHP_STAT_ATTR(anon_collapse_alloc_failed, MTHP_STAT_ANON_COLLAPSE_ALLOC_FAILED);
  DEFINE_MTHP_STAT_ATTR(zswpout, MTHP_STAT_ZSWPOUT);
  DEFINE_MTHP_STAT_ATTR(swpin, MTHP_STAT_SWPIN);
  DEFINE_MTHP_STAT_ATTR(swpin_fallback, MTHP_STAT_SWPIN_FALLBACK);
@@ -636,6 +638,8 @@ static struct attribute *anon_stats_attrs[] = {
      &anon_fault_alloc_attr.attr,
      &anon_fault_fallback_attr.attr,
      &anon_fault_fallback_charge_attr.attr,
+    &anon_collapse_alloc_attr.attr,
+    &anon_collapse_alloc_failed_attr.attr,
  #ifndef CONFIG_SHMEM
      &zswpout_attr.attr,
      &swpin_attr.attr,
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 95643e6e5f31..02cd424b8e48 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -1073,21 +1073,26 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm,
  }
    static int alloc_charge_folio(struct folio **foliop, struct mm_struct *mm,
-                  struct collapse_control *cc)
+                  int order, struct collapse_control *cc)
  {
      gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() :
               GFP_TRANSHUGE);
      int node = hpage_collapse_find_target_node(cc);
      struct folio *folio;
  -    folio = __folio_alloc(gfp, HPAGE_PMD_ORDER, node, &cc->alloc_nmask);
+    folio = __folio_alloc(gfp, order, node, &cc->alloc_nmask);
      if (!folio) {
          *foliop = NULL;
          count_vm_event(THP_COLLAPSE_ALLOC_FAILED);
+        if (order != HPAGE_PMD_ORDER)
+            count_mthp_stat(order, MTHP_STAT_ANON_COLLAPSE_ALLOC_FAILED);
          return SCAN_ALLOC_HUGE_PAGE_FAIL;
      }
        count_vm_event(THP_COLLAPSE_ALLOC);
+    if (order != HPAGE_PMD_ORDER)
+        count_mthp_stat(order, MTHP_STAT_ANON_COLLAPSE_ALLOC);

File collapse will also call alloc_charge_folio() to allocate THP, so using term '_ANON_' is not suitable for both anon and file collapse.

But currently file collapse will only allocate a PMD-folio, and I have extended to mTHP only for anon, so it makes sense? Although
I get your point in general...




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux