diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index 30dc42c47..b18276a85 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -442,6 +442,11 @@ func (clh *cloudHypervisor) CreateVM(ctx context.Context, id string, network Net disk := chclient.NewDiskConfig(imagePath) disk.SetReadonly(true) + diskRateLimiterConfig := clh.getDiskRateLimiterConfig() + if diskRateLimiterConfig != nil { + disk.SetRateLimiterConfig(*diskRateLimiterConfig) + } + if clh.vmconfig.Disks != nil { *clh.vmconfig.Disks = append(*clh.vmconfig.Disks, *disk) } else { @@ -667,6 +672,11 @@ func (clh *cloudHypervisor) hotplugAddBlockDevice(drive *config.BlockDrive) erro clhDisk.VhostUser = func(b bool) *bool { return &b }(false) clhDisk.Id = &driveID + diskRateLimiterConfig := clh.getDiskRateLimiterConfig() + if diskRateLimiterConfig != nil { + clhDisk.SetRateLimiterConfig(*diskRateLimiterConfig) + } + pciInfo, _, err := cl.VmAddDiskPut(ctx, clhDisk) if err != nil { @@ -1342,6 +1352,14 @@ func (clh *cloudHypervisor) getNetRateLimiterConfig() *chclient.RateLimiterConfi clh.config.NetRateLimiterOpsOneTimeBurst) } +func (clh *cloudHypervisor) getDiskRateLimiterConfig() *chclient.RateLimiterConfig { + return clh.getRateLimiterConfig( + int64(utils.RevertBytes(uint64(clh.config.DiskRateLimiterBwMaxRate/8))), + int64(utils.RevertBytes(uint64(clh.config.DiskRateLimiterBwOneTimeBurst/8))), + clh.config.DiskRateLimiterOpsMaxRate, + clh.config.DiskRateLimiterOpsOneTimeBurst) +} + func (clh *cloudHypervisor) addNet(e Endpoint) error { clh.Logger().WithField("endpoint-type", e).Debugf("Adding Endpoint of type %v", e)