From 38de91a5dae2101b6e70ef50e77defcd211ac4c1 Mon Sep 17 00:00:00 2001 From: "mic.besace" Date: Tue, 16 Aug 2016 05:00:38 -0700 Subject: [PATCH] Solaris/OpenBSD/FreeBSD: [heap] Uncommit unused large object page memory. Port d61a5c376ba51145dc4684e39d5d3a9ce75bcfa6 Original commit message: As a first step I uncommit the memory on the main thread. Also to measure impact and stability of that optimization. In a follow-up CL, the uncommitting should be moved on the concurrent thread. R=jochen@chromium.org, hpayer@chromium.org BUG= Review-Url: https://codereview.chromium.org/2245703002 Cr-Commit-Position: refs/heads/master@{#38654} --- AUTHORS | 3 ++- src/base/platform/platform-freebsd.cc | 4 ++++ src/base/platform/platform-openbsd.cc | 4 ++++ src/base/platform/platform-solaris.cc | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 28873901a9..d70be77d86 100644 --- a/AUTHORS +++ b/AUTHORS @@ -89,6 +89,7 @@ Matthew Sporleder Maxim Mossienko Michael Lutz Michael Smith +Michaël Zasso Mike Gilbert Mike Pennisi Milton Chiang @@ -118,4 +119,4 @@ Vladimir Shutoff Yu Yin Zac Hansen Zhongping Wang -柳荣一 \ No newline at end of file +柳荣一 diff --git a/src/base/platform/platform-freebsd.cc b/src/base/platform/platform-freebsd.cc index 413e193744..efb1872f35 100644 --- a/src/base/platform/platform-freebsd.cc +++ b/src/base/platform/platform-freebsd.cc @@ -246,6 +246,10 @@ bool VirtualMemory::UncommitRegion(void* base, size_t size) { kMmapFdOffset) != MAP_FAILED; } +bool VirtualMemory::ReleasePartialRegion(void* base, size_t size, + void* free_start, size_t free_size) { + return munmap(free_start, free_size) == 0; +} bool VirtualMemory::ReleaseRegion(void* base, size_t size) { return munmap(base, size) == 0; diff --git a/src/base/platform/platform-openbsd.cc b/src/base/platform/platform-openbsd.cc index 6ecf1f12ba..29c518a898 100644 --- a/src/base/platform/platform-openbsd.cc +++ b/src/base/platform/platform-openbsd.cc @@ -277,6 +277,10 @@ bool VirtualMemory::UncommitRegion(void* base, size_t size) { kMmapFdOffset) != MAP_FAILED; } +bool VirtualMemory::ReleasePartialRegion(void* base, size_t size, + void* free_start, size_t free_size) { + return munmap(free_start, free_size) == 0; +} bool VirtualMemory::ReleaseRegion(void* base, size_t size) { return munmap(base, size) == 0; diff --git a/src/base/platform/platform-solaris.cc b/src/base/platform/platform-solaris.cc index 1764978883..6783c6ba89 100644 --- a/src/base/platform/platform-solaris.cc +++ b/src/base/platform/platform-solaris.cc @@ -198,6 +198,10 @@ bool VirtualMemory::UncommitRegion(void* base, size_t size) { kMmapFdOffset) != MAP_FAILED; } +bool VirtualMemory::ReleasePartialRegion(void* base, size_t size, + void* free_start, size_t free_size) { + return munmap(free_start, free_size) == 0; +} bool VirtualMemory::ReleaseRegion(void* base, size_t size) { return munmap(base, size) == 0;