Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame] | 1 | ==================== |
Punit Agrawal | 0c09d48 | 2018-10-08 11:03:55 +0100 | [diff] [blame] | 2 | HugeTLBpage on ARM64 |
| 3 | ==================== |
| 4 | |
| 5 | Hugepage relies on making efficient use of TLBs to improve performance of |
| 6 | address translations. The benefit depends on both - |
| 7 | |
| 8 | - the size of hugepages |
| 9 | - size of entries supported by the TLBs |
| 10 | |
| 11 | The ARM64 port supports two flavours of hugepages. |
| 12 | |
| 13 | 1) Block mappings at the pud/pmd level |
| 14 | -------------------------------------- |
| 15 | |
| 16 | These are regular hugepages where a pmd or a pud page table entry points to a |
| 17 | block of memory. Regardless of the supported size of entries in TLB, block |
| 18 | mappings reduce the depth of page table walk needed to translate hugepage |
| 19 | addresses. |
| 20 | |
| 21 | 2) Using the Contiguous bit |
| 22 | --------------------------- |
| 23 | |
| 24 | The architecture provides a contiguous bit in the translation table entries |
| 25 | (D4.5.3, ARM DDI 0487C.a) that hints to the MMU to indicate that it is one of a |
| 26 | contiguous set of entries that can be cached in a single TLB entry. |
| 27 | |
| 28 | The contiguous bit is used in Linux to increase the mapping size at the pmd and |
| 29 | pte (last) level. The number of supported contiguous entries varies by page size |
| 30 | and level of the page table. |
| 31 | |
| 32 | |
| 33 | The following hugepage sizes are supported - |
| 34 | |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame] | 35 | ====== ======== ==== ======== === |
| 36 | - CONT PTE PMD CONT PMD PUD |
| 37 | ====== ======== ==== ======== === |
Punit Agrawal | 0c09d48 | 2018-10-08 11:03:55 +0100 | [diff] [blame] | 38 | 4K: 64K 2M 32M 1G |
| 39 | 16K: 2M 32M 1G |
| 40 | 64K: 2M 512M 16G |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame] | 41 | ====== ======== ==== ======== === |