-
Notifications
You must be signed in to change notification settings - Fork 0
/
largebss.go
55 lines (42 loc) · 976 Bytes
/
largebss.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test STW latency and on large BSSes.
package main
import (
"flag"
"os"
"time"
"github.com/aclements/go-gcbench/gcbench"
)
const ptrSize = 4 << (^uintptr(0) >> 63)
const bss = 100 * gcbench.MB
// Pessimal case:
var thing [bss / (2 * ptrSize)]struct {
x [ptrSize]byte
y *byte
}
// Optimal case:
// var thing [1]struct {
// x [bssBytes - ptrSize]byte
// y *byte
// }
var sink interface{}
var flagDuration = flag.Duration("benchtime", 10*time.Second, "steady state duration")
func main() {
gcbench.NewBenchmark("LargeBSS", benchMain).Config("bss", bss).Run()
}
func benchMain() {
flag.Parse()
for i := range thing {
thing[i].y = nil
}
check := gcbench.NewGCChecker()
time.AfterFunc(*flagDuration, func() {
check.NumGCAtLeast(10)
os.Exit(0)
})
for {
sink = make([]byte, 1<<10)
}
}