From 543f833325051b0f548e6a2fcff03cc2b77ae43e Mon Sep 17 00:00:00 2001 From: Laurent Senta Date: Fri, 3 Mar 2023 11:04:20 +0100 Subject: [PATCH] fix: add resource manager tweaks --- daemon.go | 6 ++++++ resource.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 resource.go diff --git a/daemon.go b/daemon.go index d2921ea..79baeba 100644 --- a/daemon.go +++ b/daemon.go @@ -31,6 +31,11 @@ type daemon struct { } func NewDaemon() *daemon { + rm, err := NewResourceManager() + if err != nil { + panic(err) + } + c, err := connmgr.NewConnManager(600, 900, connmgr.WithGracePeriod(time.Second*30)) if err != nil { panic(err) @@ -39,6 +44,7 @@ func NewDaemon() *daemon { h, err := libp2p.New( libp2p.ConnectionManager(c), libp2p.ConnectionGater(&privateAddrFilterConnectionGater{}), + libp2p.ResourceManager(rm), ) if err != nil { panic(err) diff --git a/resource.go b/resource.go new file mode 100644 index 0000000..3a33b7d --- /dev/null +++ b/resource.go @@ -0,0 +1,40 @@ +// https://github.com/libp2p/go-libp2p/tree/master/p2p/host/resource-manager +package main + +import ( + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/network" + rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager" +) + +func NewResourceManager() (network.ResourceManager, error) { + // Start with the default scaling limits. + scalingLimits := rcmgr.DefaultLimits + + // Add limits around included libp2p protocols + libp2p.SetDefaultServiceLimits(&scalingLimits) + + // Turn the scaling limits into a concrete set of limits using `.AutoScale`. This + // scales the limits proportional to your system memory. + scaledDefaultLimits := scalingLimits.AutoScale() + + // Tweak certain settings + cfg := rcmgr.PartialLimitConfig{ + System: rcmgr.ResourceLimits{ + ConnsOutbound: rcmgr.Unlimited, + Conns: rcmgr.Unlimited, + ConnsInbound: rcmgr.Unlimited, + }, + } + + // Create our limits by using our cfg and replacing the default values with values from `scaledDefaultLimits` + limits := cfg.Build(scaledDefaultLimits) + + // The resource manager expects a limiter, se we create one from our limits. + limiter := rcmgr.NewFixedLimiter(limits) + + // Initialize the resource manager + rm, err := rcmgr.NewResourceManager(limiter) + + return rm, err +}