RFR: 8262291: Refactor reserve_memory_special_huge_tlbfs
Stefan Johansson
sjohanss at openjdk.java.net
Thu Mar 18 14:12:52 UTC 2021
Please review this refactoring of the hugetlbfs reservation code.
**Summary**
In recent adventures in this area of the code I noticed a strange condition in `reserve_memory_special_huge_tlbfs` where we take the "mixed-mapping" route even if the size doesn't require any small pages to be used:
if (is_aligned(bytes, os::large_page_size()) && alignment <= os::large_page_size()) {
return reserve_memory_special_huge_tlbfs_only(bytes, req_addr, exec);
} else {
return reserve_memory_special_huge_tlbfs_mixed(bytes, alignment, req_addr, exec);
}
The second condition here is needed because if the alignment is larger than the large page size, we needed to enforce this and can't just trust `mmap` to give us a properly aligned address. Doing this by using the mixed-function feels a bit weird and looking a bit more at this I found a way to refactor this function to avoid having the two helpers.
Instead of only having the mixed path honor the passed down alignment, make sure that is always done. This will also have the side-effect that all large pages in a "mixed"-mapping will be at the start and then we will have a tail of small pages. This actually also ensures that we will use large pages for a mixed mapping, in the past there was a corner case where we could end up with just a head and tail of small pages and no large page in between (if the mapping was smaller than 2 large pages and there was no alignment constraint).
**Testing**
Mach5 tier1-3 and a lot of local testing with different large page configurations.
-------------
Commit messages:
- 8262291: Refactor reserve_memory_special_huge_tlbfs
Changes: https://git.openjdk.java.net/jdk/pull/3073/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3073&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8262291
Stats: 159 lines in 3 files changed: 24 ins; 65 del; 70 mod
Patch: https://git.openjdk.java.net/jdk/pull/3073.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3073/head:pull/3073
PR: https://git.openjdk.java.net/jdk/pull/3073
More information about the hotspot-dev
mailing list