mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Increase smux and QueuePacketConn buffer sizes
This should increase the maximum amount of inflight data and hopefully the performance of Snowflake, especially for clients geographically distant from proxies and the server.
This commit is contained in:
parent
b203a75c41
commit
e6715cb4ee
3 changed files with 14 additions and 3 deletions
|
@ -21,6 +21,9 @@ const (
|
|||
SnowflakeTimeout = 20 * time.Second
|
||||
// How long to wait for the OnOpen callback on a DataChannel.
|
||||
DataChannelTimeout = 10 * time.Second
|
||||
|
||||
WindowSize = 65535
|
||||
StreamSize = 1048576 //1MB
|
||||
)
|
||||
|
||||
type dummyAddr struct{}
|
||||
|
@ -224,7 +227,7 @@ func newSession(snowflakes SnowflakeCollector) (net.PacketConn, *smux.Session, e
|
|||
conn.SetStreamMode(true)
|
||||
// Set the maximum send and receive window sizes to a high number
|
||||
// Removes KCP bottlenecks: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40026
|
||||
conn.SetWindowSize(65535, 65535)
|
||||
conn.SetWindowSize(WindowSize, WindowSize)
|
||||
// Disable the dynamic congestion window (limit only by the
|
||||
// maximum of local and remote static windows).
|
||||
conn.SetNoDelay(
|
||||
|
@ -237,6 +240,8 @@ func newSession(snowflakes SnowflakeCollector) (net.PacketConn, *smux.Session, e
|
|||
smuxConfig := smux.DefaultConfig()
|
||||
smuxConfig.Version = 2
|
||||
smuxConfig.KeepAliveTimeout = 10 * time.Minute
|
||||
smuxConfig.MaxStreamBuffer = StreamSize
|
||||
|
||||
sess, err := smux.Client(conn, smuxConfig)
|
||||
if err != nil {
|
||||
conn.Close()
|
||||
|
|
|
@ -11,7 +11,7 @@ import "errors"
|
|||
var Token = [8]byte{0x12, 0x93, 0x60, 0x5d, 0x27, 0x81, 0x75, 0xf5}
|
||||
|
||||
// The size of receive and send queues.
|
||||
const queueSize = 32
|
||||
const queueSize = 2048
|
||||
|
||||
var errClosedPacketConn = errors.New("operation on closed connection")
|
||||
var errNotImplemented = errors.New("not implemented")
|
||||
|
|
|
@ -16,6 +16,11 @@ import (
|
|||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
const (
|
||||
WindowSize = 65535
|
||||
StreamSize = 1048576 //1MB
|
||||
)
|
||||
|
||||
// Transport is a structure with methods that conform to the Go PT v2.1 API
|
||||
// https://github.com/Pluggable-Transports/Pluggable-Transports-spec/blob/master/releases/PTSpecV2.1/Pluggable%20Transport%20Specification%20v2.1%20-%20Go%20Transport%20API.pdf
|
||||
type Transport struct {
|
||||
|
@ -168,6 +173,7 @@ func (l *SnowflakeListener) acceptStreams(conn *kcp.UDPSession) error {
|
|||
smuxConfig := smux.DefaultConfig()
|
||||
smuxConfig.Version = 2
|
||||
smuxConfig.KeepAliveTimeout = 10 * time.Minute
|
||||
smuxConfig.MaxStreamBuffer = StreamSize
|
||||
sess, err := smux.Server(conn, smuxConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -201,7 +207,7 @@ func (l *SnowflakeListener) acceptSessions(ln *kcp.Listener) error {
|
|||
conn.SetStreamMode(true)
|
||||
// Set the maximum send and receive window sizes to a high number
|
||||
// Removes KCP bottlenecks: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40026
|
||||
conn.SetWindowSize(65535, 65535)
|
||||
conn.SetWindowSize(WindowSize, WindowSize)
|
||||
// Disable the dynamic congestion window (limit only by the
|
||||
// maximum of local and remote static windows).
|
||||
conn.SetNoDelay(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue