From: SJ Park <sj@kernel.org>
To: Gutierrez Asier <gutierrez.asier@huawei-partners.com>
Cc: SJ Park <sj@kernel.org>,
artem.kuzin@huawei.com, stepanov.anatoly@huawei.com,
wangkefeng.wang@huawei.com, yanquanmin1@huawei.com,
zuoze1@huawei.com, damon@lists.linux.dev,
akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 0/3] mm/damon: Introduce a huge page collapsing mechanism using auto tuning
Date: Mon, 6 Jul 2026 08:16:17 -0700 [thread overview]
Message-ID: <20260706151618.94372-1-sj@kernel.org> (raw)
In-Reply-To: <a13ae1ad-7dc9-4cf0-8dff-a1ef71454b7e@huawei-partners.com>
On Mon, 6 Jul 2026 18:03:03 +0300 Gutierrez Asier <gutierrez.asier@huawei-partners.com> wrote:
> Hi SJ,
>
> On 6/20/2026 8:11 PM, Gutierrez Asier wrote:
> > Hi SJ,
> >
> > So sorry, I missed your email. I just found it. Sorry for the late answer.
> >
> > On 6/17/2026 4:44 AM, SeongJae Park wrote:
> >> On Tue, 16 Jun 2026 15:03:13 +0000 <gutierrez.asier@huawei-partners.com> wrote:
> >>
> >>> From: Asier Gutierrez <gutierrez.asier@huawei-partners.com>
> >>>
> >>> Overview
> >>> ========
> >>>
> >>> This patch set introduces a new autotuning which allows to collapse
> >>> hot regions into hugepages.
> >>>
> >>> Motivation
> >>> ==========
> >>>
> >>> Since TLB is a bottleneck for many systems[1], a way to optimize TLB
> >>> misses (or hits) is to use huge pages. Unfortunately, using "always"
> >>> in THP leads to memory fragmentation and memory waste. For this reason,
> >>> most application guides and system administrators suggest to disable THP.
> >>>
> >>> Currently DAMON has DAMOS_HUGEPAGE, DAMOS_NONHUGEPAGE and DAMOS_COLLAPSE.
> >>> However, there is no way to tune the settings. It will collapse all the
> >>> hot regions that meet the access pattern. If the server is a bare metal
> >>> database or big data server, this will also lead to eventual fragmentation.
> >>>
> >>> Additionally, currently THP is set globally. Ideally, there should be a
> >>> way to control which tasks can use huge pages.
> >>
> >> Could you please reword for prctl(PR_SET_THP_DISABLE) like per-process control
> >> cases, as we discussed [1] on RFC v3?
> >>
> >>>
> >>> Solution
> >>> ========
> >>>
> >>> DAMON has now a way to autotune some of the variables and adjust quotas
> >>> automatically, so that DAMON is fired only under the right circumstances.
> >>> It would be nice to have something similar, but for huge pages.
> >>>
> >>> A new autotuning quota goal[2], damos_hugepage_mem_bp, is introduced,
> >>> which checks the huge page consumption to total memory consumption. This
> >>> new quota mechanism reuses current autotuning architecture.
> >>>
> >>> A new sample module (SAMPLE_DAMON_HPAGE) is introduced to demonstrate
> >>> the use of huge pages collapse autotuning. The goal is to collapse hot
> >>> regions of a given process into huge pages. The sample module launches
> >>> a kdamond thread for a certain task provided by the user through
> >>> taget_pid module argument. Hugepage goal autotuning will automatically
> >>> adjust the aggressiveness of hot region collapses.
> >>>
> >>> This sample module also has a user autotuning knob which allows the
> >>> user to adjust the aggressiveness of page collapsing.
> >>>
> >>> Benchmarks
> >>> ==========
> >>>
> >>> Huge page collapse autotuning was tested in a physicial machine with
> >>> MariaDB 10.5.29 and sysbench as the benchmark framework.
> >>>
> >>> The hugepage module was set up in the following way:
> >>>
> >>> # echo 1000 > min_age
> >>> # echo 1000 > quota_percentage_hugepage
> >>
> >> I guess this is the quota goal? What is the unit? I guess it is aparently not
> >> percentage? The name doesn't sound like very consistent or intuitive. How
> >> about hugepage_mem_bp or target_hugepage_mem_bp?
> > Right, we agreed to change the name. I will correct it.
> >>> # echo $(pidof mariadbd) > taget_pid
> >>> # echo on > enabled
> >>>
> >>> The goal was to achieve 5% of the total memory used as hugepage.
> >>
> >> I guess this is what the above example is setting using
> >> 'quotta_percentage_hugepage'? If so, it means the unit is 1/20000 ? Is this
> >> correct...?
> > I actually set it to 500. I will update the cover letter.
> >>> Since the database was not very big, we may not be able to achieve
> >>> high amount of huge pages per total memory consumption ratio.
> >>
> >> I believe this patch series will work as you explained. But, it seems bit
> >> weird to show a test result that doesn't demonstrate what this patch is aimed
> >> to achive. Could you increase the size of the database? IIRC, you were able
> >> to show the percentage is over-achived case in an early version.
> > Actually, this is what I got using the TEMPORAL quota goals. With the regular
> > quota goals, it actually over-achieves the goal.
> >
> > Is this an actual bug in the TEMPORAL quota goal?
> >>>
> >>> The table below shows the memory consumption over time. Timestamp is in
> >>> second and the memory usage in is MBytes. Gaps in the timestamp means
> >>> that no changes in the hugepage consumption happened over that period
> >>> of time in MB. The total used memory is calculated as
> >>> mem_total - mem free. The huge page used is calculated as
> >>> huge_page_anon + huge_page_shmem + huge_page_file. The table also
> >>> shows the huge pages to total memory ratio.
> >>>
> >>> Hugepage autotune benchmark:
> >>> +-----------+----------------+----------------+----------------------+
> >>> | timestamp | total mem used | huge page used | percentage hugepage |
> >>> +-----------+----------------+----------------+----------------------+
> >>> | 0 | 3044.988281 | 0 | 0% |
> >>> | 22 | 3160.207031 | 2 | 0.06% |
> >>> | 30 | 3250.90625 | 4 | 0.12% |
> >>> | 69 | 3781.238281 | 6 | 0.16% |
> >>> | 71 | 3822.226563 | 8 | 0.21% |
> >>> | 72 | 3846.578125 | 10 | 0.26% |
> >>> | 73 | 3852.402344 | 12 | 0.31% |
> >>> | 74 | 3868 | 14 | 0.36% |
> >>> | 75 | 3881.84375 | 104 | 2.68% |
> >>> | 275 | 4194.175781 | 106 | 2.52% |
> >>> +-----------+----------------+----------------+----------------------+
> >>> After second 275, no more pages are collapsed into hugepages
> >>>
> >>>
> >>> THP (always) benchmark:
> >>> +-----------+----------------+----------------+---------------------+
> >>> | timestamp | total mem used | huge page used | percentage hugepage |
> >>> +-----------+----------------+----------------+---------------------+
> >>> | 1 | 4489.320313 | 184 | 4.098615986 |
> >>> | 15 | 4581.871094 | 214 | 4.670580984 |
> >>> | 30 | 4757.742188 | 376 | 7.902908253 |
> >>> | 45 | 4937.574219 | 558 | 11.30109595 |
> >>> | 60 | 5147.867188 | 728 | 14.14177898 |
> >>> | 75 | 5407.0625 | 918 | 16.97779524 |
> >>> | 95 | 5668.796875 | 1040 | 18.34604455 |
> >>> | 105 | 5723.839844 | 1056 | 18.44915352 |
> >>> | 115 | 5736.84375 | 1072 | 18.68623317 |
> >>> | 125 | 5732.042969 | 1088 | 18.98101612 |
> >>> | 186 | 5753.601563 | 1184 | 20.57841488 |
> >>> | 246 | 5746.398438 | 1280 | 22.27482159 |
> >>> | 306 | 5752.128906 | 1376 | 23.92157795 |
> >>> | 367 | 5772.5625 | 1472 | 25.49994045 |
> >>> | 427 | 5832.019531 | 1568 | 26.88605536 |
> >>> | 488 | 5813.246094 | 1664 | 28.62428277 |
> >>> | 548 | 5807.621094 | 1760 | 30.30500736 |
> >>> | 598 | 5841.253906 | 1822 | 31.19193292 |
> >>> | 669 | 5982.160156 | 1854 | 30.99214918 |
> >>> | 931 | 5946.605469 | 1868 | 31.41287933 |
> >>> | 981 | 6020.207031 | 1896 | 31.49393352 |
> >>> | 991 | 5988.445313 | 1910 | 31.89475566 |
> >>> | 1011 | 5988.570313 | 1926 | 32.16126554 |
> >>> | 1032 | 6016.039063 | 1936 | 32.18064211 |
> >>> | 1575 | 6057.289063 | 1968 | 32.48978181 |
> >>> | 1606 | 6026.167969 | 2000 | 33.18858702 |
> >>> +-----------+----------------+----------------+---------------------+
> >>> I ignored some points to make the table shorter. Anyway, the amount
> >>> of memory consumption, total and huge pages, is a lot higher than
> >>> with DAMON hugepage autotuning.
> >>
> >> Could you further clarify why it is, and what this means
> > Memory fragmentation. I will add information about memory fragmentation
> > in the next cover letter. >>
> >>>
> >>> Performance:
> >>> Baseline (no THP, module off) -> 18,162.45 transactions per second
> >>> Hugepage autotune -> 18,211.82 transactions per second (+0.27% improvement)
> >>> THP always -> 18,388.3 (+1.24%)
> >>> THP madvise -> 18,179.25 (+0.09%)
> >>>
> >>> Improvement is due to lower TLB misses
> >>
> >> So this result says THP always is much better than the Hugepage autotune in
> >> terms of the performance. Maybe you want to claim Hugepage autotune is better
> >> in terms of the memory efficiency? Could you please clarify further?
> > It's better than THP "never", but worse than THP "always". THP "always" is worse
> > in terms of memory consumption, "always" is worse.
> >>>
> >>> Patches Sequence
> >>> ================
> >>> Patch 1 -> Introduce DAMOS_QUOTA_HUGEPAGE_MEM_BP and autotuning
> >>> Patch 2 -> Module that demonstrates how to use
> >>> DAMOS_QUOTA_HUGEPAGE_MEM_BP and DAMOS_QUOTA_GOAL_TUNER_TEMPORAL
> >>> Patch 3 -> Support for DAMOS_QUOTA_HUGEPAGE_MEM_BP in sysfs-schemes
> >>>
> >>> Changes from previous versions
> >>> ==============================
> >>> RFC 4[3] -> v1
> >>> - Renamed config to SAMPLE_DAMON_HPAGE, file to hpage.c and
> >>> functions to damon_sample_hpage_...
> >>> - Make the module depend on TRANSPARENT_HUGEPAGE, since
> >>> the module will need some THP functions anyway
> >>> - Removed documentation, since this is just a sample module
> >>> - Removed DAMOS_QUOTA_HUGEPAGE_MEM_BP from
> >>> damos_sysfs_add_quota_score
> >>> - Added a short description of the module in Kconfig
> >>
> >> Thank you for continuing this work!
> >>
> >> [...]
> >>
> >>> [1] https://dl.acm.org/doi/pdf/10.1145/3307650.3322227
> >>> [2] https://lore.kernel.org/e67f05ad-dbb9-45e6-ba30-b167a99ac67d@huawei-partners.com
> >>> [3] https://lore.kernel.org/20260611150244.3454699-1-gutierrez.asier@huawei-partners.com
> >>> [4] https://lore.kernel.org/20260604150338.501128-1-gutierrez.asier@huawei-partners.com
> >>> [5] https://lore.kernel.org/20260522145518.158910-1-gutierrez.asier@huawei-partners.com
> >>> [6] https://lore.kernel.org/20260522171210.900B11F00A3D@smtp.kernel.org
> >>> [7] https://lore.kernel.org/20260522171633.AAF5B1F000E9@smtp.kernel.org
> >>> [8] https://lore.kernel.org/20260430134139.2446417-1-gutierrez.asier@huawei-partners.com
> >>> [9] https://lore.kernel.org/all/20260430154338.E22E6C2BCB3@smtp.kernel.org/
> >>
> >> [1] https://lore.kernel.org/9f9e2159-5a6b-496f-9633-fa06c0217948@huawei-partners.com
> >>
> >>
> >> Thanks,
> >> SJ
> >>
> >> [...]
> >>
> >
> > SJ, once again, sorry for the late answer. Please, disregard my new patch set, I will fix
> > it with your feedback.
> >
>
> I didn't get a reply to this email.
I sent the reply [1] weeks ago.
>
> I will update the cover letter and submit a new patch set soon.
No, please. Let's fully complete the discussion before a new version.
[1] https://lore.kernel.org/20260620200254.82414-1-sj@kernel.org
Thanks,
SJ
[...]
prev parent reply other threads:[~2026-07-06 15:16 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-16 15:03 [PATCH v1 0/3] mm/damon: Introduce a huge page collapsing mechanism using auto tuning gutierrez.asier
2026-06-16 15:03 ` [PATCH v1 1/3] mm/damon: Introduce DAMOS_QUOTA_HUGEPAGE " gutierrez.asier
2026-06-17 3:31 ` SeongJae Park
2026-06-16 15:03 ` [PATCH v1 2/3] mm/damon: introduce DAMON_HUGEPAGE for hot region hugepage collapsing gutierrez.asier
2026-06-17 4:04 ` SeongJae Park
2026-06-18 0:16 ` SeongJae Park
2026-06-18 0:19 ` SeongJae Park
2026-06-18 11:51 ` Gutierrez Asier
2026-06-18 14:57 ` SeongJae Park
2026-06-18 14:59 ` Gutierrez Asier
2026-06-18 15:08 ` SeongJae Park
2026-06-17 16:12 ` Julian Braha
2026-06-18 0:18 ` SeongJae Park
2026-06-16 15:03 ` [PATCH v1 3/3] mm/damon/sysfs: support hugepage_mem_bp quota goal metric gutierrez.asier
2026-06-17 4:16 ` SeongJae Park
2026-06-17 1:44 ` [PATCH v1 0/3] mm/damon: Introduce a huge page collapsing mechanism using auto tuning SeongJae Park
2026-06-20 17:11 ` Gutierrez Asier
2026-06-20 20:02 ` SeongJae Park
2026-07-06 15:03 ` Gutierrez Asier
2026-07-06 15:16 ` SJ Park [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260706151618.94372-1-sj@kernel.org \
--to=sj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=artem.kuzin@huawei.com \
--cc=damon@lists.linux.dev \
--cc=gutierrez.asier@huawei-partners.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=stepanov.anatoly@huawei.com \
--cc=wangkefeng.wang@huawei.com \
--cc=yanquanmin1@huawei.com \
--cc=zuoze1@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox