-
Notifications
You must be signed in to change notification settings - Fork 881
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Allows to set generic knobs on the Sandbox
Refactor the ostweaks file to allows a more easy reuse Add a method on the osl.Sandbox interface to allow setting knobs on the sandbox Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
- Loading branch information
Flavio Crisciani
committed
May 18, 2018
1 parent
b58e5e9
commit f22f60a
Showing
11 changed files
with
112 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,11 @@ | |
*.o | ||
*.a | ||
*.so | ||
*~ | ||
*.swp | ||
tags | ||
bin/ | ||
.gtm/ | ||
|
||
# Folders | ||
integration-tmp/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,72 +1,23 @@ | ||
package overlay | ||
|
||
import ( | ||
"io/ioutil" | ||
"path" | ||
"strconv" | ||
"strings" | ||
|
||
"github.com/sirupsen/logrus" | ||
"github.com/docker/libnetwork/osl/kernel" | ||
) | ||
|
||
type conditionalCheck func(val1, val2 string) bool | ||
|
||
type osValue struct { | ||
value string | ||
checkFn conditionalCheck | ||
} | ||
|
||
var osConfig = map[string]osValue{ | ||
var ovConfig = map[string]kernel.OSValue{ | ||
"net.ipv4.neigh.default.gc_thresh1": {"8192", checkHigher}, | ||
"net.ipv4.neigh.default.gc_thresh2": {"49152", checkHigher}, | ||
"net.ipv4.neigh.default.gc_thresh3": {"65536", checkHigher}, | ||
} | ||
|
||
func propertyIsValid(val1, val2 string, check conditionalCheck) bool { | ||
if check == nil || check(val1, val2) { | ||
return true | ||
} | ||
return false | ||
} | ||
|
||
func checkHigher(val1, val2 string) bool { | ||
val1Int, _ := strconv.ParseInt(val1, 10, 32) | ||
val2Int, _ := strconv.ParseInt(val2, 10, 32) | ||
return val1Int < val2Int | ||
} | ||
|
||
// 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 readSystemProperty(key string) (string, error) { | ||
keyPath := strings.Replace(key, ".", "/", -1) | ||
value, err := ioutil.ReadFile(path.Join("/proc/sys", keyPath)) | ||
if err != nil { | ||
return "", err | ||
} | ||
return string(value), nil | ||
} | ||
|
||
func applyOStweaks() { | ||
for k, v := range osConfig { | ||
// read the existing property from disk | ||
oldv, err := readSystemProperty(k) | ||
if err != nil { | ||
logrus.Errorf("error reading the kernel parameter %s, error: %s", k, err) | ||
continue | ||
} | ||
|
||
if propertyIsValid(oldv, v.value, v.checkFn) { | ||
// write new prop value to disk | ||
if err := writeSystemProperty(k, v.value); err != nil { | ||
logrus.Errorf("error setting the kernel parameter %s = %s, (leaving as %s) error: %s", k, v.value, oldv, err) | ||
continue | ||
} | ||
logrus.Debugf("updated kernel parameter %s = %s (was %s)", k, v.value, oldv) | ||
} | ||
} | ||
kernel.ApplyOSTweaks(ovConfig) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package kernel | ||
|
||
type conditionalCheck func(val1, val2 string) bool | ||
|
||
// OSValue represents a tuple, value defired, check function when to apply the value | ||
type OSValue struct { | ||
Value string | ||
CheckFn conditionalCheck | ||
} | ||
|
||
func propertyIsValid(val1, val2 string, check conditionalCheck) bool { | ||
if check == nil || check(val1, val2) { | ||
return true | ||
} | ||
return false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package kernel | ||
|
||
import ( | ||
"io/ioutil" | ||
"path" | ||
"strings" | ||
|
||
"github.com/sirupsen/logrus" | ||
) | ||
|
||
// 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) | ||
} | ||
|
||
// readSystemProperty reads the value from the path under /proc/sys and returns it | ||
func readSystemProperty(key string) (string, error) { | ||
keyPath := strings.Replace(key, ".", "/", -1) | ||
value, err := ioutil.ReadFile(path.Join("/proc/sys", keyPath)) | ||
if err != nil { | ||
return "", err | ||
} | ||
return string(value), nil | ||
} | ||
|
||
// ApplyOSTweaks applies the configuration values passed as arguments | ||
func ApplyOSTweaks(osConfig map[string]OSValue) { | ||
for k, v := range osConfig { | ||
// read the existing property from disk | ||
oldv, err := readSystemProperty(k) | ||
if err != nil { | ||
logrus.WithError(err).Errorf("error reading the kernel parameter %s", k) | ||
continue | ||
} | ||
|
||
if propertyIsValid(oldv, v.Value, v.CheckFn) { | ||
// write new prop value to disk | ||
if err := writeSystemProperty(k, v.Value); err != nil { | ||
logrus.WithError(err).Errorf("error setting the kernel parameter %s = %s, (leaving as %s)", k, v.Value, oldv) | ||
continue | ||
} | ||
logrus.Debugf("updated kernel parameter %s = %s (was %s)", k, v.Value, oldv) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
// +build !linux | ||
|
||
package kernel | ||
|
||
// ApplyOSTweaks applies the configuration values passed as arguments | ||
func ApplyOSTweaks(osConfig map[string]OSValue) { | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters