25
checkImplicitDefaults()
26
}
27
28
- // Return to use unmodified static limits based on values from go-libp2p 0.18
29
- // return defaultLimits
30
-
28
// Adjust limits
29
// (based on https://github.com/filecoin-project/lotus/pull/8318/files)
30
// - give it more memory, up to 4G, min of 1G
31
// - if Swarm.ConnMgr.HighWater is too high, adjust Conn/FD/Stream limits
32
defaultLimits := rcmgr.DefaultLimits.WithSystemMemory(.125, 1<<30, 4<<30)
33
34
+ // Outbound conns and FDs are set very high to allow for the accelerated DHT client to (re)load its routing table.
35
+ // Currently it doesn't gracefully handle RM throttling--once it does we can lower these.
36
+ // High outbound conn limits are considered less of a DoS risk than high inbound conn limits.
37
+ // Also note that, due to the behavior of the accelerated DHT client, we don't need many streams, just conns.
38
+ if minOutbound := 65536; defaultLimits.SystemBaseLimit.ConnsOutbound < minOutbound {
39
+ defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
40
+ }
41
+ if minFD := 4096; defaultLimits.SystemBaseLimit.FD < minFD {
42
+ defaultLimits.SystemBaseLimit.FD = minFD
43
+ }
44
+
45
// Do we need to adjust due to Swarm.ConnMgr.HighWater?
46
if cfg.ConnMgr.Type == "basic" {
47
maxconns := cfg.ConnMgr.HighWater
48
if 2*maxconns > defaultLimits.SystemBaseLimit.ConnsInbound {
41
- // adjust conns to 2x to allow for two conns per peer (TCP+QUIC)
49
+ // Conns should be at least 2x larger than the high water to allow for two conns per peer (TCP+QUIC).
50
defaultLimits.SystemBaseLimit.ConnsInbound = logScale(2 * maxconns)
43
- defaultLimits.SystemBaseLimit.ConnsOutbound = logScale(2 * maxconns)
44
- defaultLimits.SystemBaseLimit.Conns = logScale(4 * maxconns)
51
46
- defaultLimits.SystemBaseLimit.StreamsInbound = logScale(16 * maxconns)
47
- defaultLimits.SystemBaseLimit.StreamsOutbound = logScale(64 * maxconns)
48
- defaultLimits.SystemBaseLimit.Streams = logScale(64 * maxconns)
52
+ // We want the floor of minOutbound conns to be no less than what was set above.
53
+ if minOutbound := logScale(2 * maxconns); minOutbound > defaultLimits.SystemBaseLimit.ConnsOutbound {
54
+ defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
55
+ }
56
57
if 2*maxconns > defaultLimits.SystemBaseLimit.FD {
58
defaultLimits.SystemBaseLimit.FD = logScale(2 * maxconns)
59
}
60
61
+ defaultLimits.SystemBaseLimit.StreamsInbound = logScale(16 * maxconns)
62
+ defaultLimits.SystemBaseLimit.StreamsOutbound = logScale(64 * maxconns)
63
+ defaultLimits.SystemBaseLimit.Streams = logScale(64 * maxconns)
64
+
65
defaultLimits.ServiceBaseLimit.StreamsInbound = logScale(8 * maxconns)
66
defaultLimits.ServiceBaseLimit.StreamsOutbound = logScale(32 * maxconns)
67
defaultLimits.ServiceBaseLimit.Streams = logScale(32 * maxconns)
72
}
73
}
74
75
+ defaultLimits.SystemBaseLimit.Conns = defaultLimits.SystemBaseLimit.ConnsOutbound + defaultLimits.SystemBaseLimit.ConnsInbound
76
+
77
return defaultLimits
78
}
79