- 26 Feb, 2018 5 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
Similarly to wrk on HTTP. Rationale: simulating multiple clients is: 1. noisy - the timings from run to run are changing sometimes up to 50% 2. with significant additional overhead - there are constant OS-level process switches in between client processes and this prevents to actually create the load. 3. the above load from "2" actually takes resources from the server in localhost case. So let's switch to simlating many requests in lightweight way similarly to how it is done in wrk - in one process and not so many threads (it can be just 1) with many connections opened to server and epolly way to load it with Go providing epoll-goroutine matching.
-
Kirill Smelkov authored
-
Kirill Smelkov authored
They are the same in size.
-
Kirill Smelkov authored
`proto.PktHeaderLen + packed.Ntoh32(pkth.MsgLen)` could wrap int32 if sent pkth.MsgLen is big.
-
- 23 Feb, 2018 1 commit
-
-
Kirill Smelkov authored
For the reference on deco (performance, frequence not fixed): name time/object deco/fs1/zhash.py 15.8µs ± 2% deco/fs1/zhash.py-P16 116µs ±12% deco/fs1/zhash.go 2.60µs ± 0% deco/fs1/zhash.go+prefetch128 3.70µs ±11% deco/fs1/zhash.go-P16 13.4µs ±43% deco/zeo/zhash.py 316µs ± 7% deco/zeo/zhash.py-P16 2.68ms ± 7% deco/zeo/zhash.go 111µs ± 2% deco/zeo/zhash.go+prefetch128 57.7µs ± 2% deco/zeo/zhash.go-P16 1.23ms ± 5%
-
- 22 Feb, 2018 2 commits
-
-
Kirill Smelkov authored
Compared to 55a64368 (rio localhost; 2017-11-06) the change is in kernel: -# Linux rio 4.13.0-1-amd64 #1 SMP Debian 4.13.4-2 (2017-10-15) x86_64 GNU/Linux +# Linux rio 4.15.0-1-amd64 #1 SMP Debian 4.15.4-1 (2018-02-18) x86_64 GNU/Linux and in particular 4.15 comes with PTI. summary: - direct disk 4K read is ~ 93µs as it was - pagecache is now slower due to PTI: the timing changed 0.6µs -> 0.8µs - fs1.py access is ~2% slower, probably due to PTI - fs1.go access is much slower due to client cache being always bolted on: 2.4µs -> 3.8µs (serial). The time for both serial and parallel cases is still small. - zeo is ~2% slower, probably due to PTI. - neo/py/sqlite vs zhash.py is 8% faster - because we removed data compression from the benchmark (b9827725), however P16 time is not improved. - neo/py/sqlite vs zhash.go is 40% faster - because we removed data compression from the benchmark and previously neo/go code was very inefficient at zlib decompression (924831e7, 9acb87a8, 57524491). However P16 time is improved only by 2-5%. - neo/py/sql vs zhash.{py,go} - similar changes to neo/py/sqlite - neo/go/fs1 vs zhash.py - unchanged; vs zhash.go - slower by 12% - probably due to PTI. zhash.go P16 case is improved by ~35% but it could be all noise. - newly introduces neo/go/sqlite vs zhash.go is at ~ 80-88µs for serial and ~ 230-300µs for P16 latencies (neo/py/sqlite for the same vs zhash.go is at ~ 120-130µs for serial and ~1600µs for P16 latencies). Clearly neo/go/sqlite needs more work. Full details: $ benchstat -split dataset 20180222-rio.txt |grep sqlite |grep 'neo.go' rio/neo/go/sqlite/zhash.py 230µs ± 2% rio/neo/go/sqlite/zhash.py-P16 937µs ± 5% rio/neo/go/sqlite/zhash.go 88.4µs ± 2% rio/neo/go/sqlite/zhash.go+prefetch128 33.6µs ± 7% rio/neo/go/sqlite/zhash.go-P16 228µs ±39% rio/neo/go/sqlite(!sha1)/zhash.go 79.7µs ± 3% rio/neo/go/sqlite(!sha1)/zhash.go+prefetch128 32.2µs ± 8% rio/neo/go/sqlite(!sha1)/zhash.go-P16 213µs ±42% rio/neo/go/sqlite/zhash.py 232µs ± 2% rio/neo/go/sqlite/zhash.py-P16 1.00ms ± 3% rio/neo/go/sqlite/zhash.go 79.2µs ± 2% rio/neo/go/sqlite/zhash.go+prefetch128 29.8µs ± 8% rio/neo/go/sqlite/zhash.go-P16 302µs ±40% rio/neo/go/sqlite(!sha1)/zhash.go 78.3µs ± 2% rio/neo/go/sqlite(!sha1)/zhash.go+prefetch128 31.1µs ± 2% rio/neo/go/sqlite(!sha1)/zhash.go-P16 311µs ±40% $ benchstat -split dataset 20171106-time-rio-Cenabled.txt 20180222-rio.txt name old pystone/s new pystone/s delta rio/pystone 178k ± 2% 180k ± 3% ~ (p=0.421 n=5+5) name old time/op new time/op delta rio/disk/randread/direct/4K-min 34.0µs ± 1% 34.7µs ± 1% +2.06% (p=0.008 n=5+5) rio/disk/randread/direct/4K-avg 92.9µs ± 0% 93.2µs ± 0% +0.37% (p=0.024 n=5+5) rio/disk/randread/pagecache/4K-min 221ns ± 0% 441ns ± 0% +99.37% (p=0.016 n=4+5) rio/disk/randread/pagecache/4K-avg 637ns ± 0% 872ns ± 1% +37.01% (p=0.016 n=4+5) name old time/object new time/object delta dataset:wczblk1-8 rio/fs1/zhash.py 22.3µs ± 2% 22.8µs ± 2% +2.24% (p=0.048 n=5+5) rio/fs1/zhash.py-P16 51.7µs ±72% 60.3µs ±49% ~ (p=0.127 n=15+16) rio/fs1/zhash.go 2.40µs ± 0% 3.80µs ± 0% +58.33% (p=0.016 n=5+4) rio/fs1/zhash.go+prefetch128 4.34µs ± 8% 4.10µs ± 2% ~ (p=0.246 n=5+5) rio/fs1/zhash.go-P16 3.58µs ±24% 6.79µs ±19% +90.01% (p=0.000 n=16+14) rio/zeo/zhash.py 336µs ± 2% 342µs ± 2% +1.82% (p=0.040 n=5+5) rio/zeo/zhash.py-P16 1.61ms ±19% 1.64ms ±20% ~ (p=0.423 n=16+16) rio/neo/py/sqlite/zhash.py 304µs ± 6% 279µs ± 3% -8.11% (p=0.016 n=5+5) rio/neo/py/sqlite/zhash.py-P16 2.19ms ± 0% 2.28ms ± 1% +4.16% (p=0.000 n=13+15) rio/neo/py/sqlite/zhash.go 248µs ± 1% 147µs ± 2% -40.70% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.go+prefetch128 125µs ± 1% 125µs ± 2% ~ (p=0.651 n=5+5) rio/neo/py/sqlite/zhash.go-P16 1.76ms ±13% 1.73ms ±14% -1.72% (p=0.002 n=16+16) rio/neo/py(!log)/sqlite/zhash.py 291µs ± 2% 267µs ± 1% -8.20% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.py-P16 2.01ms ± 2% 2.01ms ± 1% ~ (p=0.545 n=16+15) rio/neo/py(!log)/sqlite/zhash.go 231µs ± 1% 130µs ± 2% -43.54% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go+prefetch128 110µs ± 2% 112µs ± 4% ~ (p=0.222 n=5+5) rio/neo/py(!log)/sqlite/zhash.go-P16 1.62ms ± 7% 1.62ms ± 0% +0.18% (p=0.029 n=16+11) rio/neo/py/sql/zhash.py 325µs ± 4% 294µs ± 1% -9.50% (p=0.029 n=4+4) rio/neo/py/sql/zhash.py-P16 2.88ms ± 1% 2.85ms ± 1% -0.94% (p=0.000 n=15+15) rio/neo/py/sql/zhash.go 275µs ± 2% 169µs ± 3% -38.39% (p=0.008 n=5+5) rio/neo/py/sql/zhash.go+prefetch128 154µs ± 3% 154µs ± 4% ~ (p=1.000 n=5+5) rio/neo/py/sql/zhash.go-P16 2.30ms ± 8% 2.19ms ±11% -5.03% (p=0.009 n=16+16) rio/neo/py(!log)/sql/zhash.py 313µs ± 4% 285µs ± 5% -8.95% (p=0.029 n=4+4) rio/neo/py(!log)/sql/zhash.py-P16 2.56ms ± 1% 2.47ms ± 1% -3.45% (p=0.000 n=15+14) rio/neo/py(!log)/sql/zhash.go 258µs ± 1% 152µs ± 1% -41.05% (p=0.016 n=5+4) rio/neo/py(!log)/sql/zhash.go+prefetch128 139µs ± 1% 137µs ± 3% ~ (p=0.151 n=5+5) rio/neo/py(!log)/sql/zhash.go-P16 2.21ms ± 5% 1.98ms ± 0% -10.19% (p=0.000 n=16+11) rio/neo/go/fs1/zhash.py 190µs ± 3% 190µs ± 4% ~ (p=1.000 n=5+5) rio/neo/go/fs1/zhash.py-P16 784µs ± 9% 755µs ± 7% -3.69% (p=0.018 n=16+16) rio/neo/go/fs1/zhash.go 52.0µs ± 1% 58.0µs ± 3% +11.55% (p=0.008 n=5+5) rio/neo/go/fs1/zhash.go+prefetch128 26.6µs ± 5% 24.9µs ± 4% ~ (p=0.087 n=5+5) rio/neo/go/fs1/zhash.go-P16 256µs ± 6% 164µs ±50% -36.13% (p=0.000 n=15+16) rio/neo/go/fs1(!sha1)/zhash.go 35.3µs ± 4% 37.3µs ± 2% +5.73% (p=0.008 n=5+5) rio/neo/go/fs1(!sha1)/zhash.go+prefetch128 17.3µs ± 2% 16.3µs ± 2% -6.00% (p=0.008 n=5+5) rio/neo/go/fs1(!sha1)/zhash.go-P16 152µs ±13% 118µs ±51% -22.57% (p=0.000 n=13+16) dataset:prod1-1024 rio/fs1/zhash.py 18.9µs ± 1% 18.9µs ± 2% ~ (p=0.825 n=5+5) rio/fs1/zhash.py-P16 58.0µs ±52% 56.2µs ±32% ~ (p=0.926 n=16+16) rio/fs1/zhash.go 1.30µs ± 0% 2.80µs ± 0% +115.38% (p=0.016 n=4+5) rio/fs1/zhash.go+prefetch128 2.78µs ±14% 2.70µs ± 0% ~ (p=0.413 n=5+4) rio/fs1/zhash.go-P16 2.24µs ±16% 6.59µs ±43% +194.93% (p=0.000 n=14+16) rio/zeo/zhash.py 302µs ± 7% 294µs ± 6% ~ (p=0.310 n=5+5) rio/zeo/zhash.py-P16 1.44ms ±11% 1.46ms ± 3% ~ (p=0.892 n=15+13) rio/neo/py/sqlite/zhash.py 269µs ± 1% 275µs ± 1% +2.51% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.py-P16 2.19ms ± 0% 2.34ms ± 0% +6.70% (p=0.000 n=16+13) rio/neo/py/sqlite/zhash.go 158µs ± 1% 140µs ± 3% -11.68% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.go+prefetch128 116µs ± 3% 118µs ± 1% ~ (p=0.111 n=5+5) rio/neo/py/sqlite/zhash.go-P16 1.90ms ± 0% 1.81ms ± 7% -4.58% (p=0.000 n=14+16) rio/neo/py(!log)/sqlite/zhash.py 259µs ± 4% 262µs ± 3% ~ (p=0.690 n=5+5) rio/neo/py(!log)/sqlite/zhash.py-P16 1.89ms ± 1% 2.04ms ± 0% +7.53% (p=0.000 n=15+15) rio/neo/py(!log)/sqlite/zhash.go 142µs ± 1% 123µs ± 2% -13.14% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go+prefetch128 101µs ± 2% 103µs ± 1% +2.37% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go-P16 1.57ms ± 0% 1.61ms ± 5% ~ (p=0.089 n=13+16) rio/neo/py/sql/zhash.py 337µs ±43% 298µs ± 3% ~ (p=0.556 n=5+4) rio/neo/py/sql/zhash.py-P16 2.73ms ± 0% 2.86ms ± 0% +4.74% (p=0.000 n=15+15) rio/neo/py/sql/zhash.go 186µs ± 3% 164µs ± 4% -11.92% (p=0.008 n=5+5) rio/neo/py/sql/zhash.go+prefetch128 145µs ± 2% 147µs ± 2% ~ (p=0.095 n=5+5) rio/neo/py/sql/zhash.go-P16 2.29ms ± 6% 2.27ms ± 6% -1.19% (p=0.002 n=16+16) rio/neo/py(!log)/sql/zhash.py 293µs ± 4% 287µs ± 2% ~ (p=0.343 n=4+4) rio/neo/py(!log)/sql/zhash.py-P16 2.47ms ± 0% 2.51ms ± 1% +1.61% (p=0.000 n=15+15) rio/neo/py(!log)/sql/zhash.go 168µs ± 1% 146µs ± 2% -13.49% (p=0.008 n=5+5) rio/neo/py(!log)/sql/zhash.go+prefetch128 130µs ± 2% 127µs ± 2% ~ (p=0.056 n=5+5) rio/neo/py(!log)/sql/zhash.go-P16 2.08ms ± 3% 2.00ms ± 4% -3.98% (p=0.009 n=16+16) rio/neo/go/fs1/zhash.py 181µs ± 5% 189µs ± 9% ~ (p=0.079 n=5+5) rio/neo/go/fs1/zhash.py-P16 714µs ± 6% 711µs ± 3% ~ (p=0.861 n=15+16) rio/neo/go/fs1/zhash.go 36.9µs ± 3% 41.8µs ± 2% +13.21% (p=0.008 n=5+5) rio/neo/go/fs1/zhash.go+prefetch128 16.5µs ± 1% 16.8µs ± 3% ~ (p=0.103 n=5+5) rio/neo/go/fs1/zhash.go-P16 239µs ± 4% 195µs ± 4% -18.37% (p=0.000 n=15+13) rio/neo/go/fs1(!sha1)/zhash.go 32.7µs ± 7% 36.3µs ± 2% +11.07% (p=0.008 n=5+5) rio/neo/go/fs1(!sha1)/zhash.go+prefetch128 13.5µs ± 1% 13.9µs ± 4% ~ (p=0.056 n=5+5) rio/neo/go/fs1(!sha1)/zhash.go-P16 190µs ± 7% 138µs ±60% -27.42% (p=0.000 n=14+16) name old pystone/s new pystone/s delta rio/pystone 178k ± 2% 180k ± 3% ~ (p=0.421 n=5+5) name old time/op new time/op delta rio/disk/randread/direct/4K-min 34.0µs ± 1% 34.7µs ± 1% +2.06% (p=0.008 n=5+5) rio/disk/randread/direct/4K-avg 92.9µs ± 0% 93.2µs ± 0% +0.37% (p=0.024 n=5+5) rio/disk/randread/pagecache/4K-min 221ns ± 0% 441ns ± 0% +99.37% (p=0.016 n=4+5) rio/disk/randread/pagecache/4K-avg 637ns ± 0% 872ns ± 1% +37.01% (p=0.016 n=4+5) name old time/object new time/object delta dataset:wczblk1-8 rio/fs1/zhash.py 22.3µs ± 2% 22.8µs ± 2% +2.24% (p=0.048 n=5+5) rio/fs1/zhash.py-P16 51.7µs ±72% 60.3µs ±49% ~ (p=0.127 n=15+16) rio/fs1/zhash.go 2.40µs ± 0% 3.80µs ± 0% +58.33% (p=0.016 n=5+4) rio/fs1/zhash.go+prefetch128 4.34µs ± 8% 4.10µs ± 2% ~ (p=0.246 n=5+5) rio/fs1/zhash.go-P16 3.58µs ±24% 6.79µs ±19% +90.01% (p=0.000 n=16+14) rio/zeo/zhash.py 336µs ± 2% 342µs ± 2% +1.82% (p=0.040 n=5+5) rio/zeo/zhash.py-P16 1.61ms ±19% 1.64ms ±20% ~ (p=0.423 n=16+16) rio/neo/py/sqlite/zhash.py 304µs ± 6% 279µs ± 3% -8.11% (p=0.016 n=5+5) rio/neo/py/sqlite/zhash.py-P16 2.19ms ± 0% 2.28ms ± 1% +4.16% (p=0.000 n=13+15) rio/neo/py/sqlite/zhash.go 248µs ± 1% 147µs ± 2% -40.70% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.go+prefetch128 125µs ± 1% 125µs ± 2% ~ (p=0.651 n=5+5) rio/neo/py/sqlite/zhash.go-P16 1.76ms ±13% 1.73ms ±14% -1.72% (p=0.002 n=16+16) rio/neo/py(!log)/sqlite/zhash.py 291µs ± 2% 267µs ± 1% -8.20% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.py-P16 2.01ms ± 2% 2.01ms ± 1% ~ (p=0.545 n=16+15) rio/neo/py(!log)/sqlite/zhash.go 231µs ± 1% 130µs ± 2% -43.54% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go+prefetch128 110µs ± 2% 112µs ± 4% ~ (p=0.222 n=5+5) rio/neo/py(!log)/sqlite/zhash.go-P16 1.62ms ± 7% 1.62ms ± 0% +0.18% (p=0.029 n=16+11) rio/neo/py/sql/zhash.py 325µs ± 4% 294µs ± 1% -9.50% (p=0.029 n=4+4) rio/neo/py/sql/zhash.py-P16 2.88ms ± 1% 2.85ms ± 1% -0.94% (p=0.000 n=15+15) rio/neo/py/sql/zhash.go 275µs ± 2% 169µs ± 3% -38.39% (p=0.008 n=5+5) rio/neo/py/sql/zhash.go+prefetch128 154µs ± 3% 154µs ± 4% ~ (p=1.000 n=5+5) rio/neo/py/sql/zhash.go-P16 2.30ms ± 8% 2.19ms ±11% -5.03% (p=0.009 n=16+16) rio/neo/py(!log)/sql/zhash.py 313µs ± 4% 285µs ± 5% -8.95% (p=0.029 n=4+4) rio/neo/py(!log)/sql/zhash.py-P16 2.56ms ± 1% 2.47ms ± 1% -3.45% (p=0.000 n=15+14) rio/neo/py(!log)/sql/zhash.go 258µs ± 1% 152µs ± 1% -41.05% (p=0.016 n=5+4) rio/neo/py(!log)/sql/zhash.go+prefetch128 139µs ± 1% 137µs ± 3% ~ (p=0.151 n=5+5) rio/neo/py(!log)/sql/zhash.go-P16 2.21ms ± 5% 1.98ms ± 0% -10.19% (p=0.000 n=16+11) dataset:prod1-1024 rio/fs1/zhash.py 18.9µs ± 1% 18.9µs ± 2% ~ (p=0.825 n=5+5) rio/fs1/zhash.py-P16 58.0µs ±52% 56.2µs ±32% ~ (p=0.926 n=16+16) rio/fs1/zhash.go 1.30µs ± 0% 2.80µs ± 0% +115.38% (p=0.016 n=4+5) rio/fs1/zhash.go+prefetch128 2.78µs ±14% 2.70µs ± 0% ~ (p=0.413 n=5+4) rio/fs1/zhash.go-P16 2.24µs ±16% 6.59µs ±43% +194.93% (p=0.000 n=14+16) rio/zeo/zhash.py 302µs ± 7% 294µs ± 6% ~ (p=0.310 n=5+5) rio/zeo/zhash.py-P16 1.44ms ±11% 1.46ms ± 3% ~ (p=0.892 n=15+13) rio/neo/py/sqlite/zhash.py 269µs ± 1% 275µs ± 1% +2.51% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.py-P16 2.19ms ± 0% 2.34ms ± 0% +6.70% (p=0.000 n=16+13) rio/neo/py/sqlite/zhash.go 158µs ± 1% 140µs ± 3% -11.68% (p=0.008 n=5+5) rio/neo/py/sqlite/zhash.go+prefetch128 116µs ± 3% 118µs ± 1% ~ (p=0.111 n=5+5) rio/neo/py/sqlite/zhash.go-P16 1.90ms ± 0% 1.81ms ± 7% -4.58% (p=0.000 n=14+16) rio/neo/py(!log)/sqlite/zhash.py 259µs ± 4% 262µs ± 3% ~ (p=0.690 n=5+5) rio/neo/py(!log)/sqlite/zhash.py-P16 1.89ms ± 1% 2.04ms ± 0% +7.53% (p=0.000 n=15+15) rio/neo/py(!log)/sqlite/zhash.go 142µs ± 1% 123µs ± 2% -13.14% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go+prefetch128 101µs ± 2% 103µs ± 1% +2.37% (p=0.008 n=5+5) rio/neo/py(!log)/sqlite/zhash.go-P16 1.57ms ± 0% 1.61ms ± 5% ~ (p=0.089 n=13+16) rio/neo/py/sql/zhash.py 337µs ±43% 298µs ± 3% ~ (p=0.556 n=5+4) rio/neo/py/sql/zhash.py-P16 2.73ms ± 0% 2.86ms ± 0% +4.74% (p=0.000 n=15+15) rio/neo/py/sql/zhash.go 186µs ± 3% 164µs ± 4% -11.92% (p=0.008 n=5+5) rio/neo/py/sql/zhash.go+prefetch128 145µs ± 2% 147µs ± 2% ~ (p=0.095 n=5+5) rio/neo/py/sql/zhash.go-P16 2.29ms ± 6% 2.27ms ± 6% -1.19% (p=0.002 n=16+16) rio/neo/py(!log)/sql/zhash.py 293µs ± 4% 287µs ± 2% ~ (p=0.343 n=4+4) rio/neo/py(!log)/sql/zhash.py-P16 2.47ms ± 0% 2.51ms ± 1% +1.61% (p=0.000 n=15+15) rio/neo/py(!log)/sql/zhash.go 168µs ± 1% 146µs ± 2% -13.49% (p=0.008 n=5+5) rio/neo/py(!log)/sql/zhash.go+prefetch128 130µs ± 2% 127µs ± 2% ~ (p=0.056 n=5+5) rio/neo/py(!log)/sql/zhash.go-P16 2.08ms ± 3% 2.00ms ± 4% -3.98% (p=0.009 n=16+16)
-
Kirill Smelkov authored
-
- 21 Feb, 2018 6 commits
-
-
Kirill Smelkov authored
benchstat 20180221-deco-noturbo.txt 20180221-deco-noturbo-noz.txt name old pystone/s new pystone/s delta deco/pystone 220k ± 1% 221k ± 0% ~ (p=1.000 n=5+5) name old time/op new time/op delta deco/sha1/py/1K 1.83µs ± 1% 1.85µs ± 2% ~ (p=0.167 n=5+5) deco/sha1/go/1K 1.53µs ± 0% 1.53µs ± 0% ~ (p=0.556 n=4+5) deco/sha1/py/4K 6.68µs ± 1% 6.68µs ± 1% ~ (p=0.802 n=5+5) deco/sha1/go/4K 5.59µs ± 0% 5.59µs ± 0% ~ (p=0.151 n=5+5) deco/sha1/py/2M 3.19ms ± 0% 3.18ms ± 0% ~ (p=0.310 n=5+5) deco/sha1/go/2M 2.78ms ± 0% 2.78ms ± 0% ~ (p=0.222 n=5+5) deco/unzlib/py/null-1K 2.83µs ± 2% 2.81µs ± 0% ~ (p=0.516 n=5+5) deco/unzlib/go/null-1K 2.87µs ± 1% 2.86µs ± 0% ~ (p=0.198 n=5+5) deco/unzlib/py/null-4K 11.3µs ± 0% 11.3µs ± 1% ~ (p=0.794 n=4+5) deco/unzlib/go/null-4K 11.3µs ± 0% 11.3µs ± 0% ~ (p=0.548 n=5+5) deco/unzlib/py/null-2M 6.01ms ±19% 5.71ms ± 5% ~ (p=0.421 n=5+5) deco/unzlib/go/null-2M 4.79ms ± 0% 4.79ms ± 0% ~ (p=0.095 n=5+5) deco/unzlib/py/wczdata-avg 27.2µs ± 1% 27.2µs ± 1% ~ (p=0.841 n=5+5) deco/unzlib/go/wczdata-avg 26.7µs ± 0% 26.7µs ± 0% ~ (p=0.841 n=5+5) deco/unzlib/py/wczdata-max 26.7µs ± 1% 26.6µs ± 0% ~ (p=0.222 n=5+5) deco/unzlib/go/wczdata-max 26.5µs ± 0% 26.5µs ± 0% ~ (p=0.421 n=5+5) deco/unzlib/py/prod1-avg 6.08µs ±23% 5.02µs ± 1% -17.40% (p=0.032 n=5+4) deco/unzlib/go/prod1-avg 5.25µs ± 0% 5.27µs ± 1% ~ (p=1.000 n=5+5) deco/unzlib/py/prod1-max 510µs ± 1% 512µs ± 2% ~ (p=1.000 n=4+5) deco/unzlib/go/prod1-max 336µs ± 0% 336µs ± 0% ~ (p=0.421 n=5+5) deco/disk/randread/direct/4K-min 104µs ± 0% 105µs ± 1% ~ (p=0.357 n=5+5) deco/disk/randread/direct/4K-avg 143µs ± 1% 144µs ± 0% ~ (p=0.056 n=5+5) deco/disk/randread/direct/2M-min 5.38ms ± 0% 5.48ms ± 3% ~ (p=0.698 n=4+5) deco/disk/randread/direct/2M-avg 6.19ms ± 2% 6.13ms ± 1% ~ (p=0.167 n=5+5) deco/disk/randread/pagecache/4K-min 576ns ± 1% 570ns ± 1% ~ (p=0.198 n=5+5) deco/disk/randread/pagecache/4K-avg 974ns ± 1% 975ns ± 0% ~ (p=0.222 n=5+5) deco/disk/randread/pagecache/2M-min 196µs ± 4% 195µs ± 4% ~ (p=0.841 n=5+5) deco/disk/randread/pagecache/2M-avg 212µs ± 0% 214µs ± 0% +0.88% (p=0.008 n=5+5) name old time/object new time/object delta deco/fs1/zhash.py 17.9µs ±14% 18.0µs ±14% ~ (p=0.668 n=10+10) deco/fs1/zhash.py-P16 139µs ±18% 140µs ±32% ~ (p=0.752 n=32+32) deco/fs1/zhash.go 2.95µs ± 8% 2.97µs ± 9% ~ (p=0.809 n=10+10) deco/fs1/zhash.go+prefetch128 3.92µs ±25% 3.82µs ±14% ~ (p=0.755 n=10+10) deco/fs1/zhash.go-P16 13.9µs ±51% 14.1µs ±70% ~ (p=0.893 n=32+32) deco/zeo/zhash.py 382µs ± 1% 370µs ± 5% -3.17% (p=0.011 n=6+10) deco/zeo/zhash.py-P16 3.10ms ± 9% 3.13ms ± 5% ~ (p=0.213 n=32+29) deco/neo/py/sqlite/zhash.py 368µs ± 9% 351µs ± 7% ~ (p=0.165 n=10+10) deco/neo/py/sqlite/zhash.py-P16 3.20ms ± 3% 3.16ms ± 2% ~ (p=1.000 n=32+32) deco/neo/py/sqlite/zhash.go 177µs ± 7% 153µs ± 4% -13.24% (p=0.000 n=10+10) deco/neo/py/sqlite/zhash.go+prefetch128 129µs ± 5% 131µs ± 5% ~ (p=0.362 n=10+10) deco/neo/py/sqlite/zhash.go-P16 2.18ms ± 6% 2.10ms ± 4% -3.66% (p=0.001 n=32+32) deco/neo/py(!log)/sqlite/zhash.py 349µs ± 9% 322µs ± 5% -7.69% (p=0.015 n=10+10) deco/neo/py(!log)/sqlite/zhash.py-P16 3.01ms ± 4% 2.91ms ± 2% -3.16% (p=0.001 n=32+32) deco/neo/py(!log)/sqlite/zhash.go 161µs ± 7% 139µs ± 6% -13.77% (p=0.000 n=10+10) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 113µs ± 1% 115µs ± 5% ~ (p=0.529 n=10+10) deco/neo/py(!log)/sqlite/zhash.go-P16 1.96ms ± 3% 1.92ms ± 2% -1.94% (p=0.001 n=32+32) deco/neo/py/sql/zhash.py 417µs ±11% 408µs ± 9% ~ (p=0.645 n=8+8) deco/neo/py/sql/zhash.py-P16 4.55ms ± 4% 4.52ms ± 2% ~ (p=1.000 n=32+32) deco/neo/py/sql/zhash.go 227µs ± 9% 198µs ± 3% -12.91% (p=0.000 n=10+10) deco/neo/py/sql/zhash.go+prefetch128 184µs ± 5% 181µs ± 3% ~ (p=0.210 n=10+10) deco/neo/py/sql/zhash.go-P16 3.10ms ± 2% 2.91ms ± 3% -6.12% (p=0.000 n=32+32) deco/neo/py(!log)/sql/zhash.py 404µs ±10% 381µs ± 9% ~ (p=0.161 n=8+8) deco/neo/py(!log)/sql/zhash.py-P16 4.35ms ± 3% 4.20ms ± 1% -3.30% (p=0.000 n=32+32) deco/neo/py(!log)/sql/zhash.go 209µs ±10% 181µs ± 2% -13.37% (p=0.000 n=10+10) deco/neo/py(!log)/sql/zhash.go+prefetch128 161µs ± 5% 160µs ± 4% ~ (p=0.593 n=10+10) deco/neo/py(!log)/sql/zhash.go-P16 2.76ms ± 3% 2.58ms ± 1% -6.45% (p=0.000 n=32+32) deco/neo/go/fs1/zhash.py 222µs ± 2% 224µs ± 2% ~ (p=0.289 n=10+10) deco/neo/go/fs1/zhash.py-P16 1.98ms ± 8% 1.96ms ± 5% ~ (p=0.638 n=32+32) deco/neo/go/fs1/zhash.go 50.3µs ±13% 50.4µs ±14% ~ (p=0.250 n=10+10) deco/neo/go/fs1/zhash.go+prefetch128 21.2µs ±24% 20.9µs ±21% ~ (p=0.590 n=10+10) deco/neo/go/fs1/zhash.go-P16 334µs ±12% 336µs ±15% ~ (p=0.732 n=32+32) deco/neo/go/fs1(!sha1)/zhash.go 38.5µs ± 3% 38.6µs ± 3% ~ (p=0.698 n=10+10) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 15.7µs ±12% 15.2µs ±12% ~ (p=0.170 n=10+10) deco/neo/go/fs1(!sha1)/zhash.go-P16 262µs ±22% 264µs ±21% ~ (p=0.762 n=30+32) deco/neo/go/sqlite/zhash.py 282µs ±10% 264µs ± 4% ~ (p=0.239 n=10+10) deco/neo/go/sqlite/zhash.py-P16 2.45ms ± 7% 2.42ms ± 3% ~ (p=0.973 n=32+31) deco/neo/go/sqlite/zhash.go 111µs ±15% 89µs ± 5% -19.49% (p=0.000 n=10+10) deco/neo/go/sqlite/zhash.go+prefetch128 44.6µs ±25% 37.7µs ± 7% ~ (p=0.517 n=10+10) deco/neo/go/sqlite/zhash.go-P16 789µs ± 9% 711µs ±12% -9.89% (p=0.000 n=32+32) deco/neo/go/sqlite(!sha1)/zhash.go 109µs ±15% 83µs ± 2% -23.96% (p=0.000 n=10+9) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 41.5µs ±21% 38.2µs ±19% ~ (p=0.631 n=10+10) deco/neo/go/sqlite(!sha1)/zhash.go-P16 735µs ±11% 674µs ±17% -8.28% (p=0.002 n=32+31)
-
Kirill Smelkov authored
benchstat -alpha 0.07 20180220-deco-linux4.15.4-noturbo.txt 20180221-deco-noturbo.txt name old pystone/s new pystone/s delta deco/pystone 219k ± 2% 220k ± 1% ~ (p=0.310 n=5+5) name old time/op new time/op delta deco/sha1/py/1K 1.62µs ± 0% 1.83µs ± 1% +13.15% (p=0.008 n=5+5) deco/sha1/go/1K 1.53µs ± 0% 1.53µs ± 0% ~ (p=0.635 n=5+4) deco/sha1/py/4K 5.78µs ± 0% 6.68µs ± 1% +15.56% (p=0.008 n=5+5) deco/sha1/go/4K 5.59µs ± 1% 5.59µs ± 0% ~ (p=1.000 n=5+5) deco/sha1/py/2M 2.82ms ± 0% 3.19ms ± 0% +13.05% (p=0.008 n=5+5) deco/sha1/go/2M 2.77ms ± 0% 2.78ms ± 0% +0.20% (p=0.008 n=5+5) deco/disk/randread/direct/4K-min 104µs ± 2% 104µs ± 0% ~ (p=0.651 n=5+5) deco/disk/randread/direct/4K-avg 143µs ± 0% 143µs ± 1% ~ (p=0.317 n=5+5) deco/disk/randread/direct/2M-min 5.30ms ± 4% 5.38ms ± 0% ~ (p=0.175 n=5+4) deco/disk/randread/direct/2M-avg 6.18ms ± 1% 6.19ms ± 2% ~ (p=0.651 n=5+5) deco/disk/randread/pagecache/4K-min 584ns ± 0% 576ns ± 1% -1.37% (p=0.016 n=5+5) deco/disk/randread/pagecache/4K-avg 981ns ± 0% 974ns ± 1% ~ (p=0.071 n=5+5) deco/disk/randread/pagecache/2M-min 193µs ± 5% 196µs ± 4% ~ (p=0.690 n=5+5) deco/disk/randread/pagecache/2M-avg 211µs ± 0% 212µs ± 0% ~ (p=0.119 n=5+5) name old time/object new time/object delta deco/fs1/zhash.py 17.9µs ±13% 17.9µs ±14% ~ (p=0.983 n=8+10) deco/fs1/zhash.py-P16 132µs ±19% 139µs ±18% +5.39% (p=0.054 n=32+32) deco/fs1/zhash.go 3.00µs ± 7% 2.95µs ± 8% ~ (p=0.307 n=10+10) deco/fs1/zhash.go+prefetch128 3.54µs ±16% 3.92µs ±25% ~ (p=0.071 n=10+10) deco/fs1/zhash.go-P16 12.7µs ±64% 13.9µs ±51% ~ (p=0.254 n=31+32) deco/zeo/zhash.py 369µs ±11% 382µs ± 1% +3.53% (p=0.045 n=10+6) deco/zeo/zhash.py-P16 3.01ms ±12% 3.10ms ± 9% +2.83% (p=0.024 n=31+32) deco/neo/py/sqlite/zhash.py 378µs ±13% 368µs ± 9% ~ (p=0.436 n=10+10) deco/neo/py/sqlite/zhash.py-P16 3.21ms ± 3% 3.20ms ± 3% -0.41% (p=0.032 n=32+32) deco/neo/py/sqlite/zhash.go 235µs ±24% 177µs ± 7% -24.82% (p=0.063 n=10+10) deco/neo/py/sqlite/zhash.go+prefetch128 139µs ± 8% 129µs ± 5% -7.03% (p=0.003 n=10+10) deco/neo/py/sqlite/zhash.go-P16 2.37ms ± 7% 2.18ms ± 6% -8.16% (p=0.001 n=32+32) deco/neo/py(!log)/sqlite/zhash.py 355µs ±14% 349µs ± 9% ~ (p=0.579 n=10+10) deco/neo/py(!log)/sqlite/zhash.py-P16 3.01ms ± 4% 3.01ms ± 4% ~ (p=0.989 n=32+32) deco/neo/py(!log)/sqlite/zhash.go 213µs ±23% 161µs ± 7% -24.49% (p=0.060 n=10+10) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 123µs ± 9% 113µs ± 1% -8.23% (p=0.000 n=10+10) deco/neo/py(!log)/sqlite/zhash.go-P16 2.12ms ± 8% 1.96ms ± 3% -7.32% (p=0.001 n=32+32) deco/neo/py/sql/zhash.py 429µs ± 8% 417µs ±11% ~ (p=0.442 n=8+8) deco/neo/py/sql/zhash.py-P16 4.57ms ± 3% 4.55ms ± 4% ~ (p=0.257 n=32+32) deco/neo/py/sql/zhash.go 281µs ±19% 227µs ± 9% -18.94% (p=0.063 n=10+10) deco/neo/py/sql/zhash.go+prefetch128 201µs ± 7% 184µs ± 5% -8.40% (p=0.002 n=10+10) deco/neo/py/sql/zhash.go-P16 3.34ms ± 5% 3.10ms ± 2% -7.36% (p=0.000 n=32+32) deco/neo/py(!log)/sql/zhash.py 404µs ±14% 404µs ±10% ~ (p=0.959 n=8+8) deco/neo/py(!log)/sql/zhash.py-P16 4.34ms ± 2% 4.35ms ± 3% ~ (p=0.763 n=32+32) deco/neo/py(!log)/sql/zhash.go 261µs ±19% 209µs ±10% -20.01% (p=0.061 n=10+10) deco/neo/py(!log)/sql/zhash.go+prefetch128 180µs ± 7% 161µs ± 5% -10.49% (p=0.000 n=10+10) deco/neo/py(!log)/sql/zhash.go-P16 3.00ms ± 6% 2.76ms ± 3% -7.93% (p=0.000 n=32+32) deco/neo/go/fs1/zhash.py 220µs ± 2% 222µs ± 2% ~ (p=0.219 n=9+10) deco/neo/go/fs1/zhash.py-P16 2.00ms ± 7% 1.98ms ± 8% ~ (p=0.112 n=32+32) deco/neo/go/fs1/zhash.go 50.3µs ±13% 50.3µs ±13% ~ (p=0.747 n=10+10) deco/neo/go/fs1/zhash.go+prefetch128 20.6µs ±23% 21.2µs ±24% ~ (p=0.423 n=10+10) deco/neo/go/fs1/zhash.go-P16 325µs ±12% 334µs ±12% ~ (p=0.120 n=30+32) deco/neo/go/fs1(!sha1)/zhash.go 39.2µs ± 3% 38.5µs ± 3% ~ (p=0.137 n=10+10) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 15.3µs ±16% 15.7µs ±12% ~ (p=0.196 n=10+10) deco/neo/go/fs1(!sha1)/zhash.go-P16 270µs ±31% 262µs ±22% ~ (p=0.245 n=32+30) deco/neo/go/sqlite/zhash.py 292µs ±11% 282µs ±10% ~ (p=0.165 n=10+10) deco/neo/go/sqlite/zhash.py-P16 2.46ms ± 7% 2.45ms ± 7% ~ (p=0.546 n=32+32) deco/neo/go/sqlite/zhash.go 159µs ±28% 111µs ±15% -30.02% (p=0.060 n=10+10) deco/neo/go/sqlite/zhash.go+prefetch128 80.4µs ±34% 44.6µs ±25% -44.51% (p=0.001 n=10+10) deco/neo/go/sqlite/zhash.go-P16 1.13ms ±41% 0.79ms ± 9% -30.00% (p=0.000 n=32+32) deco/neo/go/sqlite(!sha1)/zhash.go 155µs ±28% 109µs ±15% -29.98% (p=0.061 n=10+10) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 78.9µs ±36% 41.5µs ±21% -47.34% (p=0.000 n=10+10) deco/neo/go/sqlite(!sha1)/zhash.go-P16 1.14ms ±25% 0.73ms ±11% -35.37% (p=0.000 n=32+32)
-
Kirill Smelkov authored
-
Kirill Smelkov authored
name old time/op new time/op delta deco/unzlib/py/null-1K 2.12µs ± 1% 2.11µs ± 2% ~ (p=0.841 n=5+5) deco/unzlib/go/null-1K 1.89µs ± 1% 2.27µs ± 1% +20.03% (p=0.008 n=5+5) deco/unzlib/py/null-4K 13.5µs ± 4% 13.3µs ± 0% ~ (p=0.310 n=5+5) deco/unzlib/go/null-4K 8.54µs ± 0% 8.91µs ± 0% +4.43% (p=0.008 n=5+5) deco/unzlib/py/null-2M 5.20ms ±10% 5.31ms ± 1% ~ (p=0.548 n=5+5) deco/unzlib/go/null-2M 2.58ms ± 1% 3.87ms ± 0% +50.13% (p=0.008 n=5+5) deco/unzlib/py/wczdata-avg 24.1µs ± 1% 23.9µs ± 0% ~ (p=0.114 n=4+4) deco/unzlib/go/wczdata-avg 68.0µs ± 1% 20.9µs ± 0% -69.29% (p=0.008 n=5+5) deco/unzlib/py/wczdata-max 23.5µs ± 1% 23.5µs ± 0% ~ (p=0.556 n=4+5) deco/unzlib/go/wczdata-max 67.8µs ± 0% 20.7µs ± 1% -69.45% (p=0.008 n=5+5) deco/unzlib/py/prod1-avg 4.47µs ± 2% 4.44µs ± 1% ~ (p=0.341 n=5+5) deco/unzlib/go/prod1-avg 11.0µs ± 0% 4.1µs ± 1% -62.39% (p=0.016 n=5+4) deco/unzlib/py/prod1-max 326µs ± 0% 325µs ± 0% ~ (p=0.095 n=5+5) deco/unzlib/go/prod1-max 542µs ± 0% 262µs ± 0% -51.71% (p=0.008 n=5+5) There is also unsafe interface with czlib.UnsafeDecompress & friends which I had not tried because even using safe interface brings ~ 3x speedup.
-
Kirill Smelkov authored
name old time/op new time/op delta deco/unzlib/py/null-1K 2.11µs ± 1% 2.12µs ± 1% ~ (p=0.690 n=5+5) deco/unzlib/go/null-1K 5.87µs ± 1% 1.89µs ± 1% -67.77% (p=0.008 n=5+5) deco/unzlib/py/null-4K 13.3µs ± 1% 13.5µs ± 4% ~ (p=0.690 n=5+5) deco/unzlib/go/null-4K 12.6µs ± 0% 8.5µs ± 0% -32.50% (p=0.008 n=5+5) deco/unzlib/py/null-2M 5.17ms ±11% 5.20ms ±10% ~ (p=1.000 n=5+5) deco/unzlib/go/null-2M 2.61ms ± 1% 2.58ms ± 1% -1.32% (p=0.016 n=5+5) deco/unzlib/py/wczdata-avg 20.9µs ±14% 24.1µs ± 1% +15.05% (p=0.016 n=5+4) deco/unzlib/go/wczdata-avg 73.0µs ± 1% 68.0µs ± 1% -6.94% (p=0.008 n=5+5) deco/unzlib/py/wczdata-max 23.6µs ± 0% 23.5µs ± 1% ~ (p=0.905 n=5+4) deco/unzlib/go/wczdata-max 72.7µs ± 0% 67.8µs ± 0% -6.79% (p=0.008 n=5+5) deco/unzlib/py/prod1-avg 4.53µs ± 3% 4.47µs ± 2% ~ (p=0.310 n=5+5) deco/unzlib/go/prod1-avg 15.5µs ± 0% 11.0µs ± 0% -29.11% (p=0.008 n=5+5) deco/unzlib/py/prod1-max 327µs ± 1% 326µs ± 0% ~ (p=1.000 n=5+5) deco/unzlib/go/prod1-max 545µs ± 0% 542µs ± 0% -0.68% (p=0.008 n=5+5) still on wczdata and prod1 much slower compared to py/c zlib.
-
Kirill Smelkov authored
-
- 20 Feb, 2018 3 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
We can detect which protocol a client speaks by analyzing the first few bytes it sends. Then we can use HTTP for administrative & debugging tasks. In particular HTTP right now allows to collect profiles and traces: https://golang.org/pkg/net/http/pprof/ and requests tracing for places where it is used: https://godoc.org/golang.org/x/net/trace Even though it is a pity that such wrapping retains artifact that the connection actually used is a wrapper connection over accepted one, the performance impact is negligable: name old time/object new time/object delta deco/neo/go/fs1(!sha1)/zhash.go 31.6µs ± 2% 31.6µs ± 2% ~ (p=0.897 n=28+29)
-
Kirill Smelkov authored
Generally pti adds quite overhead: benchstat -split dataset 20180220-deco-linux4.15.4-noturbo.txt 20180220-deco-linux4.15.4-noturbo-nopti.txt name old pystone/s new pystone/s delta deco/pystone 219k ± 2% 222k ± 1% ~ (p=0.095 n=5+5) name old time/op new time/op delta deco/sha1/py/1K 1.62µs ± 0% 1.62µs ± 0% ~ (p=0.246 n=5+5) deco/sha1/go/1K 1.53µs ± 0% 1.53µs ± 0% ~ (p=0.294 n=5+5) deco/sha1/py/4K 5.78µs ± 0% 5.78µs ± 0% ~ (p=0.937 n=5+5) deco/sha1/go/4K 5.59µs ± 1% 5.58µs ± 0% ~ (p=0.119 n=5+5) deco/sha1/py/2M 2.82ms ± 0% 2.82ms ± 0% ~ (p=0.056 n=5+5) deco/sha1/go/2M 2.77ms ± 0% 2.77ms ± 0% ~ (p=0.151 n=5+5) deco/disk/randread/direct/4K-min 104µs ± 2% 103µs ± 2% ~ (p=0.302 n=5+5) deco/disk/randread/direct/4K-avg 143µs ± 0% 142µs ± 1% ~ (p=0.056 n=5+5) deco/disk/randread/direct/2M-min 5.30ms ± 4% 5.44ms ± 5% ~ (p=0.238 n=5+5) deco/disk/randread/direct/2M-avg 6.18ms ± 1% 6.11ms ± 1% -1.20% (p=0.048 n=5+5) deco/disk/randread/pagecache/4K-min 584ns ± 0% 359ns ± 1% -38.64% (p=0.008 n=5+5) deco/disk/randread/pagecache/4K-avg 981ns ± 0% 745ns ± 0% -24.05% (p=0.008 n=5+5) deco/disk/randread/pagecache/2M-min 193µs ± 5% 195µs ± 4% ~ (p=0.690 n=5+5) deco/disk/randread/pagecache/2M-avg 211µs ± 0% 211µs ± 0% ~ (p=0.389 n=5+5) name old time/object new time/object delta dataset:wczblk1-8 deco/fs1/zhash.py 20.0µs ± 2% 19.4µs ± 2% -3.00% (p=0.029 n=4+4) deco/fs1/zhash.py-P16 136µs ±15% 130µs ±22% ~ (p=0.346 n=16+16) deco/fs1/zhash.go 3.20µs ± 0% 2.70µs ± 0% -15.62% (p=0.000 n=5+4) deco/fs1/zhash.go+prefetch128 3.82µs ± 7% 3.90µs ± 8% ~ (p=0.397 n=5+5) deco/fs1/zhash.go-P16 13.9µs ±79% 10.7µs ±82% ~ (p=0.055 n=16+16) deco/zeo/zhash.py 378µs ± 8% 360µs ± 8% ~ (p=0.222 n=5+5) deco/zeo/zhash.py-P16 3.16ms ± 4% 3.06ms ± 5% -3.12% (p=0.007 n=14+16) deco/neo/py/sqlite/zhash.py 399µs ± 7% 380µs ± 3% -4.75% (p=0.032 n=5+5) deco/neo/py/sqlite/zhash.py-P16 3.30ms ± 1% 3.18ms ± 2% -3.67% (p=0.000 n=16+16) deco/neo/py/sqlite/zhash.go 288µs ± 1% 265µs ± 1% -8.11% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go+prefetch128 147µs ± 2% 139µs ± 2% -5.61% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go-P16 2.52ms ± 0% 2.32ms ± 1% -7.87% (p=0.000 n=14+13) deco/neo/py(!log)/sqlite/zhash.py 380µs ± 7% 357µs ± 2% -6.01% (p=0.032 n=5+5) deco/neo/py(!log)/sqlite/zhash.py-P16 3.10ms ± 2% 3.05ms ± 2% -1.75% (p=0.000 n=15+16) deco/neo/py(!log)/sqlite/zhash.go 261µs ± 0% 244µs ± 1% -6.51% (p=0.008 n=5+5) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 131µs ± 2% 126µs ± 1% -4.17% (p=0.008 n=5+5) deco/neo/py(!log)/sqlite/zhash.go-P16 2.28ms ± 0% 2.17ms ± 0% -4.82% (p=0.000 n=14+16) deco/neo/py/sql/zhash.py 446µs ± 3% 424µs ± 6% ~ (p=0.200 n=4+4) deco/neo/py/sql/zhash.py-P16 4.71ms ± 0% 4.50ms ± 1% -4.28% (p=0.000 n=15+13) deco/neo/py/sql/zhash.go 330µs ± 1% 307µs ± 2% -6.97% (p=0.008 n=5+5) deco/neo/py/sql/zhash.go+prefetch128 213µs ± 2% 198µs ± 1% -7.12% (p=0.008 n=5+5) deco/neo/py/sql/zhash.go-P16 3.51ms ± 0% 3.22ms ± 0% -8.27% (p=0.000 n=15+13) deco/neo/py(!log)/sql/zhash.py 471µs ±41% 452µs ±43% ~ (p=0.310 n=5+5) deco/neo/py(!log)/sql/zhash.py-P16 4.41ms ± 0% 4.22ms ± 0% -4.21% (p=0.000 n=15+15) deco/neo/py(!log)/sql/zhash.go 310µs ± 1% 288µs ± 2% -7.10% (p=0.008 n=5+5) deco/neo/py(!log)/sql/zhash.go+prefetch128 189µs ± 4% 179µs ± 2% -4.96% (p=0.016 n=5+5) deco/neo/py(!log)/sql/zhash.go-P16 3.16ms ± 0% 2.95ms ± 0% -6.70% (p=0.000 n=16+16) deco/neo/go/fs1/zhash.py 224µs ± 3% 205µs ± 2% -8.54% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.py-P16 2.04ms ± 6% 1.98ms ± 8% -2.92% (p=0.012 n=15+16) deco/neo/go/fs1/zhash.go 56.6µs ± 1% 48.8µs ± 1% -13.82% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.go+prefetch128 24.3µs ± 4% 22.9µs ± 2% -5.76% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.go-P16 337µs ±10% 307µs ± 7% -8.94% (p=0.000 n=15+14) deco/neo/go/fs1(!sha1)/zhash.go 40.1µs ± 1% 33.5µs ± 1% -16.40% (p=0.008 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 16.5µs ± 8% 16.0µs ± 9% ~ (p=0.516 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go-P16 250µs ±20% 226µs ±16% -9.35% (p=0.001 n=15+16) deco/neo/go/sqlite/zhash.py 316µs ± 2% 283µs ± 4% -10.47% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.py-P16 2.55ms ± 3% 2.51ms ± 2% -1.61% (p=0.011 n=16+15) deco/neo/go/sqlite/zhash.go 203µs ± 0% 192µs ± 2% -5.26% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.go+prefetch128 106µs ± 2% 105µs ± 7% ~ (p=0.310 n=5+5) deco/neo/go/sqlite/zhash.go-P16 1.39ms ± 7% 1.36ms ± 6% -2.48% (p=0.012 n=16+16) deco/neo/go/sqlite(!sha1)/zhash.go 196µs ± 0% 185µs ± 1% -5.58% (p=0.016 n=4+5) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 104µs ± 3% 102µs ± 2% ~ (p=0.206 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go-P16 1.38ms ± 4% 1.31ms ±11% -5.48% (p=0.000 n=16+16) dataset:prod1-1024 deco/fs1/zhash.py 15.9µs ± 2% 15.3µs ± 3% -3.92% (p=0.029 n=4+4) deco/fs1/zhash.py-P16 128µs ±11% 129µs ±21% ~ (p=0.780 n=16+16) deco/fs1/zhash.go 2.80µs ± 0% 2.30µs ± 0% -17.86% (p=0.008 n=5+5) deco/fs1/zhash.go+prefetch128 3.26µs ± 7% 3.14µs ± 8% ~ (p=0.246 n=5+5) deco/fs1/zhash.go-P16 12.2µs ±50% 10.9µs ±34% ~ (p=0.154 n=16+15) deco/zeo/zhash.py 360µs ± 6% 346µs ± 2% ~ (p=0.095 n=5+5) deco/zeo/zhash.py-P16 2.90ms ± 8% 2.89ms ± 6% ~ (p=0.631 n=15+15) deco/neo/py/sqlite/zhash.py 357µs ± 5% 331µs ± 7% -7.39% (p=0.032 n=5+5) deco/neo/py/sqlite/zhash.py-P16 3.12ms ± 0% 3.02ms ± 0% -3.08% (p=0.000 n=16+16) deco/neo/py/sqlite/zhash.go 182µs ± 0% 168µs ± 1% -7.37% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go+prefetch128 131µs ± 2% 124µs ± 3% -5.32% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go-P16 2.23ms ± 0% 2.10ms ± 0% -6.02% (p=0.000 n=14+15) deco/neo/py(!log)/sqlite/zhash.py 330µs ± 4% 316µs ± 4% ~ (p=0.095 n=5+5) deco/neo/py(!log)/sqlite/zhash.py-P16 2.91ms ± 1% 2.82ms ± 1% -3.34% (p=0.000 n=16+16) deco/neo/py(!log)/sqlite/zhash.go 165µs ± 0% 154µs ± 1% -6.86% (p=0.008 n=5+5) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 114µs ± 1% 108µs ± 0% -5.75% (p=0.008 n=5+5) deco/neo/py(!log)/sqlite/zhash.go-P16 1.96ms ± 0% 1.85ms ± 0% -5.30% (p=0.000 n=15+15) deco/neo/py/sql/zhash.py 411µs ± 4% 373µs ± 1% -9.25% (p=0.029 n=4+4) deco/neo/py/sql/zhash.py-P16 4.45ms ± 0% 4.25ms ± 0% -4.47% (p=0.000 n=15+15) deco/neo/py/sql/zhash.go 231µs ± 1% 217µs ± 1% -6.01% (p=0.008 n=5+5) deco/neo/py/sql/zhash.go+prefetch128 189µs ± 1% 180µs ± 2% -4.71% (p=0.008 n=5+5) deco/neo/py/sql/zhash.go-P16 3.18ms ± 0% 2.98ms ± 0% -6.51% (p=0.000 n=15+14) deco/neo/py(!log)/sql/zhash.py 384µs ± 3% 359µs ± 3% -6.66% (p=0.029 n=4+4) deco/neo/py(!log)/sql/zhash.py-P16 4.28ms ± 0% 4.04ms ± 0% -5.45% (p=0.000 n=16+16) deco/neo/py(!log)/sql/zhash.go 213µs ± 1% 196µs ± 1% -7.85% (p=0.008 n=5+5) deco/neo/py(!log)/sql/zhash.go+prefetch128 171µs ± 1% 159µs ± 1% -7.19% (p=0.008 n=5+5) deco/neo/py(!log)/sql/zhash.go-P16 2.83ms ± 0% 2.59ms ± 3% -8.68% (p=0.000 n=16+16) deco/neo/go/fs1/zhash.py 218µs ± 1% 201µs ± 0% -8.14% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.py-P16 1.97ms ± 2% 1.88ms ± 8% -4.25% (p=0.000 n=15+16) deco/neo/go/fs1/zhash.go 44.1µs ± 1% 37.7µs ± 1% -14.60% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.go+prefetch128 16.9µs ± 3% 16.2µs ± 4% ~ (p=0.056 n=5+5) deco/neo/go/fs1/zhash.go-P16 313µs ± 8% 297µs ± 9% -4.97% (p=0.000 n=15+16) deco/neo/go/fs1(!sha1)/zhash.go 38.2µs ± 1% 32.8µs ± 2% -14.28% (p=0.008 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 14.0µs ± 3% 13.1µs ± 3% -6.70% (p=0.008 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go-P16 297µs ±12% 262µs ±17% -11.89% (p=0.000 n=15+16) deco/neo/go/sqlite/zhash.py 268µs ± 4% 244µs ± 5% -9.10% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.py-P16 2.36ms ± 2% 2.30ms ± 3% -2.50% (p=0.000 n=15+16) deco/neo/go/sqlite/zhash.go 114µs ± 0% 105µs ± 0% -8.44% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.go+prefetch128 54.8µs ± 2% 52.5µs ± 1% -4.13% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.go-P16 873µs ± 2% 812µs ± 5% -7.03% (p=0.000 n=15+14) deco/neo/go/sqlite(!sha1)/zhash.go 114µs ± 2% 103µs ± 2% -9.58% (p=0.008 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 53.5µs ± 3% 52.0µs ± 4% ~ (p=0.111 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go-P16 891µs ± 3% 856µs ± 2% -3.97% (p=0.000 n=16+15) however compare to 4.12 some things got also a bit slower even without pti (and some got faster): benchstat -split dataset 20180220-deco-linux4.12.13-noturbo.txt 20180220-deco-linux4.15.4-noturbo-nopti.txt name old pystone/s new pystone/s delta deco/pystone 211k ± 1% 222k ± 1% +5.19% (p=0.008 n=5+5) name old time/op new time/op delta deco/sha1/py/1K 1.69µs ± 0% 1.62µs ± 0% -3.86% (p=0.008 n=5+5) deco/sha1/go/1K 1.59µs ± 0% 1.53µs ± 0% -3.84% (p=0.008 n=5+5) deco/sha1/py/4K 6.01µs ± 0% 5.78µs ± 0% -3.93% (p=0.008 n=5+5) deco/sha1/go/4K 5.81µs ± 0% 5.58µs ± 0% -3.89% (p=0.008 n=5+5) deco/sha1/py/2M 2.93ms ± 0% 2.82ms ± 0% -3.65% (p=0.008 n=5+5) deco/sha1/go/2M 2.88ms ± 0% 2.77ms ± 0% -3.82% (p=0.008 n=5+5) deco/disk/randread/direct/4K-min 102µs ± 0% 103µs ± 2% ~ (p=0.135 n=5+5) deco/disk/randread/direct/4K-avg 140µs ± 0% 142µs ± 1% +1.56% (p=0.008 n=5+5) deco/disk/randread/direct/2M-min 4.95ms ± 2% 5.44ms ± 5% +9.94% (p=0.008 n=5+5) deco/disk/randread/direct/2M-avg 5.48ms ± 3% 6.11ms ± 1% +11.54% (p=0.008 n=5+5) deco/disk/randread/pagecache/4K-min 313ns ± 1% 359ns ± 1% +14.64% (p=0.008 n=5+5) deco/disk/randread/pagecache/4K-avg 706ns ± 0% 745ns ± 0% +5.50% (p=0.016 n=4+5) deco/disk/randread/pagecache/2M-min 200µs ± 5% 195µs ± 4% ~ (p=0.310 n=5+5) deco/disk/randread/pagecache/2M-avg 221µs ± 1% 211µs ± 0% -4.58% (p=0.008 n=5+5) name old time/object new time/object delta dataset:wczblk1-8 deco/fs1/zhash.py 19.8µs ± 2% 19.4µs ± 2% -2.25% (p=0.048 n=5+4) deco/fs1/zhash.py-P16 125µs ±30% 130µs ±22% ~ (p=0.468 n=16+16) deco/fs1/zhash.go 2.70µs ± 0% 2.70µs ± 0% ~ (all equal) deco/fs1/zhash.go+prefetch128 3.67µs ± 2% 3.90µs ± 8% ~ (p=0.175 n=4+5) deco/fs1/zhash.go-P16 10.6µs ±79% 10.7µs ±82% ~ (p=0.830 n=14+16) deco/zeo/zhash.py 384µs ± 9% 360µs ± 8% ~ (p=0.151 n=5+5) deco/zeo/zhash.py-P16 3.29ms ± 5% 3.06ms ± 5% -7.01% (p=0.000 n=15+16) deco/neo/py/sqlite/zhash.py 388µs ± 4% 380µs ± 3% ~ (p=0.421 n=5+5) deco/neo/py/sqlite/zhash.py-P16 3.45ms ± 1% 3.18ms ± 2% -7.82% (p=0.000 n=16+16) deco/neo/py/sqlite/zhash.go 273µs ± 1% 265µs ± 1% -2.94% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go+prefetch128 141µs ± 3% 139µs ± 2% ~ (p=0.286 n=5+5) deco/neo/py/sqlite/zhash.go-P16 2.24ms ± 1% 2.32ms ± 1% +3.74% (p=0.000 n=12+13) deco/neo/py(!log)/sqlite/zhash.py 357µs ± 1% 357µs ± 2% ~ (p=0.690 n=5+5) deco/neo/py(!log)/sqlite/zhash.py-P16 3.29ms ± 2% 3.05ms ± 2% -7.35% (p=0.000 n=16+16) deco/neo/py(!log)/sqlite/zhash.go 249µs ± 0% 244µs ± 1% -1.93% (p=0.008 n=5+5) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 128µs ± 2% 126µs ± 1% ~ (p=0.056 n=5+5) deco/neo/py(!log)/sqlite/zhash.go-P16 2.14ms ± 0% 2.17ms ± 0% +1.35% (p=0.000 n=16+16) deco/neo/py/sql/zhash.py 420µs ± 1% 424µs ± 6% ~ (p=0.686 n=4+4) deco/neo/py/sql/zhash.py-P16 4.59ms ± 0% 4.50ms ± 1% -1.86% (p=0.000 n=14+13) deco/neo/py/sql/zhash.go 312µs ± 1% 307µs ± 2% ~ (p=0.095 n=5+5) deco/neo/py/sql/zhash.go+prefetch128 200µs ± 2% 198µs ± 1% ~ (p=0.206 n=5+5) deco/neo/py/sql/zhash.go-P16 3.27ms ± 0% 3.22ms ± 0% -1.57% (p=0.000 n=14+13) deco/neo/py(!log)/sql/zhash.py 411µs ± 2% 452µs ±43% ~ (p=0.730 n=4+5) deco/neo/py(!log)/sql/zhash.py-P16 4.20ms ± 0% 4.22ms ± 0% +0.62% (p=0.000 n=14+15) deco/neo/py(!log)/sql/zhash.go 292µs ± 1% 288µs ± 2% ~ (p=0.095 n=5+5) deco/neo/py(!log)/sql/zhash.go+prefetch128 180µs ± 1% 179µs ± 2% ~ (p=0.548 n=5+5) deco/neo/py(!log)/sql/zhash.go-P16 2.88ms ± 0% 2.95ms ± 0% +2.67% (p=0.000 n=15+16) deco/neo/go/fs1/zhash.py 209µs ± 1% 205µs ± 2% -2.06% (p=0.016 n=5+5) deco/neo/go/fs1/zhash.py-P16 1.89ms ± 8% 1.98ms ± 8% +4.75% (p=0.002 n=16+16) deco/neo/go/fs1/zhash.go 45.2µs ± 1% 48.8µs ± 1% +7.78% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.go+prefetch128 23.3µs ± 5% 22.9µs ± 2% ~ (p=0.643 n=5+5) deco/neo/go/fs1/zhash.go-P16 290µs ±10% 307µs ± 7% +6.06% (p=0.002 n=16+14) deco/neo/go/fs1(!sha1)/zhash.go 30.2µs ± 2% 33.5µs ± 1% +10.91% (p=0.008 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 14.6µs ±10% 16.0µs ± 9% +9.60% (p=0.024 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go-P16 183µs ±15% 226µs ±16% +23.93% (p=0.000 n=15+16) deco/neo/go/sqlite/zhash.py 285µs ± 4% 283µs ± 4% ~ (p=0.548 n=5+5) deco/neo/go/sqlite/zhash.py-P16 2.44ms ± 4% 2.51ms ± 2% +3.12% (p=0.000 n=15+15) deco/neo/go/sqlite/zhash.go 191µs ± 1% 192µs ± 2% ~ (p=0.627 n=5+5) deco/neo/go/sqlite/zhash.go+prefetch128 106µs ± 5% 105µs ± 7% ~ (p=0.421 n=5+5) deco/neo/go/sqlite/zhash.go-P16 1.43ms ± 2% 1.36ms ± 6% -4.96% (p=0.000 n=16+16) deco/neo/go/sqlite(!sha1)/zhash.go 186µs ± 1% 185µs ± 1% ~ (p=0.421 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 102µs ± 3% 102µs ± 2% ~ (p=0.841 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go-P16 1.38ms ± 8% 1.31ms ±11% -5.27% (p=0.000 n=16+16) dataset:prod1-1024 deco/fs1/zhash.py 15.8µs ± 1% 15.3µs ± 3% -3.01% (p=0.029 n=4+4) deco/fs1/zhash.py-P16 127µs ±11% 129µs ±21% ~ (p=0.696 n=16+16) deco/fs1/zhash.go 2.20µs ± 0% 2.30µs ± 0% +4.55% (p=0.008 n=5+5) deco/fs1/zhash.go+prefetch128 3.08µs ± 4% 3.14µs ± 8% ~ (p=0.794 n=5+5) deco/fs1/zhash.go-P16 8.99µs ±66% 10.93µs ±34% ~ (p=0.127 n=16+15) deco/zeo/zhash.py 349µs ± 5% 346µs ± 2% ~ (p=0.548 n=5+5) deco/zeo/zhash.py-P16 3.17ms ± 2% 2.89ms ± 6% -8.82% (p=0.000 n=12+15) deco/neo/py/sqlite/zhash.py 350µs ± 5% 331µs ± 7% ~ (p=0.056 n=5+5) deco/neo/py/sqlite/zhash.py-P16 3.31ms ± 1% 3.02ms ± 0% -8.82% (p=0.000 n=16+16) deco/neo/py/sqlite/zhash.go 170µs ± 0% 168µs ± 1% -0.87% (p=0.008 n=5+5) deco/neo/py/sqlite/zhash.go+prefetch128 125µs ± 1% 124µs ± 3% ~ (p=0.421 n=5+5) deco/neo/py/sqlite/zhash.go-P16 2.11ms ± 0% 2.10ms ± 0% -0.61% (p=0.000 n=13+15) deco/neo/py(!log)/sqlite/zhash.py 317µs ± 1% 316µs ± 4% ~ (p=1.000 n=5+5) deco/neo/py(!log)/sqlite/zhash.py-P16 3.01ms ± 1% 2.82ms ± 1% -6.28% (p=0.000 n=16+16) deco/neo/py(!log)/sqlite/zhash.go 153µs ± 0% 154µs ± 1% ~ (p=0.095 n=5+5) deco/neo/py(!log)/sqlite/zhash.go+prefetch128 107µs ± 1% 108µs ± 0% ~ (p=0.548 n=5+5) deco/neo/py(!log)/sqlite/zhash.go-P16 1.83ms ± 0% 1.85ms ± 0% +1.06% (p=0.000 n=16+15) deco/neo/py/sql/zhash.py 382µs ± 2% 373µs ± 1% ~ (p=0.114 n=4+4) deco/neo/py/sql/zhash.py-P16 4.33ms ± 0% 4.25ms ± 0% -1.99% (p=0.000 n=15+15) deco/neo/py/sql/zhash.go 217µs ± 1% 217µs ± 1% ~ (p=1.000 n=5+5) deco/neo/py/sql/zhash.go+prefetch128 182µs ± 1% 180µs ± 2% ~ (p=0.135 n=5+5) deco/neo/py/sql/zhash.go-P16 2.95ms ± 4% 2.98ms ± 0% +1.10% (p=0.019 n=16+14) deco/neo/py(!log)/sql/zhash.py 372µs ± 4% 359µs ± 3% ~ (p=0.200 n=4+4) deco/neo/py(!log)/sql/zhash.py-P16 4.15ms ± 0% 4.04ms ± 0% -2.43% (p=0.000 n=14+16) deco/neo/py(!log)/sql/zhash.go 194µs ± 0% 196µs ± 1% +0.87% (p=0.008 n=5+5) deco/neo/py(!log)/sql/zhash.go+prefetch128 158µs ± 1% 159µs ± 1% ~ (p=0.246 n=5+5) deco/neo/py(!log)/sql/zhash.go-P16 2.62ms ± 0% 2.59ms ± 3% -1.32% (p=0.017 n=15+16) deco/neo/go/fs1/zhash.py 201µs ± 2% 201µs ± 0% ~ (p=0.690 n=5+5) deco/neo/go/fs1/zhash.py-P16 1.77ms ± 5% 1.88ms ± 8% +6.31% (p=0.000 n=16+16) deco/neo/go/fs1/zhash.go 34.3µs ± 1% 37.7µs ± 1% +9.73% (p=0.008 n=5+5) deco/neo/go/fs1/zhash.go+prefetch128 15.4µs ± 3% 16.2µs ± 4% +5.05% (p=0.032 n=5+5) deco/neo/go/fs1/zhash.go-P16 304µs ± 8% 297µs ± 9% ~ (p=0.128 n=16+16) deco/neo/go/fs1(!sha1)/zhash.go 28.9µs ± 2% 32.8µs ± 2% +13.58% (p=0.008 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go+prefetch128 12.7µs ± 5% 13.1µs ± 3% ~ (p=0.214 n=5+5) deco/neo/go/fs1(!sha1)/zhash.go-P16 298µs ± 2% 262µs ±17% -12.17% (p=0.000 n=13+16) deco/neo/go/sqlite/zhash.py 241µs ± 3% 244µs ± 5% ~ (p=0.548 n=5+5) deco/neo/go/sqlite/zhash.py-P16 2.21ms ± 3% 2.30ms ± 3% +4.41% (p=0.000 n=16+16) deco/neo/go/sqlite/zhash.go 101µs ± 0% 105µs ± 0% +3.43% (p=0.008 n=5+5) deco/neo/go/sqlite/zhash.go+prefetch128 53.3µs ± 3% 52.5µs ± 1% ~ (p=0.452 n=5+5) deco/neo/go/sqlite/zhash.go-P16 839µs ± 2% 812µs ± 5% -3.28% (p=0.000 n=14+14) deco/neo/go/sqlite(!sha1)/zhash.go 100µs ± 0% 103µs ± 2% +2.67% (p=0.016 n=4+5) deco/neo/go/sqlite(!sha1)/zhash.go+prefetch128 52.9µs ± 4% 52.0µs ± 4% ~ (p=0.310 n=5+5) deco/neo/go/sqlite(!sha1)/zhash.go-P16 853µs ± 3% 856µs ± 2% ~ (p=0.953 n=16+15)
-
- 19 Feb, 2018 1 commit
-
-
Kirill Smelkov authored
-
- 15 Feb, 2018 10 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 14 Feb, 2018 3 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 13 Feb, 2018 9 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-