• Dmitriy Vyukov's avatar
    runtime: faster select · 6b2ec065
    Dmitriy Vyukov authored
    Make selectsend() accept pointer to the element,
    it makes it possible to make Scase fixed-size
    and allocate/free Select, all Scase's and all SudoG at once.
    As a consequence SudoG freelist die out.
    
    benchmark                       old,ns/op  new,ns/op
    BenchmarkSelectUncontended	     1080        558
    BenchmarkSelectUncontended-2	      675        264
    BenchmarkSelectUncontended-4	      459        205
    BenchmarkSelectContended	     1086        560
    BenchmarkSelectContended-2	     1775       1672
    BenchmarkSelectContended-4	     2668       2149
    (on Intel Q6600, 4 cores, 2.4GHz)
    
    benchmark                       old ns/op    new ns/op    delta
    BenchmarkSelectUncontended         517.00       326.00  -36.94%
    BenchmarkSelectUncontended-2       281.00       166.00  -40.93%
    BenchmarkSelectUncontended-4       250.00        83.10  -66.76%
    BenchmarkSelectUncontended-8       107.00        47.40  -55.70%
    BenchmarkSelectUncontended-16       67.80        41.30  -39.09%
    BenchmarkSelectContended           513.00       325.00  -36.65%
    BenchmarkSelectContended-2         699.00       628.00  -10.16%
    BenchmarkSelectContended-4        1085.00      1092.00   +0.65%
    BenchmarkSelectContended-8        3253.00      2477.00  -23.85%
    BenchmarkSelectContended-16       5313.00      5116.00   -3.71%
    (on Intel E5620, 8 HT cores, 2.4 GHz)
    
    R=rsc, ken
    CC=golang-dev
    https://golang.org/cl/4811041
    6b2ec065
Name
Last commit
Last update
..
5a Loading commit data...
5c Loading commit data...
5g Loading commit data...
5l Loading commit data...
6a Loading commit data...
6c Loading commit data...
6g Loading commit data...
6l Loading commit data...
8a Loading commit data...
8c Loading commit data...
8g Loading commit data...
8l Loading commit data...
cc Loading commit data...
cgo Loading commit data...
cov Loading commit data...
ebnflint Loading commit data...
gc Loading commit data...
godefs Loading commit data...
godoc Loading commit data...
gofix Loading commit data...
gofmt Loading commit data...
goinstall Loading commit data...
gomake Loading commit data...
gopack Loading commit data...
gotest Loading commit data...
gotry Loading commit data...
gotype Loading commit data...
govet Loading commit data...
goyacc Loading commit data...
hgpatch Loading commit data...
ld Loading commit data...
nm Loading commit data...
prof Loading commit data...
Makefile Loading commit data...