good morning!!!!

Skip to content
Snippets Groups Projects
Unverified Commit edda9c63 authored by Anmol Sethi's avatar Anmol Sethi
Browse files

Add gobwas/ws and gorilla/websocket to mask benchmarks

On average, we are 1.75x faster than both now :rocket:

goos: linux
goarch: amd64
pkg: nhooyr.io/websocket
Benchmark_mask/2/basic-8         	263923018	         4.55 ns/op	 439.76 MB/s
Benchmark_mask/2/nhooyr-8        	200203578	         6.00 ns/op	 333.32 MB/s
Benchmark_mask/2/gorilla-8       	241622557	         4.95 ns/op	 404.38 MB/s
Benchmark_mask/2/gobwas-8        	200392592	         6.05 ns/op	 330.69 MB/s
Benchmark_mask/3/basic-8         	207684956	         5.78 ns/op	 519.07 MB/s
Benchmark_mask/3/nhooyr-8        	169297215	         7.10 ns/op	 422.49 MB/s
Benchmark_mask/3/gorilla-8       	205775799	         5.81 ns/op	 516.23 MB/s
Benchmark_mask/3/gobwas-8        	165921662	         7.23 ns/op	 415.06 MB/s
Benchmark_mask/4/basic-8         	167034886	         7.18 ns/op	 557.30 MB/s
Benchmark_mask/4/nhooyr-8        	287656454	         4.30 ns/op	 931.11 MB/s
Benchmark_mask/4/gorilla-8       	166140434	         7.30 ns/op	 547.57 MB/s
Benchmark_mask/4/gobwas-8        	138138087	         8.73 ns/op	 458.20 MB/s
Benchmark_mask/8/basic-8         	121179904	         9.92 ns/op	 806.67 MB/s
Benchmark_mask/8/nhooyr-8        	199632992	         6.07 ns/op	1318.60 MB/s
Benchmark_mask/8/gorilla-8       	100000000	        10.8 ns/op	 739.65 MB/s
Benchmark_mask/8/gobwas-8        	157898031	         7.54 ns/op	1061.27 MB/s
Benchmark_mask/16/basic-8        	73648268	        16.5 ns/op	 971.56 MB/s
Benchmark_mask/16/nhooyr-8       	186871615	         6.38 ns/op	2506.61 MB/s
Benchmark_mask/16/gorilla-8      	72374540	        16.6 ns/op	 964.36 MB/s
Benchmark_mask/16/gobwas-8       	127698723	         9.36 ns/op	1709.99 MB/s
Benchmark_mask/32/basic-8        	40010325	        29.8 ns/op	1073.76 MB/s
Benchmark_mask/32/nhooyr-8       	168590156	         7.12 ns/op	4494.72 MB/s
Benchmark_mask/32/gorilla-8      	67282072	        17.7 ns/op	1808.59 MB/s
Benchmark_mask/32/gobwas-8       	120038877	         9.96 ns/op	3213.55 MB/s
Benchmark_mask/128/basic-8       	10134963	       118 ns/op	1082.74 MB/s
Benchmark_mask/128/nhooyr-8      	100000000	        11.8 ns/op	10852.23 MB/s
Benchmark_mask/128/gorilla-8     	45452385	        26.4 ns/op	4853.64 MB/s
Benchmark_mask/128/gobwas-8      	57188290	        20.8 ns/op	6153.80 MB/s
Benchmark_mask/512/basic-8       	 2707371	       442 ns/op	1159.38 MB/s
Benchmark_mask/512/nhooyr-8      	37049421	        32.4 ns/op	15785.82 MB/s
Benchmark_mask/512/gorilla-8     	19006171	        62.8 ns/op	8150.01 MB/s
Benchmark_mask/512/gobwas-8      	21394864	        55.8 ns/op	9169.49 MB/s
Benchmark_mask/4096/basic-8      	  346566	      3467 ns/op	1181.46 MB/s
Benchmark_mask/4096/nhooyr-8     	 5170425	       232 ns/op	17648.07 MB/s
Benchmark_mask/4096/gorilla-8    	 2963664	       405 ns/op	10105.59 MB/s
Benchmark_mask/4096/gobwas-8     	 2989596	       402 ns/op	10192.40 MB/s
Benchmark_mask/16384/basic-8     	   86671	     13833 ns/op	1184.38 MB/s
Benchmark_mask/16384/nhooyr-8    	 1332649	       889 ns/op	18436.40 MB/s
Benchmark_mask/16384/gorilla-8   	  763900	      1556 ns/op	10527.53 MB/s
Benchmark_mask/16384/gobwas-8    	  764034	      1553 ns/op	10548.60 MB/s
PASS
ok  	nhooyr.io/websocket	64.091s

