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:47:24 UTC
git commit: updated refs/heads/4.2 to 50b5ba6
Updated Branches:
refs/heads/4.2 779bfd460 -> 50b5ba645
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/50b5ba64
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/50b5ba64
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/50b5ba64
Branch: refs/heads/4.2
Commit: 50b5ba6452b1f1292a66ac84bdc801b153fb7902
Parents: 779bfd4
Author: Jayapal <ja...@apache.org>
Authored: Wed Jul 17 16:59:32 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Wed Jul 17 18:07:46 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/50b5ba64/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/50b5ba64/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/50b5ba64/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/50b5ba64/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/50b5ba64/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 abe99be..b9b81d1 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/50b5ba64/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 f475926..25b67ad 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()) {