From b45b00162b688deff23a64d442f905261c49bdc4 Mon Sep 17 00:00:00 2001 From: Li Gang Date: Tue, 5 Sep 2023 17:31:06 +0800 Subject: [PATCH] runtime: resolve false sharing for frequent memory allocate workloads False sharing observed inside mheap struct, between arenas and preceding variables.Pad mheap.arenas and preceding variables to avoid false sharing This false-sharing getting worse and impact performance on multi core system and frequent memory allocate workloads. While running MinIO On a 2 socket system(56 Core per socket) and GOGC=1000, we observed HITM>8% (perf c2c) on this cacheline. After resolve this false-sharing issue, we got performance 17% improved. Improvement verified on MinIO: Server: https://github.com/minio/minio Client: https://github.com/minio/warp Config: Single node MinIO Server with 6 ramdisk, without TLS enabled, Run warp GET request, 128KB object and 512 concurrent Fixes #62472 Signed-off-by: Li Gang Change-Id: I9a4a3c97f5bc8cd014c627f92d59d9187ebaaab5 Reviewed-on: https://go-review.googlesource.com/c/go/+/525955 Reviewed-by: Heschi Kreinick LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Auto-Submit: Michael Knyszek --- src/runtime/mheap.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index f836d91c6a..f0d34ca200 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -122,6 +122,8 @@ type mheap struct { // credit pool. reclaimCredit atomic.Uintptr + _ cpu.CacheLinePad // prevents false-sharing between arenas and preceding variables + // arenas is the heap arena map. It points to the metadata for // the heap for every arena frame of the entire usable virtual // address space. -- 2.48.1