This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] malloc: speed up mmap
- From: Joern Engel <joern at purestorage dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Cc: Siddhesh Poyarekar <siddhesh dot poyarekar at gmail dot com>, Joern Engel <joern at purestorage dot com>
- Date: Mon, 25 Jan 2016 16:25:42 -0800
- Subject: [PATCH] malloc: speed up mmap
- Authentication-results: sourceware.org; auth=none
- References: <1453767942-19369-1-git-send-email-joern at purestorage dot com>
MAP_POPULATE might actually slow down the mmap proper, but it will speed
up all subsequent operations, including the memset(). And shrinking the
size of memset to the size of malloc headers - one for the heap and one
for the arena - should be somewhat faster then clearing all 64MB. Even
at 10GB/s we save 6ms.
https://codereviews.purestorage.com/r/26569/
JIRA: PURE-46853
---
tpc/malloc2.13/arena.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tpc/malloc2.13/arena.h b/tpc/malloc2.13/arena.h
index e53076d213b2..c959b77b9e9d 100644
--- a/tpc/malloc2.13/arena.h
+++ b/tpc/malloc2.13/arena.h
@@ -379,7 +379,7 @@ static char *aligned_heap_area;
static void *mmap_for_heap(void *addr, size_t length, int *must_clear)
{
int prot = PROT_READ | PROT_WRITE;
- int flags = MAP_PRIVATE;
+ int flags = MAP_PRIVATE | MAP_POPULATE;
void *ret;
ret = MMAP(addr, length, prot, flags | MAP_HUGETLB);
@@ -462,7 +462,7 @@ static heap_info *new_heap(size_t size, size_t top_pad, int numa_node)
}
mbind_memory(p2, HEAP_MAX_SIZE, numa_node);
if (must_clear)
- memset(p2, 0, HEAP_MAX_SIZE);
+ memset(p2, 0, sizeof(heap_info) + sizeof(struct malloc_state));
h = (heap_info *) p2;
h->size = size;
h->mprotect_size = size;
--
2.7.0.rc3