blob: b379e9b95731997844bb0a375a9b64b91f1cc6df [file] [log] [blame] [view]
# Huge Pages
From Android 15, the pKVM hypervisor supports Transparent Hugepages. This is a
Linux feature which allows the kernel to allocate, when possible, a huge-page
(typically, 2MiB on a 4K system). This huge-page being the size of a block,
the hypervisor can leverage this allocation to also use a block mapping
in the stage-2 page tables, instead of 512 individual contiguous single page
mappings.
Using block mappings brings a significant performance improvement by reducing
the number of stage-2 page faults as well as the TLB pressure. However, finding
a huge-page can be difficult on a system where the memory is fragmented.
By default, huge-pages are disabled.
## Enabling THP
### 1. Sysfs configuration
The sysfs configuration file that will enable THP for AVF is
```
/sys/kernel/mm/transparent_hugepages/shmem_enabled
```
This always defaults to `never`. It is recommended to set it to `advise` to
benefit from the THP performance improvement.
THPs can have an impact on the system depending on the chosen policy. The
policy is configured with the following sysfs file:
```
/sys/kernel/mm/transparent_hugepages/defrag
```
The recommended policy is `never` as this has zero impact on the system. THPs
would be used only if some are available.
More information can be found in the Linux
[admin guide](https://docs.kernel.org/admin-guide/mm/transhuge.html).
### 2. AVF configuration
The guest VM configuration can select huge-pages with the `vm_config.json`
option `"hugepages": true`.
Alternatively, the `vm` command can also pass `--hugepages`.