aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2020-01-14 19:13:47 +0000
committerKeith Randall <khr@golang.org>2020-05-07 04:05:18 +0000
commit94e61ab94d4ab865cd3f9f73062a1c201bb6584d (patch)
tree91205e5389797b50e3cfa3bed85c31d45c931950 /src
parent5d9549debb313269a7adabdb271f3d67113fef1a (diff)
downloadgo-94e61ab94d4ab865cd3f9f73062a1c201bb6584d.tar.xz
runtime/runtime2: pack the sudog struct
This commit moves the isSelect bool below the ticket uint32. The boolean was consuming 8 bytes of the struct. The uint32 was also consuming 8 bytes, so we can pack isSelect below the uint32 and save 8 bytes. This reduces the sudog struct from 96 bytes to 88 bytes. Change-Id: If555cdaf2f5eaa125e2590fc4d113dbc99750738 GitHub-Last-Rev: d63b4e086b17da74e185046dfecb12d58e4f19ac GitHub-Pull-Request: golang/go#36552 Reviewed-on: https://go-review.googlesource.com/c/go/+/214677 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/export_test.go2
-rw-r--r--src/runtime/runtime2.go8
-rw-r--r--src/runtime/sizeof_test.go1
3 files changed, 8 insertions, 3 deletions
diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go
index 4c1150acd4..f2461f0cb0 100644
--- a/src/runtime/export_test.go
+++ b/src/runtime/export_test.go
@@ -483,6 +483,8 @@ func GetNextArenaHint() uintptr {
type G = g
+type Sudog = sudog
+
func Getg() *G {
return getg()
}
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 2c566b5424..1fe41cf5b2 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -349,9 +349,6 @@ type sudog struct {
g *g
- // isSelect indicates g is participating in a select, so
- // g.selectDone must be CAS'd to win the wake-up race.
- isSelect bool
next *sudog
prev *sudog
elem unsafe.Pointer // data element (may point to stack)
@@ -364,6 +361,11 @@ type sudog struct {
acquiretime int64
releasetime int64
ticket uint32
+
+ // isSelect indicates g is participating in a select, so
+ // g.selectDone must be CAS'd to win the wake-up race.
+ isSelect bool
+
parent *sudog // semaRoot binary tree
waitlink *sudog // g.waiting list or semaRoot
waittail *sudog // semaRoot
diff --git a/src/runtime/sizeof_test.go b/src/runtime/sizeof_test.go
index 852244d425..d6156902c1 100644
--- a/src/runtime/sizeof_test.go
+++ b/src/runtime/sizeof_test.go
@@ -22,6 +22,7 @@ func TestSizeof(t *testing.T) {
_64bit uintptr // size on 64bit platforms
}{
{runtime.G{}, 216, 376}, // g, but exported for testing
+ {runtime.Sudog{}, 56, 88}, // sudog, but exported for testing
}
for _, tt := range tests {