Skip to content

Commit b439ac6

Browse files
authored
Use bufferSize to calc channel buffer
1 parent 8c0d32f commit b439ac6

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

common/buf/copy.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"sync"
66
"time"
77

8+
"github.com/xtls/xray-core/features/policy"
89
"github.com/xtls/xray-core/common/errors"
910
"github.com/xtls/xray-core/common/signal"
1011
"github.com/xtls/xray-core/features/stats"
@@ -141,8 +142,17 @@ func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error
141142
}
142143

143144
func copyV(r *SingleReader, w Writer, handler *copyHandler) error {
144-
// max packet len is 8192, so buffer channel size is 512, about 4MB memory usage
145-
cache := make(chan *Buffer, 512)
145+
// channel buffer size is maxBuffer/maxPerPacketLen (ignore the case of many small packets)
146+
// default buffer size:
147+
// 0 in ARM MIPS MIPSLE
148+
// 4kb in ARM64 MIPS64 MIPS64LE
149+
// 512kb in others
150+
const Size = 16 * 1024
151+
channelBuffer := (policy.SessionDefault().Buffer.PerConnection)/Size
152+
if channelBuffer <= 0 {
153+
channelBuffer = 4
154+
}
155+
cache := make(chan *Buffer, channelBuffer)
146156
stopRead := make(chan struct{})
147157
var rErr error
148158
var wErr error

0 commit comments

Comments
 (0)