netty/netty — pull request #2554 by belliottsmith (2014-06-09 11:57:35+00:00)
Title: 4.0.19 ftl

As discussed, this is a separate pull request for the FastThreadLocal changes. I've made some minor tweaks, which are open to some discussion: I simplified the default bytebuf allocator changes so that they are cleaner, but the result is a very slight penalty to non-default bytebuf allocators, however the default allocator sees an ~30% increase in throughput in the microbenchmark, so it might be worth figuring out a way to deliver these benefits to user instantiated bytebuf allocators.

Some numbers for bytebufs...

4.0.19:
Benchmark (size) Mode Samples Mean Mean error Units
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 00000 thrpt 20 9021.907 111.818 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 00256 thrpt 20 9186.624 100.175 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 01024 thrpt 20 9115.938 145.644 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 04096 thrpt 20 10207.567 61.943 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 16384 thrpt 20 8902.079 105.597 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 65536 thrpt 20 9655.586 80.938 ops/ms

4.0.19-ftl:
Benchmark (size) Mode Samples Mean Mean error Units
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 00000 thrpt 20 8900.469 285.116 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 00256 thrpt 20 8668.458 156.805 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 01024 thrpt 20 9420.245 121.068 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 04096 thrpt 20 9542.702 66.353 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 16384 thrpt 20 9386.504 72.600 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree 65536 thrpt 20 9164.332 106.697 ops/ms

Benchmark (size) Mode Samples Mean Mean error Units
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 00000 thrpt 20 12681.382 89.749 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 00256 thrpt 20 12552.560 65.338 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 01024 thrpt 20 12226.540 414.590 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 04096 thrpt 20 12073.092 415.919 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 16384 thrpt 20 13053.144 107.050 ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.defaultPooledDirectAllocAndFree 65536 thrpt 20 12507.613 133.407 ops/ms

And some numbers of recyclable array list....

4.0.19:
Benchmark (size) Mode Samples Mean Mean error Units
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 00000 thrpt 20 96493.439 363.794 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 00256 thrpt 20 95397.559 1131.113 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 01024 thrpt 20 94684.792 1868.593 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 04096 thrpt 20 95421.467 1140.417 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 16384 thrpt 20 93655.506 1401.171 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 65536 thrpt 20 94552.290 974.530 ops/ms

4.0.19-ftl:
Benchmark (size) Mode Samples Mean Mean error Units
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 00000 thrpt 20 110474.911 2336.413 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 00256 thrpt 20 104353.207 867.748 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 01024 thrpt 20 106233.236 2464.719 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 04096 thrpt 20 101373.628 3747.072 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 16384 thrpt 20 97362.769 2540.927 ops/ms
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread 65536 thrpt 20 106652.754 1570.151 ops/ms