From 220ef9e2e28a6c904770acfc737e3c407e51e2af Mon Sep 17 00:00:00 2001 From: Dreamacro <8615343+Dreamacro@users.noreply.github.com> Date: Mon, 23 May 2022 12:27:34 +0800 Subject: [PATCH] chore: add benchmark r/w --- test/clash_test.go | 34 ++++++++++++++++++++++++++-------- test/snell_test.go | 2 +- test/ss_test.go | 2 +- test/vmess_test.go | 2 +- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/test/clash_test.go b/test/clash_test.go index 1f5b2c79..e7f47894 100644 --- a/test/clash_test.go +++ b/test/clash_test.go @@ -615,6 +615,10 @@ func benchmarkProxy(b *testing.B, proxy C.ProxyAdapter) { require.NoError(b, err) defer l.Close() + chunkSize := int64(16 * 1024) + chunk := make([]byte, chunkSize) + rand.Read(chunk) + go func() { c, err := l.Accept() if err != nil { @@ -622,12 +626,17 @@ func benchmarkProxy(b *testing.B, proxy C.ProxyAdapter) { } defer c.Close() + go func() { + for { + _, err := c.Write(chunk) + if err != nil { + return + } + } + }() io.Copy(io.Discard, c) }() - chunkSize := int64(16 * 1024) - chunk := make([]byte, chunkSize) - rand.Read(chunk) conn, err := proxy.DialContext(context.Background(), &C.Metadata{ Host: localIP.String(), DstPort: "10001", @@ -638,11 +647,20 @@ func benchmarkProxy(b *testing.B, proxy C.ProxyAdapter) { _, err = conn.Write([]byte("skip protocol handshake")) require.NoError(b, err) - b.SetBytes(chunkSize) - b.ResetTimer() - for i := 0; i < b.N; i++ { - conn.Write(chunk) - } + b.Run("Write", func(b *testing.B) { + b.SetBytes(chunkSize) + for i := 0; i < b.N; i++ { + conn.Write(chunk) + } + }) + + b.Run("Read", func(b *testing.B) { + b.SetBytes(chunkSize) + buf := make([]byte, chunkSize) + for i := 0; i < b.N; i++ { + conn.Read(buf) + } + }) } func TestClash_Basic(t *testing.T) { diff --git a/test/snell_test.go b/test/snell_test.go index c43a798a..ae9ce0c1 100644 --- a/test/snell_test.go +++ b/test/snell_test.go @@ -150,7 +150,7 @@ func Benchmark_Snell(b *testing.B) { Binds: []string{fmt.Sprintf("%s:/config.conf", C.Path.Resolve("snell-http.conf"))}, } - id, err := startContainer(cfg, hostCfg, "snell-http") + id, err := startContainer(cfg, hostCfg, "snell-bench") require.NoError(b, err) b.Cleanup(func() { diff --git a/test/ss_test.go b/test/ss_test.go index c8f505db..0fef6364 100644 --- a/test/ss_test.go +++ b/test/ss_test.go @@ -167,7 +167,7 @@ func Benchmark_Shadowsocks(b *testing.B) { PortBindings: defaultPortBindings, } - id, err := startContainer(cfg, hostCfg, "ss") + id, err := startContainer(cfg, hostCfg, "ss-bench") require.NoError(b, err) b.Cleanup(func() { diff --git a/test/vmess_test.go b/test/vmess_test.go index b147e104..c3f47a01 100644 --- a/test/vmess_test.go +++ b/test/vmess_test.go @@ -371,7 +371,7 @@ func Benchmark_Vmess(b *testing.B) { Binds: []string{fmt.Sprintf("%s:/etc/v2ray/config.json", configPath)}, } - id, err := startContainer(cfg, hostCfg, "vmess-aead") + id, err := startContainer(cfg, hostCfg, "vmess-bench") require.NoError(b, err) b.Cleanup(func() {