From 49b8cdf48ecce2d0f2852b2c4c4e1d7acd505321 Mon Sep 17 00:00:00 2001 From: "qiheng.zhou" Date: Fri, 31 Jan 2025 16:49:56 +0800 Subject: [PATCH 1/5] fix: gonet transServer processes gRPC transHandler --- pkg/remote/trans/common.go | 24 ++++++++++++++++++++++ pkg/remote/trans/gonet/trans_server.go | 9 ++++++++ pkg/remote/trans/nphttp2/server_handler.go | 6 ++++++ 3 files changed, 39 insertions(+) diff --git a/pkg/remote/trans/common.go b/pkg/remote/trans/common.go index 4101ff509c..c818da7e8e 100644 --- a/pkg/remote/trans/common.go +++ b/pkg/remote/trans/common.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "net" + "sync/atomic" "time" "github.com/cloudwego/kitex/pkg/remote" @@ -29,6 +30,29 @@ import ( var readMoreTimeout = 5 * time.Millisecond +type ( + CtxKeyOnRead struct{} + CtxValueOnRead struct { + onlyOnce int32 + } +) + +func (v *CtxValueOnRead) SetOnlyOnce(b bool) { + if b { + atomic.StoreInt32(&v.onlyOnce, 1) + } else { + atomic.StoreInt32(&v.onlyOnce, 0) + } +} + +func (v *CtxValueOnRead) GetOnlyOnce() bool { + if atomic.LoadInt32(&v.onlyOnce) == 1 { + return true + } else { + return false + } +} + // Extension is the interface that trans extensions need to implement, it will make the extension of trans more easily. // Normally if we want to extend transport layer we need to implement the trans interfaces which are defined in trans_handler.go. // In fact most code logic is similar in same mode, so the Extension interface is the the differentiated part that need to diff --git a/pkg/remote/trans/gonet/trans_server.go b/pkg/remote/trans/gonet/trans_server.go index aae4f8811a..aaf3f09b0b 100644 --- a/pkg/remote/trans/gonet/trans_server.go +++ b/pkg/remote/trans/gonet/trans_server.go @@ -96,9 +96,18 @@ func (ts *transServer) BootstrapServer(ln net.Listener) (err error) { klog.CtxErrorf(ctx, "KITEX: OnActive error=%s", err) return } + ctxValueOnRead := &trans.CtxValueOnRead{} + ctx = context.WithValue(ctx, trans.CtxKeyOnRead{}, ctxValueOnRead) + onReadOnlyOnceCheck := false for { ts.refreshDeadline(rpcinfo.GetRPCInfo(ctx), bc) err := ts.transHdlr.OnRead(ctx, bc) + if !onReadOnlyOnceCheck { + onReadOnlyOnceCheck = true + if ctxValueOnRead.GetOnlyOnce() { + break + } + } if err != nil { ts.onError(ctx, err, bc) _ = bc.Close() diff --git a/pkg/remote/trans/nphttp2/server_handler.go b/pkg/remote/trans/nphttp2/server_handler.go index 601689a63a..1917dae80c 100644 --- a/pkg/remote/trans/nphttp2/server_handler.go +++ b/pkg/remote/trans/nphttp2/server_handler.go @@ -29,6 +29,8 @@ import ( "sync/atomic" "time" + "github.com/cloudwego/kitex/pkg/remote/trans" + "github.com/cloudwego/netpoll" "github.com/cloudwego/kitex/pkg/endpoint" @@ -128,6 +130,10 @@ func (t *svrTransHandler) Read(ctx context.Context, conn net.Conn, msg remote.Me // 只 return write err func (t *svrTransHandler) OnRead(ctx context.Context, conn net.Conn) error { + if v := ctx.Value(trans.CtxKeyOnRead{}); v != nil { + value := v.(*trans.CtxValueOnRead) + value.SetOnlyOnce(true) + } svrTrans := ctx.Value(ctxKeySvrTransport).(*SvrTrans) tr := svrTrans.tr tr.HandleStreams(func(s *grpcTransport.Stream) { From bc6b4b25aa33e27a989ec8a54d08a3f4469749de Mon Sep 17 00:00:00 2001 From: "qiheng.zhou" Date: Fri, 31 Jan 2025 16:58:55 +0800 Subject: [PATCH 2/5] perf: use gopool --- go.mod | 2 +- go.sum | 2 ++ pkg/remote/trans/gonet/trans_server.go | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index cef81f69e7..563c8f8d6e 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/cloudwego/dynamicgo v0.5.1-0.20250115031329-d58b94fc7d71 github.com/cloudwego/fastpb v0.0.5 github.com/cloudwego/frugal v0.2.3 - github.com/cloudwego/gopkg v0.1.4-0.20241217093255-8980b14172b7 + github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1 github.com/cloudwego/localsession v0.1.2 github.com/cloudwego/netpoll v0.6.5 github.com/cloudwego/runtimex v0.1.1 diff --git a/go.sum b/go.sum index 7c0756ee0b..ff05dbfbb8 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ github.com/cloudwego/frugal v0.2.3 h1:t1hhhAi8lXcx7Ncs4PR1pSZ90vlDU1cy5K2btDMFpo github.com/cloudwego/frugal v0.2.3/go.mod h1:nC1U47gswLRiaxv6dybrhZvsDGCfQP9RGiiWC73CnoI= github.com/cloudwego/gopkg v0.1.4-0.20241217093255-8980b14172b7 h1:RmKES3lXoM62rUVEEy0teTsPYNBtFpqSN1lYBw4v82g= github.com/cloudwego/gopkg v0.1.4-0.20241217093255-8980b14172b7/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRrWUOsCMI= +github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1 h1:qkodCQ1+B+5GM9i/XplrZ54oSI/FEAl3OQYJFIJHeDY= +github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRrWUOsCMI= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cloudwego/localsession v0.1.2 h1:RBmeLDO5sKr4ujd8iBp5LTMmuVKLdu88jjIneq/fEZ8= diff --git a/pkg/remote/trans/gonet/trans_server.go b/pkg/remote/trans/gonet/trans_server.go index aaf3f09b0b..11a3d3e4f0 100644 --- a/pkg/remote/trans/gonet/trans_server.go +++ b/pkg/remote/trans/gonet/trans_server.go @@ -26,6 +26,8 @@ import ( "sync" "time" + "github.com/cloudwego/gopkg/concurrency/gopool" + "github.com/cloudwego/netpoll" "github.com/cloudwego/kitex/pkg/remote/trans" @@ -82,7 +84,7 @@ func (ts *transServer) BootstrapServer(ln net.Listener) (err error) { klog.Errorf("KITEX: BootstrapServer accept failed, err=%s", err.Error()) os.Exit(1) } - go func() { + gopool.CtxGo(nil, func() { var ( ctx = context.Background() err error @@ -114,7 +116,7 @@ func (ts *transServer) BootstrapServer(ln net.Listener) (err error) { return } } - }() + }) } } From 28d0fc1c869f7613f01373cb32fee71bc9fd1a18 Mon Sep 17 00:00:00 2001 From: "qiheng.zhou" Date: Mon, 3 Feb 2025 14:38:14 +0800 Subject: [PATCH 3/5] reuse buffer for read --- go.mod | 2 +- go.sum | 26 +++++++++++++++++++------- pkg/remote/trans/gonet/bytebuffer.go | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 563c8f8d6e..afbc1dede5 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/cloudwego/frugal v0.2.3 github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1 github.com/cloudwego/localsession v0.1.2 - github.com/cloudwego/netpoll v0.6.5 + github.com/cloudwego/netpoll v0.6.6-0.20250203063552-1a23ea584add github.com/cloudwego/runtimex v0.1.1 github.com/cloudwego/thriftgo v0.3.18 github.com/golang/mock v1.6.0 diff --git a/go.sum b/go.sum index ff05dbfbb8..feb062ea91 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,5 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/bytedance/gopkg v0.1.0/go.mod h1:FtQG3YbQG9L/91pbKSw787yBQPutC+457AvDW77fgUQ= github.com/bytedance/gopkg v0.1.1 h1:3azzgSkiaw79u24a+w9arfH8OfnQQ4MHUt9lJFREEaE= github.com/bytedance/gopkg v0.1.1/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= @@ -21,16 +20,14 @@ github.com/cloudwego/fastpb v0.0.5 h1:vYnBPsfbAtU5TVz5+f9UTlmSCixG9F9vRwaqE0mZPZ github.com/cloudwego/fastpb v0.0.5/go.mod h1:Bho7aAKBUtT9RPD2cNVkTdx4yQumfSv3If7wYnm1izk= github.com/cloudwego/frugal v0.2.3 h1:t1hhhAi8lXcx7Ncs4PR1pSZ90vlDU1cy5K2btDMFpoA= github.com/cloudwego/frugal v0.2.3/go.mod h1:nC1U47gswLRiaxv6dybrhZvsDGCfQP9RGiiWC73CnoI= -github.com/cloudwego/gopkg v0.1.4-0.20241217093255-8980b14172b7 h1:RmKES3lXoM62rUVEEy0teTsPYNBtFpqSN1lYBw4v82g= -github.com/cloudwego/gopkg v0.1.4-0.20241217093255-8980b14172b7/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRrWUOsCMI= github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1 h1:qkodCQ1+B+5GM9i/XplrZ54oSI/FEAl3OQYJFIJHeDY= github.com/cloudwego/gopkg v0.1.4-0.20250108101532-52ba6073f5a1/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRrWUOsCMI= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cloudwego/localsession v0.1.2 h1:RBmeLDO5sKr4ujd8iBp5LTMmuVKLdu88jjIneq/fEZ8= github.com/cloudwego/localsession v0.1.2/go.mod h1:J4uams2YT/2d4t7OI6A7NF7EcG8OlHJsOX2LdPbqoyc= -github.com/cloudwego/netpoll v0.6.5 h1:6E/BWhSzQoyLg9Kx/4xiMdIIpovzwBtXvuqSqaTUzDQ= -github.com/cloudwego/netpoll v0.6.5/go.mod h1:BtM+GjKTdwKoC8IOzD08/+8eEn2gYoiNLipFca6BVXQ= +github.com/cloudwego/netpoll v0.6.6-0.20250203063552-1a23ea584add h1:jpeTTxW6GUL1bbQuMt9AF7Mn6GSa1wc8W6LbeNokCqc= +github.com/cloudwego/netpoll v0.6.6-0.20250203063552-1a23ea584add/go.mod h1:MrUoUd9hf2pimAGP+a9MR2dn1m8xxlOhOqG08Vod0Q8= github.com/cloudwego/runtimex v0.1.1 h1:lheZjFOyKpsq8TsGGfmX9/4O7F0TKpWmB8on83k7GE8= github.com/cloudwego/runtimex v0.1.1/go.mod h1:23vL/HGV0W8nSCHbe084AgEBdDV4rvXenEUMnUNvUd8= github.com/cloudwego/thriftgo v0.3.18 h1:gnr1vz7G3RbwwCK9AMKHZf63VYGa7ene6WbI9VrBJSw= @@ -106,12 +103,14 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= @@ -135,6 +134,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -146,6 +147,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -159,7 +161,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -171,6 +175,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -188,16 +193,23 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/remote/trans/gonet/bytebuffer.go b/pkg/remote/trans/gonet/bytebuffer.go index 566d8d6c48..bf5457168e 100644 --- a/pkg/remote/trans/gonet/bytebuffer.go +++ b/pkg/remote/trans/gonet/bytebuffer.go @@ -55,7 +55,7 @@ func NewBufferReader(ir io.Reader) remote.ByteBuffer { if npReader, ok := ir.(interface{ Reader() netpoll.Reader }); ok { rw.reader = npReader.Reader() } else { - rw.reader = netpoll.NewReader(ir) + rw.reader = netpoll.NewReaderReuseBuffer(ir) } rw.ioReader = ir rw.status = remote.BitReadable From 1a3e677a02ec3acaf28b6a0328eb1aad1973cce7 Mon Sep 17 00:00:00 2001 From: "qiheng.zhou" Date: Tue, 4 Feb 2025 11:47:01 +0800 Subject: [PATCH 4/5] release read buffer --- pkg/remote/trans/gonet/trans_server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/remote/trans/gonet/trans_server.go b/pkg/remote/trans/gonet/trans_server.go index 11a3d3e4f0..949057cc3a 100644 --- a/pkg/remote/trans/gonet/trans_server.go +++ b/pkg/remote/trans/gonet/trans_server.go @@ -92,7 +92,7 @@ func (ts *transServer) BootstrapServer(ln net.Listener) (err error) { defer func() { transRecover(ctx, conn, "OnRead") }() - bc := newBufioConn(conn) + bc := conn //newBufioConn(conn) ctx, err = ts.transHdlr.OnActive(ctx, bc) if err != nil { klog.CtxErrorf(ctx, "KITEX: OnActive error=%s", err) @@ -166,7 +166,7 @@ type bufioConn struct { func newBufioConn(c net.Conn) *bufioConn { return &bufioConn{ conn: c, - r: netpoll.NewReader(c), + r: netpoll.NewReaderReuseBuffer(c), } } From 0fbc42ebcbb138d35e98a2c2538a66aa9672824f Mon Sep 17 00:00:00 2001 From: "qiheng.zhou" Date: Tue, 4 Feb 2025 14:23:34 +0800 Subject: [PATCH 5/5] reuse write buffer --- pkg/remote/trans/gonet/bytebuffer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/remote/trans/gonet/bytebuffer.go b/pkg/remote/trans/gonet/bytebuffer.go index bf5457168e..37a0e33a6b 100644 --- a/pkg/remote/trans/gonet/bytebuffer.go +++ b/pkg/remote/trans/gonet/bytebuffer.go @@ -66,7 +66,7 @@ func NewBufferReader(ir io.Reader) remote.ByteBuffer { // NewBufferWriter creates a new remote.ByteBuffer using the given netpoll.ZeroCopyWriter. func NewBufferWriter(iw io.Writer) remote.ByteBuffer { rw := rwPool.Get().(*bufferReadWriter) - rw.writer = netpoll.NewWriter(iw) + rw.writer = netpoll.NewWriterReuseBuffer(iw) rw.ioWriter = iw rw.status = remote.BitWritable return rw