Thread (8 messages) 8 messages, 2 authors, 7d ago

Re: [PATCH 00/18] Another attempt at HVO support on arm64

From: James Houghton <hidden>
Date: 2026-07-13 04:10:04
Also in: linux-mm, lkml

On Thu, Jul 9, 2026 at 8:41 PM Muchun Song [off-list ref] wrote:
quoted
On Jul 10, 2026, at 03:04, James Houghton [off-list ref] wrote:

On Thu, Jul 9, 2026 at 2:55 AM Muchun Song [off-list ref] wrote:
quoted
quoted
On Jul 9, 2026, at 00:49, James Houghton [off-list ref] wrote:

On Wed, Jul 8, 2026 at 1:41 AM Muchun Song [off-list ref] wrote:
quoted
Do you mean that the support for AF might vary across different CPUs?
I'm not that familiar with arm64, so it seems a bit strange to me that
such basic hardware features can differ so much from one CPU to another.
Yes, hardware updates of the Access Flag is a per-CPU feature. It is
available for a CPU to use if TCR_EL1.HA is set. TCR_EL1 is a system
register; each CPU has its own. (Linux will always enable HW AF for a
CPU when it is onlined[1] if support is advertised, so we simply need
to check if support is advertised to know that it is in fact enabled.)

These days it is not uncommon for a system to have two (or more?)
different core implementations, like with "fast" cores and "efficient"
cores.

[1] See the CONFIG_ARM64_HW_AFDBM bits in arch/arm64/mm/proc.S
Thanks for your detailed explanation. When enabling HVO via the cmdline,
can we simply prevent CPUs that do not support AF from coming online?
Would implementing it this way be much simpler? In practice, developers
definitely know whether the current system is suitable for enabling HVO.
If some CPUs do not support AF, they would just need to evaluate the
trade-off between memory savings and having fewer online CPUs than expected.

For scenarios where HVO is enabled via sysctl, we simply need to check
if all CPUs support AF. If any do not, the system should return an error.

Then, we can proceed with the Pre-HVO.
I don't think it makes sense to try to implement pre-HVO.

We cannot do HVO if any boot CPUs do not support HW AF, as HW AF will
be required to free the HugeTLB pages later, which we should continue
to support. Pre-HVO (today anyway) happens before all boot CPUs are
onlined. IMO it is not okay to prevent boot CPUs from onlining.
When the boot CPU starts, it first checks if the hardware (the current
boot CPU) supports AF (The selection of the Boot CPU is critical here
If the user really wants to enable HVO). If AF is supported and HVO is
enabled via cmdline, we perform a Pre-HVO. Subsequently, any CPUs that
do not support AF will be prevented from coming online.
I understand. I don't think we should do this. I think it's much
better to always be able to start all boot CPUs[1] and simply rely on
"normal" HVO.

[1] Just to be clear on terminology, I'm using "boot CPUs" to refer to
all CPUs that are onlined at boot-time, not just to *the* boot CPU
that starts the kernel.
If the boot CPU does not support AF, enabling HVO is not permitted—neither
via cmdline nor sysctl. All CPUs are allowed to be online.

Once the system has started, there is only one way to enable HVO, and
that is through sysctl. 1) If the current system includes any CPUs that do
not support AF, enabling HVO is not permitted (unless the user chooses to
take these CPUs that don't support AF offline). 2) If all online CPUs in the
current system support AF, then HVO can be enabled. In this case, the
system must also block any CPUs that do not support AF from coming online
in the future.
An approach similar to this is implemented in this series: if there
are (or were) any HVOed folios, onlining a CPU without HW AF is not
allowed. If HW AF is not supported by any onlined CPU, HVO cannot
proceed (though it will appear to be enabled).

I probably should have integrated
`arch_hugetlb_vmemmap_optimization_supported()` and a `hvo_status`
check into the sysctl handler for HVO. I'll do this if it is still
relevant in v2.
Of course, if a user specifically wants those CPUs to be
allowed to come online, they can choose to disable HVO first (At the same time,
this means that the HVO-optimized HugeTLB must be freed first as well).
I could make it so that, if there are no HVOed pages anymore, onlining
incompatible CPUs becomes permitted again. I don't really see the need
to do this.
My proposal assumes that even though the system supports different types of
CPUs, their support for AF (I suppose this is a very basic feature nowadays)
is generally the same. I believe that for servers (Only servers stand to
benefit more from HVO), there shouldn't be a mix of those that support AF
and those that don't. At the very least, such a situation would be extremely
uncommon. I believe this may be acceptable. That said, if we go this route,
is there a way to simplify the code implementation even further?. Of course,
this is just my personal speculation. Please let me know if I've missed
anything.
I agree that systems where HVO is relevant are very unlikely to have
mixed support for HW AF.

I don't think the approach you're suggesting in this email (as I've
understood it) simplifies this series.

I don't want to mess with the arm64 cpufeature bits more than I've
done here; preventing boot CPUs from onlining will certainly be more
work. :) And then your other suggestions seem to be quite similar to
what is already in these patches.

I am happy to get rid of the "disable HVO if it is unused and a CPU
without support is onlined" part though and replace it with something
similar (the simplification from the other thread[2]).

[2] https://lore.kernel.org/linux-mm/674EC6D6-B1F7-447D-B462-861ECA5A99B7@linux.dev/ (local)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help