summaryrefslogtreecommitdiff
path: root/src/common/host_memory.cpp
diff options
context:
space:
mode:
authorGravatar Merry2023-01-01 11:38:49 +0000
committerGravatar Merry2023-01-01 11:40:35 +0000
commitfd1831b65bc8a0817776ac41f82b6ff053247b1b (patch)
tree75154b03fc6d2e94660da0ec150ec8c147c06d2c /src/common/host_memory.cpp
parenthost_memory: Allocate virtual_base with MAP_NORESERVE (diff)
downloadyuzu-fd1831b65bc8a0817776ac41f82b6ff053247b1b.tar.gz
yuzu-fd1831b65bc8a0817776ac41f82b6ff053247b1b.tar.xz
yuzu-fd1831b65bc8a0817776ac41f82b6ff053247b1b.zip
host_memory: Use transparent huge pages where available
Diffstat (limited to 'src/common/host_memory.cpp')
-rw-r--r--src/common/host_memory.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp
index 4a67f77b2..611c7d1a3 100644
--- a/src/common/host_memory.cpp
+++ b/src/common/host_memory.cpp
@@ -393,12 +393,27 @@ public:
393 } 393 }
394 394
395 // Virtual memory initialization 395 // Virtual memory initialization
396#if defined(__FreeBSD__)
397 virtual_base =
398 static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
399 MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER, -1, 0));
400 if (virtual_base == MAP_FAILED) {
401 virtual_base = static_cast<u8*>(
402 mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
403 if (virtual_base == MAP_FAILED) {
404 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
405 throw std::bad_alloc{};
406 }
407 }
408#else
396 virtual_base = static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE, 409 virtual_base = static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
397 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0)); 410 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0));
398 if (virtual_base == MAP_FAILED) { 411 if (virtual_base == MAP_FAILED) {
399 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno)); 412 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
400 throw std::bad_alloc{}; 413 throw std::bad_alloc{};
401 } 414 }
415 madvise(virtual_base, virtual_size, MADV_HUGEPAGE);
416#endif
402 417
403 good = true; 418 good = true;
404 } 419 }