From 0c1afcdfc171747022d59629a59244e32d6e52b6 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 8 Feb 2020 20:55:50 +0000 Subject: [PATCH] Hunk API, using FreeBSD super page for large requests. --- src/backends/unix/shared/hunk.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backends/unix/shared/hunk.c b/src/backends/unix/shared/hunk.c index 568fdd80..54273c44 100644 --- a/src/backends/unix/shared/hunk.c +++ b/src/backends/unix/shared/hunk.c @@ -58,9 +58,22 @@ Hunk_Begin(int maxsize) /* plus 32 bytes for cacheline */ maxhunksize = maxsize + sizeof(size_t) + 32; curhunksize = 0; + int flags = MAP_PRIVATE | MAP_ANONYMOUS; + +#if defined(MAP_ALIGNED_SUPER) + const size_t hgpagesize = 1UL<<21; + size_t page_size = sysconf(_SC_PAGESIZE); + + /* Archs supported has 2MB for super pages size */ + if (maxhunksize >= hgpagesize) + { + maxhunksize = (maxhunksize & ~(page_size-1)) + page_size; + flags |= MAP_ALIGNED_SUPER; + } +#endif membase = mmap(0, maxhunksize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + flags, -1, 0); if ((membase == NULL) || (membase == (byte *)-1)) {