diff --git a/src/internal/goexperiment/exp_pageshift14_off.go b/src/internal/goexperiment/exp_pageshift14_off.go new file mode 100644 index 0000000000000000000000000000000000000000..c13ed7b2c5a3a85efcf0d9fb2219444a4415f1de --- /dev/null +++ b/src/internal/goexperiment/exp_pageshift14_off.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build !goexperiment.pageshift14 + +package goexperiment + +const PageShift14 = false +const PageShift14Int = 0 diff --git a/src/internal/goexperiment/exp_pageshift14_on.go b/src/internal/goexperiment/exp_pageshift14_on.go new file mode 100644 index 0000000000000000000000000000000000000000..2ba74c531712ce1f6aea44fea88d8e7e9b6eb013 --- /dev/null +++ b/src/internal/goexperiment/exp_pageshift14_on.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build goexperiment.pageshift14 + +package goexperiment + +const PageShift14 = true +const PageShift14Int = 1 diff --git a/src/internal/goexperiment/flags.go b/src/internal/goexperiment/flags.go index ac85fc800092a40a2090e8f719e5c012b54a682f..6934f123cb99831f45a2cc7a89b6e4af78afe6a3 100644 --- a/src/internal/goexperiment/flags.go +++ b/src/internal/goexperiment/flags.go @@ -131,4 +131,7 @@ type Flags struct { // Kunpeng malloc prefetch optimization. PrefetchMalloc bool + + //PageShift14 enables 16K page size. + PageShift14 bool } diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index e058dd848925a496e9d7c92952f688fff60286d7..35ac396d55b30a672626dca3b15fe8a7658a9c93 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -13,6 +13,7 @@ import ( "internal/goarch" "internal/runtime/atomic" "internal/runtime/sys" + "internal/goexperiment" "unsafe" ) @@ -23,7 +24,7 @@ const ( minPhysPageSize = 4096 // maxPhysPageSize is the maximum page size the runtime supports. - maxPhysPageSize = 512 << 10 + maxPhysPageSize = 512 << (10 + goexperiment.PageShift14Int*1) // maxPhysHugePageSize sets an upper-bound on the maximum huge page size // that the runtime supports. diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go index 9c54d689491867a8f6315d1f54d7a3b175b7a0ba..df8f806f182c6e8c2145814abcd36e1031a70d20 100644 --- a/src/runtime/runtime-gdb_test.go +++ b/src/runtime/runtime-gdb_test.go @@ -709,7 +709,13 @@ func TestGdbConst(t *testing.T) { sgot := strings.ReplaceAll(string(got), "\r\n", "\n") - if !strings.Contains(sgot, "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'\n$5 = 8192") { + s := "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'\n$5 = " + if goexperiment.PageShift14 { + s = s + "16384" + }else { + s = s + "8192" + } + if !strings.Contains(sgot, s) { t.Fatalf("output mismatch") } } diff --git a/src/runtime/sizeclasses.go b/src/runtime/sizeclasses.go index bbcaa9e983fd042daafdb97d2a139fc8afe06e9b..4c1f29a28894ea9ceb22a69c95007e1bd459f40a 100644 --- a/src/runtime/sizeclasses.go +++ b/src/runtime/sizeclasses.go @@ -1,5 +1,6 @@ // Code generated by mksizeclasses.go; DO NOT EDIT. //go:generate go run mksizeclasses.go +//go:build !goexperiment.pageshift14 package runtime diff --git a/src/runtime/sizeclasses_14.go b/src/runtime/sizeclasses_14.go new file mode 100644 index 0000000000000000000000000000000000000000..c6c36cca02be716a0b8cff4ff3405b363aa9544d --- /dev/null +++ b/src/runtime/sizeclasses_14.go @@ -0,0 +1,103 @@ +// Code generated by mksizeclasses.go; DO NOT EDIT. +//go:generate go run mksizeclasses.go +//go:build goexperiment.pageshift14 + +package runtime + +// class bytes/obj bytes/span objects tail waste max waste min align +// 1 8 16384 2048 0 87.50% 8 +// 2 16 16384 1024 0 43.75% 16 +// 3 24 16384 682 16 29.24% 8 +// 4 32 16384 512 0 21.88% 32 +// 5 48 16384 341 16 31.32% 16 +// 6 64 16384 256 0 23.44% 64 +// 7 80 16384 204 64 19.07% 16 +// 8 96 16384 170 64 15.95% 32 +// 9 112 16384 146 32 13.56% 16 +// 10 128 16384 128 0 11.72% 128 +// 11 144 16384 113 112 11.03% 16 +// 12 160 16384 102 64 9.73% 32 +// 13 176 16384 93 16 8.61% 16 +// 14 192 16384 85 64 8.17% 64 +// 15 208 16384 78 160 8.12% 16 +// 16 224 16384 73 32 6.88% 32 +// 17 240 16384 68 64 6.62% 16 +// 18 256 16384 64 0 5.86% 256 +// 19 288 16384 56 256 12.16% 32 +// 20 320 16384 51 64 10.04% 64 +// 21 352 16384 46 192 9.88% 32 +// 22 384 16384 42 256 9.51% 128 +// 23 416 16384 39 160 8.36% 32 +// 24 448 16384 36 256 8.37% 64 +// 25 480 16384 34 64 6.82% 32 +// 26 512 16384 32 0 6.05% 512 +// 27 576 16384 28 256 12.33% 64 +// 28 640 16384 25 384 11.96% 128 +// 29 704 16384 23 192 10.02% 64 +// 30 768 16384 21 256 9.64% 256 +// 31 832 16384 19 576 10.82% 64 +// 32 896 16384 18 256 8.48% 128 +// 33 960 16384 17 64 6.93% 64 +// 34 1024 16384 16 0 6.15% 1024 +// 35 1152 16384 14 256 12.41% 128 +// 36 1280 16384 12 1024 15.55% 256 +// 37 1408 16384 11 896 14.00% 128 +// 38 1536 16384 10 1024 14.00% 512 +// 39 1792 16384 9 256 15.57% 256 +// 40 2048 16384 8 0 12.45% 2048 +// 41 2304 16384 7 256 12.46% 256 +// 42 2688 16384 6 256 15.59% 128 +// 43 2944 32768 11 384 9.73% 128 +// 44 3200 16384 5 384 10.13% 128 +// 45 3584 32768 9 512 12.08% 512 +// 46 4096 16384 4 0 12.48% 4096 +// 47 4608 32768 7 512 12.48% 512 +// 48 5376 16384 3 256 15.61% 256 +// 49 6144 49152 8 0 12.48% 2048 +// 50 6528 32768 5 128 6.23% 128 +// 51 6912 49152 7 768 7.02% 256 +// 52 8192 16384 2 0 15.61% 8192 +// 53 9344 65536 7 128 12.49% 128 +// 54 9728 49152 5 512 4.94% 512 +// 55 10880 32768 3 128 10.93% 128 +// 56 12288 49152 4 0 11.45% 4096 +// 57 13056 65536 5 256 6.24% 256 +// 58 13568 81920 6 512 4.37% 256 +// 59 13952 98304 7 640 3.38% 128 +// 60 14336 114688 8 0 2.67% 2048 +// 61 16384 16384 1 0 12.49% 16384 +// 62 18688 131072 7 256 12.49% 256 +// 63 19072 114688 6 256 2.23% 128 +// 64 19584 98304 5 384 2.99% 128 +// 65 20480 81920 4 0 4.37% 4096 +// 66 21760 65536 3 256 6.25% 256 +// 67 24576 49152 2 0 11.45% 8192 +// 68 27264 81920 3 128 10.00% 128 +// 69 28672 114688 4 0 4.91% 4096 +// 70 32768 32768 1 0 12.50% 16384 + +// alignment bits min obj size +// 8 3 8 +// 16 4 32 +// 32 5 256 +// 64 6 512 +// 128 7 1024 +// 4096 12 28672 +// 16384 14 32768 + +const ( + minHeapAlign = 8 + _MaxSmallSize = 32768 + smallSizeDiv = 8 + smallSizeMax = 1024 + largeSizeDiv = 128 + _NumSizeClasses = 71 + _PageShift = 14 + maxObjsPerSpan = 2048 +) + +var class_to_size = [_NumSizeClasses]uint16{0, 8, 16, 24, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256, 288, 320, 352, 384, 416, 448, 480, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 1152, 1280, 1408, 1536, 1792, 2048, 2304, 2688, 2944, 3200, 3584, 4096, 4608, 5376, 6144, 6528, 6912, 8192, 9344, 9728, 10880, 12288, 13056, 13568, 13952, 14336, 16384, 18688, 19072, 19584, 20480, 21760, 24576, 27264, 28672, 32768} +var class_to_allocnpages = [_NumSizeClasses]uint8{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 2, 3, 1, 4, 3, 2, 3, 4, 5, 6, 7, 1, 8, 7, 6, 5, 4, 3, 5, 7, 2} +var class_to_divmagic = [_NumSizeClasses]uint32{0, ^uint32(0)/8 + 1, ^uint32(0)/16 + 1, ^uint32(0)/24 + 1, ^uint32(0)/32 + 1, ^uint32(0)/48 + 1, ^uint32(0)/64 + 1, ^uint32(0)/80 + 1, ^uint32(0)/96 + 1, ^uint32(0)/112 + 1, ^uint32(0)/128 + 1, ^uint32(0)/144 + 1, ^uint32(0)/160 + 1, ^uint32(0)/176 + 1, ^uint32(0)/192 + 1, ^uint32(0)/208 + 1, ^uint32(0)/224 + 1, ^uint32(0)/240 + 1, ^uint32(0)/256 + 1, ^uint32(0)/288 + 1, ^uint32(0)/320 + 1, ^uint32(0)/352 + 1, ^uint32(0)/384 + 1, ^uint32(0)/416 + 1, ^uint32(0)/448 + 1, ^uint32(0)/480 + 1, ^uint32(0)/512 + 1, ^uint32(0)/576 + 1, ^uint32(0)/640 + 1, ^uint32(0)/704 + 1, ^uint32(0)/768 + 1, ^uint32(0)/832 + 1, ^uint32(0)/896 + 1, ^uint32(0)/960 + 1, ^uint32(0)/1024 + 1, ^uint32(0)/1152 + 1, ^uint32(0)/1280 + 1, ^uint32(0)/1408 + 1, ^uint32(0)/1536 + 1, ^uint32(0)/1792 + 1, ^uint32(0)/2048 + 1, ^uint32(0)/2304 + 1, ^uint32(0)/2688 + 1, ^uint32(0)/2944 + 1, ^uint32(0)/3200 + 1, ^uint32(0)/3584 + 1, ^uint32(0)/4096 + 1, ^uint32(0)/4608 + 1, ^uint32(0)/5376 + 1, ^uint32(0)/6144 + 1, ^uint32(0)/6528 + 1, ^uint32(0)/6912 + 1, ^uint32(0)/8192 + 1, ^uint32(0)/9344 + 1, ^uint32(0)/9728 + 1, ^uint32(0)/10880 + 1, ^uint32(0)/12288 + 1, ^uint32(0)/13056 + 1, ^uint32(0)/13568 + 1, ^uint32(0)/13952 + 1, ^uint32(0)/14336 + 1, ^uint32(0)/16384 + 1, ^uint32(0)/18688 + 1, ^uint32(0)/19072 + 1, ^uint32(0)/19584 + 1, ^uint32(0)/20480 + 1, ^uint32(0)/21760 + 1, ^uint32(0)/24576 + 1, ^uint32(0)/27264 + 1, ^uint32(0)/28672 + 1, ^uint32(0)/32768 + 1} +var size_to_class8 = [smallSizeMax/smallSizeDiv + 1]uint8{0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34} +var size_to_class128 = [(_MaxSmallSize-smallSizeMax)/largeSizeDiv + 1]uint8{34, 35, 36, 37, 38, 39, 39, 40, 40, 41, 41, 42, 42, 42, 43, 43, 44, 44, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}