default limiter

This commit is contained in:
vyzo 2022-01-05 11:04:11 +02:00
parent a86b214300
commit 2f0815d6d7

View File

@ -4,6 +4,8 @@ import (
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/libp2p/go-libp2p-core/protocol"
"github.com/pbnjay/memory"
)
type Limit interface {
@ -51,6 +53,70 @@ type BasicLimiter struct {
var _ Limiter = (*BasicLimiter)(nil)
// NewDefaultLimiter creates a limiter with default limits and a system memory cap; if the
// system memory cap is 0, then 1/8th of the available memory is used.
func NewDefaultLimiter(memoryCap int64) *BasicLimiter {
if memoryCap == 0 {
memoryCap = int64(memory.TotalMemory() / 8)
}
system := &StaticLimit{
Memory: memoryCap,
StreamsInbound: 4096,
StreamsOutbound: 16384,
ConnsInbound: 256,
ConnsOutbound: 512,
FD: 512,
}
transient := &StaticLimit{
Memory: memoryCap / 16,
StreamsInbound: 128,
StreamsOutbound: 512,
ConnsInbound: 32,
ConnsOutbound: 128,
FD: 128,
}
svc := &StaticLimit{
Memory: memoryCap / 2,
StreamsInbound: 2048,
StreamsOutbound: 8192,
}
proto := &StaticLimit{
Memory: memoryCap / 4,
StreamsInbound: 1024,
StreamsOutbound: 4096,
}
peer := &StaticLimit{
Memory: memoryCap / 16,
StreamsInbound: 512,
StreamsOutbound: 2048,
ConnsInbound: 8,
ConnsOutbound: 16,
FD: 8,
}
conn := &StaticLimit{
Memory: 16 << 20,
ConnsInbound: 1,
ConnsOutbound: 1,
FD: 1,
}
stream := &StaticLimit{
Memory: 16 << 20,
StreamsInbound: 1,
StreamsOutbound: 1,
}
return &BasicLimiter{
SystemLimits: system,
TransientLimits: transient,
DefaultServiceLimits: svc,
DefaultProtocolLimits: proto,
DefaultPeerLimits: peer,
ConnLimits: conn,
StreamLimits: stream,
}
}
func (l *StaticLimit) GetMemoryLimit() int64 {
return l.Memory
}