in cgroup/blkio.go [107:187]
func blkioThrottle(path string, blkio *BlockIOSubsystem) error {
devices := map[DeviceID]*ThrottleDevice{}
getDevice := func(id DeviceID) *ThrottleDevice {
td := devices[id]
if td == nil {
td = &ThrottleDevice{DeviceID: id}
devices[id] = td
}
return td
}
values, err := readBlkioValues(path, "blkio.throttle.io_service_bytes")
if err != nil {
return err
}
if values != nil {
for id, opValues := range collectOpValues(values) {
getDevice(id).Bytes = *opValues
}
}
values, err = readBlkioValues(path, "blkio.throttle.io_serviced")
if err != nil {
return err
}
if values != nil {
for id, opValues := range collectOpValues(values) {
getDevice(id).IOs = *opValues
}
}
values, err = readBlkioValues(path, "blkio.throttle.read_bps_device")
if err != nil {
return err
}
if values != nil {
for _, bv := range values {
getDevice(bv.DeviceID).ReadLimitBPS = bv.Value
}
}
values, err = readBlkioValues(path, "blkio.throttle.write_bps_device")
if err != nil {
return err
}
if values != nil {
for _, bv := range values {
getDevice(bv.DeviceID).WriteLimitBPS = bv.Value
}
}
values, err = readBlkioValues(path, "blkio.throttle.read_iops_device")
if err != nil {
return err
}
if values != nil {
for _, bv := range values {
getDevice(bv.DeviceID).ReadLimitIOPS = bv.Value
}
}
values, err = readBlkioValues(path, "blkio.throttle.write_iops_device")
if err != nil {
return err
}
if values != nil {
for _, bv := range values {
getDevice(bv.DeviceID).WriteLimitIOPS = bv.Value
}
}
blkio.Throttle.Devices = make([]ThrottleDevice, 0, len(devices))
for _, dev := range devices {
blkio.Throttle.Devices = append(blkio.Throttle.Devices, *dev)
blkio.Throttle.TotalBytes += dev.Bytes.Read + dev.Bytes.Write
blkio.Throttle.TotalIOs += dev.IOs.Read + dev.IOs.Write
}
return nil
}