Results from a 8 GB 8 core Haswell VM on GCP.
parent c781bdf5
No related branches found
No related tags found
No related merge requests found
...@@ -13,8 +13,11 @@ import ( ...@@ -13,8 +13,11 @@ import (
"strings" "strings"
"testing" "testing"
"time" "time"
_ "unsafe"
"github.com/gobwas/ws"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
_ "github.com/gorilla/websocket"
"nhooyr.io/websocket/internal/assert" "nhooyr.io/websocket/internal/assert"
) )
...@@ -325,7 +328,7 @@ func Test_mask(t *testing.T) { ...@@ -325,7 +328,7 @@ func Test_mask(t *testing.T) {
} }
} }
func basixMask(maskKey [4]byte, pos int, b []byte) int { func basicMask(maskKey [4]byte, pos int, b []byte) int {
for i := range b { for i := range b {
b[i] ^= maskKey[pos&3] b[i] ^= maskKey[pos&3]
pos++ pos++
...@@ -333,6 +336,9 @@ func basixMask(maskKey [4]byte, pos int, b []byte) int { ...@@ -333,6 +336,9 @@ func basixMask(maskKey [4]byte, pos int, b []byte) int {
return pos & 3 return pos & 3
} }
//go:linkname gorillaMaskBytes github.com/gorilla/websocket.maskBytes
func gorillaMaskBytes(key [4]byte, pos int, b []byte) int
func Benchmark_mask(b *testing.B) { func Benchmark_mask(b *testing.B) {
sizes := []int{ sizes := []int{
2, 2,
...@@ -355,12 +361,13 @@ func Benchmark_mask(b *testing.B) { ...@@ -355,12 +361,13 @@ func Benchmark_mask(b *testing.B) {
name: "basic", name: "basic",
fn: func(b *testing.B, key [4]byte, p []byte) { fn: func(b *testing.B, key [4]byte, p []byte) {
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
basixMask(key, 0, p) basicMask(key, 0, p)
} }
}, },
}, },
{ {
name: "fast", name: "nhooyr",
fn: func(b *testing.B, key [4]byte, p []byte) { fn: func(b *testing.B, key [4]byte, p []byte) {
key32 := binary.LittleEndian.Uint32(key[:]) key32 := binary.LittleEndian.Uint32(key[:])
b.ResetTimer() b.ResetTimer()
...@@ -370,6 +377,22 @@ func Benchmark_mask(b *testing.B) { ...@@ -370,6 +377,22 @@ func Benchmark_mask(b *testing.B) {
} }
}, },
}, },
{
name: "gorilla",
fn: func(b *testing.B, key [4]byte, p []byte) {
for i := 0; i < b.N; i++ {
gorillaMaskBytes(key, 0, p)
}
},
},
{
name: "gobwas",
fn: func(b *testing.B, key [4]byte, p []byte) {
for i := 0; i < b.N; i++ {
ws.Cipher(p, key, 0)
}
},
},
} }
var key [4]byte var key [4]byte
......
...@@ -4,8 +4,12 @@ go 1.13 ...@@ -4,8 +4,12 @@ go 1.13
require ( require (
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee // indirect
github.com/gobwas/pool v0.2.0 // indirect
github.com/gobwas/ws v1.0.2
github.com/golang/protobuf v1.3.2 github.com/golang/protobuf v1.3.2
github.com/google/go-cmp v0.3.1 github.com/google/go-cmp v0.3.1
github.com/gorilla/websocket v1.4.1
github.com/kr/pretty v0.1.0 // indirect github.com/kr/pretty v0.1.0 // indirect
github.com/stretchr/testify v1.4.0 // indirect github.com/stretchr/testify v1.4.0 // indirect
go.uber.org/atomic v1.4.0 // indirect go.uber.org/atomic v1.4.0 // indirect
......
...@@ -2,10 +2,18 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8 ...@@ -2,10 +2,18 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment