< prev index next >
src/hotspot/os/linux/gc/z/zPhysicalMemoryBacking_linux.cpp
Print this page
@@ -135,20 +135,13 @@
_filesystem = buf.f_type;
_block_size = buf.f_bsize;
_available = buf.f_bavail * _block_size;
- // Make sure we're on a supported filesystem
- if (!is_tmpfs() && !is_hugetlbfs()) {
- log_error(gc)("Backing file must be located on a %s or a %s filesystem",
- ZFILESYSTEM_TMPFS, ZFILESYSTEM_HUGETLBFS);
- return;
- }
-
// Make sure the filesystem type matches requested large page type
if (ZLargePages::is_transparent() && !is_tmpfs()) {
- log_error(gc)("-XX:+UseTransparentHugePages can only be enable when using a %s filesystem",
+ log_error(gc)("-XX:+UseTransparentHugePages can only be enabled when using a %s filesystem",
ZFILESYSTEM_TMPFS);
return;
}
if (ZLargePages::is_transparent() && !tmpfs_supports_transparent_huge_pages()) {
@@ -167,14 +160,26 @@
log_error(gc)("-XX:+UseLargePages must be enabled when using a %s filesystem",
ZFILESYSTEM_HUGETLBFS);
return;
}
- const size_t expected_block_size = is_tmpfs() ? os::vm_page_size() : os::large_page_size();
- if (expected_block_size != _block_size) {
+ if (ZLargePages::is_explicit() && os::large_page_size() != ZGranuleSize) {
+ log_error(gc)("Incompatible large page size configured " SIZE_FORMAT " (expected " SIZE_FORMAT ")",
+ os::large_page_size(), ZGranuleSize);
+ return;
+ }
+
+ // Make sure the filesystem block size is compatible
+ if (ZGranuleSize % _block_size != 0) {
+ log_error(gc)("Filesystem backing the heap has incompatible block size (" SIZE_FORMAT ")",
+ _block_size);
+ return;
+ }
+
+ if (is_hugetlbfs() && _block_size != os::large_page_size()) {
log_error(gc)("%s filesystem has unexpected block size " SIZE_FORMAT " (expected " SIZE_FORMAT ")",
- is_tmpfs() ? ZFILESYSTEM_TMPFS : ZFILESYSTEM_HUGETLBFS, _block_size, expected_block_size);
+ ZFILESYSTEM_HUGETLBFS, _block_size, os::large_page_size());
return;
}
// Successfully initialized
_initialized = true;
< prev index next >