Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Introduction

Network throttling is the process of controlling the network access and bandwidth usage based on certain rules. CloudStack controls this behavior by setting network throttling parameter set on VM's nic(s). This parameter is defined as the default data transfer rate in Mbps (Megabits Per Second).

How to configure network throttling in CloudStack

Network throttling rate parameter can be configured in:

 

...

Network throttling on different types of CS Virtual Machines

Throttling is being set on per VM's Nic depending on VM's type.

  • UserVm can have 1 Default network and 0-n additional networks (optional). For the default VM's nic, we take network throttling rate from the corresponding Service Offering, for all additional networks - from the corresponding Network Offerings.

...

 

Here is the picture explaining how throttling set on the VR's guest nic and VM's nic, affect traffic flows a) from User VM to User VM b) from User VM to internet (traffic goes through VR in this case)

How throttling is set on Hypervisor level

On the hypervisor side, network throttling is begin set on a VM's NIC level. Implementation depends on the hypervisor. For example, on Xen its set per VM's vif; on vmWare - port group is configured on vSwitch, and the group gets assigned to the vm.

Currently CloudStack network throttling is supported on the hypervisors below - implementation details are included.

XenServer

XenServer programs QOS on VIF object,

            vifr.qosAlgorithmType = "ratelimit";
            vifr.qosAlgorithmParams = new HashMap<String, String>();
            // convert mbs to kilobyte per second
            vifr.qosAlgorithmParams.put("kbps", Integer.toString(nic.getNetworkRateMbps() * 128));

KVM

TBD - Edison Su, please put the details there

VmWare

Under VMware, network throttling is implemented through traffic shaping control at portgroup level, all VMs (NICs) connected to the same portgroup share the same traffic shaping policy. Following gives an example on how traffic shaping policy is created and used when creating the portgroup.

HostNetworkTrafficShapingPolicy shapingPolicy = null;
if(networkRateMbps != null && networkRateMbps.intValue() > 0) {
    shapingPolicy = new HostNetworkTrafficShapingPolicy();
    shapingPolicy.setEnabled(true);
    shapingPolicy.setAverageBandwidth((long)networkRateMbps.intValue()*1024L*1024L);

    // give 50% premium to peek

    shapingPolicy.setPeakBandwidth((long)(shapingPolicy.getAverageBandwidth()*1.5));

   // allow 5 seconds of burst transfer
   shapingPolicy.setBurstSize(5*shapingPolicy.getAverageBandwidth()/8);
}

 

// creating a port group with specified shaping policy

hostMo.createPortGroup(vSwitch, networkName, vid, secPolicy, shapingPolicy);TBD - Kelven Yang, please put the details there

HyperV

TBD - Rajesh Battala, please put the details there