Update container hugepage limit when creating the container
Unit test for updating container hugepage limit Add warning message about ignoring case. Update error handling about hugepage size requirements Signed-off-by: sewon.oh <sewon.oh@samsung.com>
This commit is contained in:
@@ -85,6 +85,24 @@ func HugePageSizeFromResourceName(name v1.ResourceName) (resource.Quantity, erro
|
||||
return resource.ParseQuantity(pageSize)
|
||||
}
|
||||
|
||||
// HugePageUnitSizeFromByteSize returns hugepage size has the format.
|
||||
// `size` must be guaranteed to divisible into the largest units that can be expressed.
|
||||
// <size><unit-prefix>B (1024 = "1KB", 1048576 = "1MB", etc).
|
||||
func HugePageUnitSizeFromByteSize(size int64) (string, error) {
|
||||
// hugePageSizeUnitList is borrowed from opencontainers/runc/libcontainer/cgroups/utils.go
|
||||
var hugePageSizeUnitList = []string{"B", "KB", "MB", "GB", "TB", "PB"}
|
||||
idx := 0
|
||||
len := len(hugePageSizeUnitList) - 1
|
||||
for size%1024 == 0 && idx < len {
|
||||
size /= 1024
|
||||
idx++
|
||||
}
|
||||
if size > 1024 && idx < len {
|
||||
return "", fmt.Errorf("size: %d%s must be guaranteed to divisible into the largest units", size, hugePageSizeUnitList[idx])
|
||||
}
|
||||
return fmt.Sprintf("%d%s", size, hugePageSizeUnitList[idx]), nil
|
||||
}
|
||||
|
||||
// IsOvercommitAllowed returns true if the resource is in the default
|
||||
// namespace and is not hugepages.
|
||||
func IsOvercommitAllowed(name v1.ResourceName) bool {
|
||||
|
@@ -21,7 +21,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -1398,3 +1398,47 @@ func TestNodeSelectorRequirementKeyExistsInNodeSelectorTerms(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestHugePageUnitSizeFromByteSize(t *testing.T) {
|
||||
tests := []struct {
|
||||
size int64
|
||||
expected string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
size: 1024,
|
||||
expected: "1KB",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
size: 33554432,
|
||||
expected: "32MB",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
size: 3221225472,
|
||||
expected: "3GB",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
size: 1024 * 1024 * 1023 * 3,
|
||||
expected: "3069MB",
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
size := test.size
|
||||
result, err := HugePageUnitSizeFromByteSize(size)
|
||||
if err != nil {
|
||||
if test.wantErr {
|
||||
t.Logf("HugePageUnitSizeFromByteSize() expected error = %v", err)
|
||||
} else {
|
||||
t.Errorf("HugePageUnitSizeFromByteSize() error = %v, wantErr %v", err, test.wantErr)
|
||||
}
|
||||
continue
|
||||
}
|
||||
if test.expected != result {
|
||||
t.Errorf("HugePageUnitSizeFromByteSize() expected %v but got %v", test.expected, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user