Re: [PATCH] mm/thp: expose deferred split folio memory usage in meminfo

From: Ye Liu

Date: Sun Jul 19 2026 - 22:32:37 EST




在 2026/7/17 18:29, Johannes Weiner 写道:
> Hello,
>
> On Fri, Jul 17, 2026 at 05:38:10PM +0800, liuye wrote:
>>
>> 在 2026/7/17 17:24, Ye Liu 写道:
>>>
>>> 在 2026/7/17 16:08, Lorenzo Stoakes (ARM) 写道:
>>>> +cc Johannes
>>>>
>>>> On Fri, Jul 17, 2026 at 02:30:22PM +0800, Ye Liu wrote:
>>>>> From: Ye Liu <liuye@xxxxxxxxxx>
>>>>>
>>>>> Folios on the deferred split list hold physical memory that is
>>>>> invisible in meminfo. When a THP becomes partially mapped, the
>>>>> unmapped pages are removed from AnonPages but remain physically
>>>>> allocated until the shrinker splits the folio. This creates a
>>>>> memory accounting gap where used memory cannot be attributed to
>>>>> any meminfo field.
>>>> Is this really that much of an issue? You're not giving any use cases here.
>>>>
>>>> What real-world use case motivated this?
>>>>
>>> I have indeed encountered this situation in a customer environment,
>
> We have run into this before as well. It's not super
> rare. Applications do partial unmaps or protection changes with no
> awareness for THPs. The issue is likely to stick around with legacy
> software for some time.
>
> Do note that all information is there if you know how to look for
> it. But it is cumbersome and somewhat inconsistent, so I'm not opposed
> to fixing it:
>
>>> but the environment is complex, and I cannot clearly explain why this memory
>>> black hole occurs in that scenario.
>>> However, I will provide an example to reproduce it below.
>>> Use case: The system has 100GB of memory. A user-space program requests 80GB of memory.
>>> For each 2MB block, only one page is retained, and the mapping of all other pages is unmapped,
>>> while the process continues to run.
>>> You'll find that in meminfo, MemFree: only 12GB remains,
>>> but the process actually uses very little memory.
>>> This creates a memory black hole situation.
>>> Below is the test program I used, from AI.
>>>
>>
>> ps -p $(pgrep -d, test) -o pid,comm,%mem,rss,vsz
>>     PID COMMAND         %MEM   RSS    VSZ
>>    9358 test             0.1 165220 166032
>>
>>
>> MemTotal:       101606276 kB
>> MemFree:        13172092 kB
>> MemAvailable:   13569668 kB
>> Buffers:            5352 kB
>> Cached:          1169520 kB
>> SwapCached:            0 kB
>> Active:         84730404 kB
>> Inactive:        1129792 kB
>> Active(anon):   84730404 kB
>
> This shows actually allocated anon+shmem.
>
>> Inactive(anon):        0 kB
>> Active(file):          0 kB
>> Inactive(file):  1129792 kB
>> Unevictable:        6192 kB
>> Mlocked:              32 kB
>> SwapTotal:       4194300 kB
>> SwapFree:        4194300 kB
>> Zswap:                 0 kB
>> Zswapped:              0 kB
>> Dirty:                24 kB
>> Writeback:             0 kB
>> AnonPages:        969280 kB
>
> This shows anon *mapped*.
>
>> Mapped:           308848 kB
>> Shmem:             45076 kB
>
> This shows that your (in)active anon *isn't* driven by shmem.
>
>> KReclaimable:      96144 kB
>> Slab:             269540 kB
>> SReclaimable:      96144 kB
>> SUnreclaim:       173396 kB
>> KernelStack:       27584 kB
>> PageTables:       187408 kB
>> SecPageTables:         0 kB
>> NFS_Unstable:          0 kB
>> Bounce:                0 kB
>> WritebackTmp:          0 kB
>> CommitLimit:    54997436 kB
>> Committed_AS:    6628776 kB
>> VmallocTotal:   261087232 kB
>> VmallocUsed:       38696 kB
>> VmallocChunk:          0 kB
>> Percpu:            42800 kB
>> HardwareCorrupted:     0 kB
>> AnonHugePages:    413696 kB
>
> This shows anon pmd-mapped.
>
>> ShmemHugePages:        0 kB
>> ShmemPmdMapped:        0 kB
>> FileHugePages:    172032 kB
>> FilePmdMapped:     28672 kB
>
> This shows both allocated huge pages and the pmd-mapped portion.
>
> So you *can* work it out by looking at the LRU ((in)active) and
> cross-checking the shmem position. But it is awkward, granted.
Yes, R&D personnel may be able to draw conclusions through analysis,
but this is indeed not very intuitive for operations and maintenance personnel.
>
> IMO if there is a case to be made, it's doing the same split we do for
> file and shmem - AnonHugePages (allocated) and AnonPmdMapped.

This also adds a new field, which doesn't seem to be welcomed.

--
Thanks,
Ye Liu