mirror of
https://github.com/containers/podman.git
synced 2025-05-21 00:56:36 +08:00
Vendor in containers/(storage,image, common, buildah)
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
97
vendor/github.com/containers/common/pkg/cgroups/systemd_linux.go
generated
vendored
97
vendor/github.com/containers/common/pkg/cgroups/systemd_linux.go
generated
vendored
@ -14,6 +14,11 @@ import (
|
||||
"github.com/opencontainers/runc/libcontainer/configs"
|
||||
)
|
||||
|
||||
type BlkioDev struct {
|
||||
Device string
|
||||
Bytes uint64
|
||||
}
|
||||
|
||||
func systemdCreate(resources *configs.Resources, path string, c *systemdDbus.Conn) error {
|
||||
slice, name := filepath.Split(path)
|
||||
slice = strings.TrimSuffix(slice, "/")
|
||||
@ -24,11 +29,18 @@ func systemdCreate(resources *configs.Resources, path string, c *systemdDbus.Con
|
||||
systemdDbus.PropDescription(fmt.Sprintf("cgroup %s", name)),
|
||||
systemdDbus.PropWants(slice),
|
||||
}
|
||||
ioString := ""
|
||||
v2, _ := IsCgroup2UnifiedMode()
|
||||
if v2 {
|
||||
ioString = "IOAccounting"
|
||||
} else {
|
||||
ioString = "BlockIOAccounting"
|
||||
}
|
||||
pMap := map[string]bool{
|
||||
"DefaultDependencies": false,
|
||||
"MemoryAccounting": true,
|
||||
"CPUAccounting": true,
|
||||
"BlockIOAccounting": true,
|
||||
ioString: true,
|
||||
}
|
||||
if i == 0 {
|
||||
pMap["Delegate"] = true
|
||||
@ -42,7 +54,7 @@ func systemdCreate(resources *configs.Resources, path string, c *systemdDbus.Con
|
||||
properties = append(properties, p)
|
||||
}
|
||||
|
||||
uMap, sMap, bMap, iMap := resourcesToProps(resources)
|
||||
uMap, sMap, bMap, iMap, structMap := resourcesToProps(resources, v2)
|
||||
for k, v := range uMap {
|
||||
p := systemdDbus.Property{
|
||||
Name: k,
|
||||
@ -75,6 +87,14 @@ func systemdCreate(resources *configs.Resources, path string, c *systemdDbus.Con
|
||||
properties = append(properties, p)
|
||||
}
|
||||
|
||||
for k, v := range structMap {
|
||||
p := systemdDbus.Property{
|
||||
Name: k,
|
||||
Value: dbus.MakeVariant(v),
|
||||
}
|
||||
properties = append(properties, p)
|
||||
}
|
||||
|
||||
ch := make(chan string)
|
||||
_, err := c.StartTransientUnitContext(context.TODO(), name, "replace", properties, ch)
|
||||
if err != nil {
|
||||
@ -117,12 +137,13 @@ func systemdDestroyConn(path string, c *systemdDbus.Conn) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourcesToProps(res *configs.Resources) (map[string]uint64, map[string]string, map[string][]byte, map[string]int64) {
|
||||
func resourcesToProps(res *configs.Resources, v2 bool) (map[string]uint64, map[string]string, map[string][]byte, map[string]int64, map[string][]BlkioDev) {
|
||||
bMap := make(map[string][]byte)
|
||||
// this array is not used but will be once more resource limits are added
|
||||
sMap := make(map[string]string)
|
||||
iMap := make(map[string]int64)
|
||||
uMap := make(map[string]uint64)
|
||||
structMap := make(map[string][]BlkioDev)
|
||||
|
||||
// CPU
|
||||
if res.CpuPeriod != 0 {
|
||||
@ -140,6 +161,17 @@ func resourcesToProps(res *configs.Resources) (map[string]uint64, map[string]str
|
||||
uMap["CPUQuotaPerSecUSec"] = cpuQuotaPerSecUSec
|
||||
}
|
||||
|
||||
if res.CpuShares != 0 {
|
||||
// convert from shares to weight. weight only supports 1-10000
|
||||
v2, _ := IsCgroup2UnifiedMode()
|
||||
if v2 {
|
||||
wt := (1 + ((res.CpuShares-2)*9999)/262142)
|
||||
uMap["CPUWeight"] = wt
|
||||
} else {
|
||||
uMap["CPUShares"] = res.CpuShares
|
||||
}
|
||||
}
|
||||
|
||||
// CPUSet
|
||||
if res.CpusetCpus != "" {
|
||||
bits := []byte(res.CpusetCpus)
|
||||
@ -155,7 +187,16 @@ func resourcesToProps(res *configs.Resources) (map[string]uint64, map[string]str
|
||||
uMap["MemoryMax"] = uint64(res.Memory)
|
||||
}
|
||||
if res.MemorySwap != 0 {
|
||||
uMap["MemorySwapMax"] = uint64(res.MemorySwap)
|
||||
switch {
|
||||
case res.Memory == -1 || res.MemorySwap == -1:
|
||||
swap := -1
|
||||
uMap["MemorySwapMax"] = uint64(swap)
|
||||
case v2:
|
||||
// swap max = swap (limit + swap limit) - limit
|
||||
uMap["MemorySwapMax"] = uint64(res.MemorySwap - res.Memory)
|
||||
default:
|
||||
uMap["MemorySwapMax"] = uint64(res.MemorySwap)
|
||||
}
|
||||
}
|
||||
|
||||
// Blkio
|
||||
@ -163,5 +204,51 @@ func resourcesToProps(res *configs.Resources) (map[string]uint64, map[string]str
|
||||
uMap["BlockIOWeight"] = uint64(res.BlkioWeight)
|
||||
}
|
||||
|
||||
return uMap, sMap, bMap, iMap
|
||||
// systemd requires the paths to be in the form /dev/{block, char}/major:minor
|
||||
// this is difficult since runc's resources only store the major and minor, not the type of device
|
||||
// therefore, assume all are block (I think this is a correct assumption)
|
||||
if res.BlkioThrottleReadBpsDevice != nil {
|
||||
for _, entry := range res.BlkioThrottleReadBpsDevice {
|
||||
newThrottle := BlkioDev{
|
||||
Device: fmt.Sprintf("/dev/block/%d:%d", entry.Major, entry.Minor),
|
||||
Bytes: entry.Rate,
|
||||
}
|
||||
if v2 {
|
||||
structMap["IOReadBandwidthMax"] = append(structMap["IOReadBandwidthMax"], newThrottle)
|
||||
} else {
|
||||
structMap["BlockIOReadBandwidth"] = append(structMap["BlockIOReadBandwidth"], newThrottle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if res.BlkioThrottleWriteBpsDevice != nil {
|
||||
for _, entry := range res.BlkioThrottleWriteBpsDevice {
|
||||
newThrottle := BlkioDev{
|
||||
Device: fmt.Sprintf("/dev/block/%d:%d", entry.Major, entry.Minor),
|
||||
Bytes: entry.Rate,
|
||||
}
|
||||
if v2 {
|
||||
structMap["IOWriteBandwidthMax"] = append(structMap["IOWriteBandwidthMax"], newThrottle)
|
||||
} else {
|
||||
structMap["BlockIOWriteBandwidth"] = append(structMap["BlockIOWriteBandwidth"], newThrottle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if res.BlkioWeightDevice != nil {
|
||||
for _, entry := range res.BlkioWeightDevice {
|
||||
newWeight := BlkioDev{
|
||||
Device: fmt.Sprintf("/dev/block/%d:%d", entry.Major, entry.Minor),
|
||||
Bytes: uint64(entry.Weight),
|
||||
}
|
||||
if v2 {
|
||||
structMap["IODeviceWeight"] = append(structMap["IODeviceWeight"], newWeight)
|
||||
} else {
|
||||
structMap["BlockIODeviceWeight"] = append(structMap["BlockIODeviceWeight"], newWeight)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return uMap, sMap, bMap, iMap, structMap
|
||||
}
|
||||
|
Reference in New Issue
Block a user