]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: cache unrolled GC bitmask
authorDmitriy Vyukov <dvyukov@google.com>
Sun, 24 Aug 2014 08:04:51 +0000 (12:04 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Sun, 24 Aug 2014 08:04:51 +0000 (12:04 +0400)
Cache unrolled GC bitmask for types up to 64/32K on 64/32-bit systems,
this corresponds to up to 4K cached bitmask.
Perf builders say that 2% of time is spent in unrollgcproginplace_m/unrollgcprog1
on http benchmark:
http://goperfd.appspot.com/log/f42045f45bf61a0da53b724a7c8567824a0ad6c9

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr, rlh
https://golang.org/cl/122680043

src/pkg/runtime/malloc.go
src/pkg/runtime/mgc0.h

index 578fbd1c2dbfd96a22637bb08783c965fca8b4c4..ffe571a18a9775e5abb60d945685e988fc682961 100644 (file)
@@ -28,7 +28,7 @@ const (
        bitsMask           = 1<<bitsPerPointer - 1
        pointersPerByte    = 8 / bitsPerPointer
        bitPtrMask         = bitsMask << 2
-       maxGCMask          = 0 // disabled because wastes several bytes of memory
+       maxGCMask          = 64
        bitsDead           = 0
        bitsPointer        = 2
 
index 7449398b9ff3266ae385a2cb61583459271bf82f..a7292effd31ce98388c630f0973a57d230e17903 100644 (file)
@@ -55,7 +55,8 @@ enum {
        BitsIface       = 2,
        BitsEface       = 3,
 
-       MaxGCMask       = 0,    // disabled because wastes several bytes of memory
+       // 64 bytes cover objects of size 1024/512 on 64/32 bits, respectively.
+       MaxGCMask       = 64,
 };
 
 // Bits in per-word bitmap.