Ver código fonte

Merge pull request #1789 from fcrisciani/sysctl_gc_thresh

Set kernel specific config on linux
Santhosh Manohar 8 anos atrás
pai
commit
22814d5850

+ 30 - 0
libnetwork/drivers/overlay/ostweaks_linux.go

@@ -0,0 +1,30 @@
+package overlay
+
+import (
+	"io/ioutil"
+	"path"
+	"strings"
+
+	"github.com/Sirupsen/logrus"
+)
+
+var sysctlConf = map[string]string{
+	"net.ipv4.neigh.default.gc_thresh1": "8192",
+	"net.ipv4.neigh.default.gc_thresh2": "49152",
+	"net.ipv4.neigh.default.gc_thresh3": "65536",
+}
+
+// writeSystemProperty writes the value to a path under /proc/sys as determined from the key.
+// For e.g. net.ipv4.ip_forward translated to /proc/sys/net/ipv4/ip_forward.
+func writeSystemProperty(key, value string) error {
+	keyPath := strings.Replace(key, ".", "/", -1)
+	return ioutil.WriteFile(path.Join("/proc/sys", keyPath), []byte(value), 0644)
+}
+
+func applyOStweaks() {
+	for k, v := range sysctlConf {
+		if err := writeSystemProperty(k, v); err != nil {
+			logrus.Errorf("error setting the kernel parameter %s = %s, err: %s", k, v, err)
+		}
+	}
+}

+ 5 - 0
libnetwork/drivers/overlay/ostweaks_unsupported.go

@@ -0,0 +1,5 @@
+// +build !linux
+
+package overlay
+
+func applyOStweaks() {}

+ 4 - 1
libnetwork/drivers/overlay/overlay.go

@@ -46,7 +46,7 @@ type driver struct {
 	store            datastore.DataStore
 	localStore       datastore.DataStore
 	vxlanIdm         *idm.Idm
-	once             sync.Once
+	initOS           sync.Once
 	joinOnce         sync.Once
 	localJoinOnce    sync.Once
 	keys             []*key
@@ -188,6 +188,9 @@ func (d *driver) configure() error {
 		return d.initializeVxlanIdm()
 	}
 
+	// Apply OS specific kernel configs if needed
+	d.initOS.Do(applyOStweaks)
+
 	return nil
 }