Use bufferSize to calc channel buffer

This commit is contained in:
风扇滑翔翼
2025-12-22 02:44:45 +00:00
committed by GitHub
parent 8c0d32f6f1
commit 42214c3287
+11 -2
View File
@@ -5,6 +5,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/xtls/xray-core/features/policy"
"github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/signal" "github.com/xtls/xray-core/common/signal"
"github.com/xtls/xray-core/features/stats" "github.com/xtls/xray-core/features/stats"
@@ -141,8 +142,16 @@ func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error
} }
func copyV(r *SingleReader, w Writer, handler *copyHandler) error { func copyV(r *SingleReader, w Writer, handler *copyHandler) error {
// max packet len is 8192, so buffer channel size is 512, about 4MB memory usage // channel buffer size is maxBuffer/maxPerPacketLen (ignore the case of many small packets)
cache := make(chan *Buffer, 512) // default buffer size:
// 0 in ARM MIPS MIPSLE
// 4kb in ARM64 MIPS64 MIPS64LE
// 512kb in others
channelBuffer := (policy.SessionDefault().Buffer.PerConnection)/Size
if channelBuffer <= 0 {
channelBuffer = 4
}
cache := make(chan *Buffer, channelBuffer)
stopRead := make(chan struct{}) stopRead := make(chan struct{})
var rErr error var rErr error
var wErr error var wErr error