You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ja...@apache.org on 2013/07/17 14:37:05 UTC

git commit: updated refs/heads/master to 2d6644d

Updated Branches:
  refs/heads/master f76bf5b05 -> 2d6644d96


CLOUDSTACK-2433 Enable rps and rfs in virtual router


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2d6644d9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2d6644d9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2d6644d9

Branch: refs/heads/master
Commit: 2d6644d961e6a35e30798490e65d60a9ea800b2b
Parents: f76bf5b
Author: Jayapal <ja...@apache.org>
Authored: Wed Jul 17 16:59:32 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Wed Jul 17 16:59:59 2013 +0530

----------------------------------------------------------------------
 .../virtualnetwork/VirtualRoutingResource.java  |  9 +++-
 .../debian/config/etc/init.d/cloud-early-config | 41 ++++++++++++++++++
 .../debian/config/opt/cloud/bin/ipassoc.sh      | 45 ++++++++++++++++++--
 .../kvm/resource/LibvirtComputingResource.java  |  4 +-
 .../vmware/resource/VmwareResource.java         |  4 ++
 .../xen/resource/CitrixResourceBase.java        |  5 +++
 6 files changed, 102 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index 32fd728..0b26220 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -531,7 +531,7 @@ public class VirtualRoutingResource implements Manager {
         for (IpAddressTO ip : ips) {
             result = assignPublicIpAddress(routerName, routerIp, ip.getPublicIp(), ip.isAdd(), 
                      ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(), ip.getVlanNetmask(),
-                     ip.getVifMacAddress(), 2);
+                     ip.getVifMacAddress(), 2, false);
             if (result != null) {
                 results[i++] = IpAssocAnswer.errorResult;
             } else {
@@ -1019,7 +1019,7 @@ public class VirtualRoutingResource implements Manager {
             final String privateIpAddress, final String publicIpAddress,
             final boolean add, final boolean firstIP, final boolean sourceNat,
             final String vlanId, final String vlanGateway,
-            final String vlanNetmask, final String vifMacAddress, int nicNum){
+            final String vlanNetmask, final String vifMacAddress, int nicNum, boolean newNic){
 
         String args = "";
         if (add) {
@@ -1043,6 +1043,11 @@ public class VirtualRoutingResource implements Manager {
 
         args +=" -g ";
         args += vlanGateway;
+
+        if (newNic) {
+            args += " -n";
+        }
+
         return routerProxy("ipassoc.sh", privateIpAddress, args);
     }
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/patches/systemvm/debian/config/etc/init.d/cloud-early-config
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
index 5835c4d..c04ff90 100755
--- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config
+++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
@@ -366,6 +366,46 @@ disable_hvc() {
   [  -d /proc/xen ] && sed -i 's/^#vc/vc/' /etc/inittab && telinit q
 }
 
+enable_rpsrfs() {
+  local enable=$1
+
+  if [ $eanble -eq 0]
+  then
+      echo 0 > /etc/rpsrfsenable
+      return 0
+  fi
+
+  if [ ! -f /sys/class/net/eth0/queues/rx-0/rps_cpus ]
+  then
+      echo "rps is not enabled in the kernel"
+      echo 0 > /etc/rpsrfsenable
+      return 0
+  fi
+
+  proc=$(cat /proc/cpuinfo | grep "processor" | wc -l)
+  if [ $proc -le 1 ]
+  then
+      echo 0 > /etc/rpsrfsenable
+      return 0;
+  fi
+
+  echo 1 > /etc/rpsrfsenable
+  num=1
+  num=$(($num<<$proc))
+  num=$(($num-1));
+  echo $num;
+  hex=$(printf "%x\n" $num)
+  echo $hex;
+  #enable rps
+  echo $hex > /sys/class/net/eth0/queues/rx-0/rps_cpus
+  echo $hex > /sys/class/net/eth2/queues/rx-0/rps_cpus
+
+  #enble rps
+  echo 256 > /proc/sys/net/core/rps_sock_flow_entries
+  echo 256 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
+  echo 256 > /sys/class/net/eth2/queues/rx-0/rps_flow_cnt
+}
+
 setup_common() {
   init_interfaces $1 $2 $3
   if [ -n "$ETH0_IP" ]
@@ -731,6 +771,7 @@ setup_router() {
   enable_svc cloud 0
   disable_rpfilter_domR
   enable_fwding 1
+  enable_rpsrfs 1
   chkconfig nfs-common off
   cp /etc/iptables/iptables-router /etc/iptables/rules.v4
 #for old templates

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh b/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
index 9efae26..ae2d7e4 100755
--- a/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
+++ b/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
@@ -230,7 +230,7 @@ add_first_ip() {
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
   fi
-  add_routing $1 
+  add_routing $1
 
   return 0
 }
@@ -277,7 +277,7 @@ add_an_ip () {
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
   fi
-  add_routing $1 
+  add_routing $1
   return $?
    
 }
@@ -303,11 +303,41 @@ remove_an_ip () {
   return 0
 }
 
+enable_rpsrfs() {
+    #enable rps and rfs for this new interface
+    if [  -f /etc/rpsrfsenable ]
+    then
+        enable=$(cat /etc/rpsrfsenable)
+        if [ $enable -eq 1 ]
+        then
+          proc=$(cat /proc/cpuinfo | grep "processor" | wc -l)
+          if [ $proc -le 1 ]
+          then
+              return $status;
+          fi
+
+          num=1
+          num=$(($num<<$proc))
+          num=$(($num-1));
+          echo $num;
+          hex=$(printf "%x\n" $num)
+          echo $hex;
+          #enable rps
+          echo $hex > /sys/class/net/$ethDev/queues/rx-0/rps_cpus
+
+          #enable rfs
+          echo 256 > /sys/class/net/$ethDev/queues/rx-0/rps_flow_cnt
+
+         fi
+     fi
+}
+
 #set -x
 sflag=0
 lflag=
 fflag=
 cflag=
+nflag=
 op=""
 
 is_master=0
@@ -328,7 +358,7 @@ then
     if_keep_state=1
 fi
 
-while getopts 'sfADa:l:c:g:' OPTION
+while getopts 'sfADna:l:c:g:' OPTION
 do
   case $OPTION in
   A)	Aflag=1
@@ -350,6 +380,8 @@ do
   g)	gflag=1
   		defaultGwIP="$OPTARG"
   		;;
+  n)   nflag=1
+        ;;
   ?)	usage
                 unlock_exit 2 $lock $locked
 		;;
@@ -370,6 +402,13 @@ then
 fi
 
 
+if [ "$Aflag" == "1" ] && [ "$nflag" == "1" ]
+then
+    #enable rps, rfs for the new interface
+    enable_rpsrfs
+
+ fi
+
 if [ "$fflag" == "1" ] && [ "$Aflag" == "1" ]
 then
   add_first_ip  $publicIp  &&

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index da86612..571bcc8 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1922,19 +1922,21 @@ ServerResource {
             int i = 0;
             String result = null;
             int nicNum = 0;
+            boolean newNic = false;
             for (IpAddressTO ip : ips) {
                 if (!vlanAllocatedToVM.containsKey(ip.getVlanId())) {
                     /* plug a vif into router */
                     VifHotPlug(conn, routerName, ip.getVlanId(),
                             ip.getVifMacAddress());
                     vlanAllocatedToVM.put(ip.getVlanId(), nicPos++);
+                    newNic = true;
                 }
                 nicNum = vlanAllocatedToVM.get(ip.getVlanId());
                 networkUsage(routerIp, "addVif", "eth" + nicNum);
                 result = _virtRouterResource.assignPublicIpAddress(routerName,
                         routerIp, ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(),
                         ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(),
-                        ip.getVlanNetmask(), ip.getVifMacAddress(), nicNum);
+                        ip.getVlanNetmask(), ip.getVifMacAddress(), nicNum, newNic);
 
                 if (result != null) {
                     results[i++] = IpAssocAnswer.errorResult;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index a45a8ce..f0e9e08 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -1769,6 +1769,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
         args += " -g ";
         args += vlanGateway;
 
+        if (addVif) {
+            args += " -n ";
+        }
+
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Run command on domain router " + privateIpAddress + ", /opt/cloud/bin/ipassoc.sh " + args);
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index d6d0523..991a890 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -2366,6 +2366,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             args += " -g ";
             args += vlanGateway;
 
+            if (addVif) {
+                //To indicate this is new interface created
+                args += " -n";
+            }
+
 
             String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args);
             if (result == null || result.isEmpty()) {