diff options
| author | Aaron Patterson <tenderlove@ruby-lang.org> | 2020-01-14 19:13:47 +0000 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2020-05-07 04:05:18 +0000 |
| commit | 94e61ab94d4ab865cd3f9f73062a1c201bb6584d (patch) | |
| tree | 91205e5389797b50e3cfa3bed85c31d45c931950 /src | |
| parent | 5d9549debb313269a7adabdb271f3d67113fef1a (diff) | |
| download | go-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.go | 2 | ||||
| -rw-r--r-- | src/runtime/runtime2.go | 8 | ||||
| -rw-r--r-- | src/runtime/sizeof_test.go | 1 |
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 { |
