原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface
迄今为止的实验
目前我已经有一个标准的实施在运行了,虽然还不完整但是已经已经能编译简单的例子。
Peano(test/peano.go)修改后在跑到11!的时候比以前快了10%。虽然说要持有怀疑态度的看待这个问题,但是这个速度确实跟栈的增长方式是息息相关的(每次增长加倍栈的大小时会有10%速度提升,每次增加50%的栈大小时,只有2%的提升,每次增加25%反而会慢25%).
“Hot split"的测试用例(stacksplit.go).使用-gcflags -l 进行编译
分段的栈:
不分割:1.25925147s
分割: 5.372118558s <-这里触发了热分割问题(见上文)
连续的栈:
不分割:1.261624848
分割: 1.262939769
Benchmark
我修改了分段栈和连续栈的实现:利用一个环境变量设置栈段的大小/初始大小。我们可以利用这个特性来测试一下栈段大小对benchmark的影响(这些实验中,连续栈的大小是按2的倍数来增长的(加倍)).
econding/json/BenchmarkEncode:这个已经被抱怨过很多次了,请参见bug 3787.
Presumably the max stack use is 19KB or so, and below that bad splits cause the downward spikes.
假设栈最大的使用大小是19KB,在低于这个值时,糟糕的分割会导致性能的下降
html/template/BenchmarkEscapedExecute:这个benchmark有个很特别的问题:当段的大小在4096bytes的时候,
有疑问加站长微信联系(非本文作者)