From fb8c23c5413ee7c820f7c947fb1bb007d5d4cf95 Mon Sep 17 00:00:00 2001 From: davidjchou Date: Sun, 5 Mar 2017 17:39:24 -0900 Subject: Adding "Real Time KVM" support Adding the support to run the "Real Time KVM" kernel in the compute node(s) to reduce the network latency caused by the virtualization of the network functions. Since the current "Real Time KVM" kernel doesn't support physical to logical network interface mapping yet, we need to use the real physical interface name rather than the logical interface name for all compute interfaces in network_settings.yaml. Also updates tests for the network settings changes and fixes a bug where interface was being queried on the controller nics before it interfaces were validated. JIRA: APEX-128 Change-Id: Iccb6c9fbdcf7e3b482f4283039ef17c38e0a6df7 Signed-off-by: davidjchou Signed-off-by: Tim Rozet Signed-off-by: Dan Radez --- build/enable_rt_kvm.yaml | 4 +++ build/kvm4nfv-1st-boot.yaml | 60 ++++++++++++++++++++++++++++++++++ build/overcloud-full.sh | 5 +++ build/rpm_specs/opnfv-apex-common.spec | 5 +++ build/undercloud.sh | 5 +++ build/variables.sh | 3 ++ 6 files changed, 82 insertions(+) create mode 100644 build/enable_rt_kvm.yaml create mode 100644 build/kvm4nfv-1st-boot.yaml (limited to 'build') diff --git a/build/enable_rt_kvm.yaml b/build/enable_rt_kvm.yaml new file mode 100644 index 00000000..0059021c --- /dev/null +++ b/build/enable_rt_kvm.yaml @@ -0,0 +1,4 @@ +parameter_defaults: + ComputeKernelArgs: 'kvmfornfv_kernel.rpm' +resource_registry: + OS::TripleO::NodeUserData: kvm4nfv-1st-boot.yaml diff --git a/build/kvm4nfv-1st-boot.yaml b/build/kvm4nfv-1st-boot.yaml new file mode 100644 index 00000000..0dad3e3b --- /dev/null +++ b/build/kvm4nfv-1st-boot.yaml @@ -0,0 +1,60 @@ +heat_template_version: 2014-10-16 + +description: > + This is the firstboot configuration for kvmfornfv kernel of the compute nodes + via cloud-init. To enable this, replace the default + mapping of OS::TripleO::NodeUserData in ../overcloud_resource_registry* + +parameters: + ComputeKernelArgs: + description: > + Name of the kvmfornfv kernel rpm. + Example: "kvmfornfv_kernel.rpm" + type: string + default: "" + ComputeHostnameFormat: + type: string + default: "" + +resources: + userdata: + type: OS::Heat::MultipartMime + properties: + parts: + - config: {get_resource: compute_kernel_args} + + # Verify the logs on /var/log/cloud-init.log on the overcloud node + compute_kernel_args: + type: OS::Heat::SoftwareConfig + properties: + config: + str_replace: + template: | + #!/bin/bash + set -x + FORMAT=$COMPUTE_HOSTNAME_FORMAT + if [[ -z $FORMAT ]] ; then + FORMAT="compute" ; + else + # Assumption: only %index% and %stackname% are the variables in Host name format + FORMAT=$(echo $FORMAT | sed 's/\%index\%//g' | sed 's/\%stackname\%//g') ; + fi + if [[ $(hostname) == *$FORMAT* ]] ; then + yum install -y /root/$KVMFORNFV_KERNEL_RPM + grub2-mkconfig -o /etc/grub2.cfg + sleep 5 + reboot + fi + params: + $KVMFORNFV_KERNEL_RPM: {get_param: ComputeKernelArgs} + $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat} + +outputs: + # This means get_resource from the parent template will get the userdata, see: + # http://docs.openstack.org/developer/heat/template_guide/composition.html#making-your-template-resource-more-transparent + # Note this is new-for-kilo, an alternative is returning a value then using + # get_attr in the parent template instead. + OS::stack_id: + value: {get_resource: userdata} + + diff --git a/build/overcloud-full.sh b/build/overcloud-full.sh index c4c31c8a..b94c0cb0 100755 --- a/build/overcloud-full.sh +++ b/build/overcloud-full.sh @@ -77,6 +77,9 @@ enabled=1 gpgcheck=0 EOF +# Get Real Time Kernel from kvm4nfv +populate_cache $kvmfornfv_uri_base/$kvmfornfv_kernel_rpm + # Increase disk size by 500MB to accommodate more packages qemu-img resize overcloud-full_build.qcow2 +500MB @@ -90,6 +93,7 @@ qemu-img resize overcloud-full_build.qcow2 +500MB # git clone vsperf into the overcloud image # upload the tacker puppet module and untar it # install tacker +# upload the rt_kvm kernel LIBGUESTFS_BACKEND=direct virt-customize \ --run-command "xfs_growfs /dev/sda" \ --upload ${BUILD_DIR}/opnfv-puppet-tripleo.tar.gz:/etc/puppet/modules \ @@ -136,6 +140,7 @@ LIBGUESTFS_BACKEND=direct virt-customize \ --run-command "cd /usr/lib/python2.7/site-packages/ && patch -p1 < neutron-patch-NSDriver.patch" \ --upload ${BUILD_ROOT}/patches/puppet-neutron-add-odl-settings.patch:/usr/share/openstack-puppet/modules/neutron/ \ --run-command "cd /usr/share/openstack-puppet/modules/neutron && patch -p1 < puppet-neutron-add-odl-settings.patch" \ + --upload ${CACHE_DIR}/$kvmfornfv_kernel_rpm:/root/ \ -a overcloud-full_build.qcow2 mv -f overcloud-full_build.qcow2 overcloud-full.qcow2 diff --git a/build/rpm_specs/opnfv-apex-common.spec b/build/rpm_specs/opnfv-apex-common.spec index 40b25290..a004542b 100644 --- a/build/rpm_specs/opnfv-apex-common.spec +++ b/build/rpm_specs/opnfv-apex-common.spec @@ -43,6 +43,8 @@ install config/deploy/os-nosdn-ovs-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-ap install config/deploy/os-nosdn-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml install config/deploy/os-nosdn-performance-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-performance-ha.yaml install config/deploy/os-nosdn-ovs-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-ovs-ha.yaml +install config/deploy/os-nosdn-kvm-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-ha.yaml +install config/deploy/os-nosdn-kvm-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-noha.yaml install config/deploy/os-odl_l2-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml install config/deploy/os-odl_l2-sfc-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml install config/deploy/os-odl-bgpvpn-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl-bgpvpn-ha.yaml @@ -120,6 +122,8 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/ %{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml %{_sysconfdir}/opnfv-apex/os-nosdn-performance-ha.yaml %{_sysconfdir}/opnfv-apex/os-nosdn-ovs-ha.yaml +%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-ha.yaml +%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-noha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml %{_sysconfdir}/opnfv-apex/os-odl-bgpvpn-ha.yaml @@ -147,6 +151,7 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/ %changelog * Wed Mar 08 2017 Dan Radez - 4.0-5 - Commenting out ONOS, unsupported in Danube +- Adding kvm4nfv files * Tue Feb 14 2017 Feng Pan - 4.0-4 - Add network_settings_vpp.yaml * Fri Feb 3 2017 Nikolas Hermanns - 4.0-3 diff --git a/build/undercloud.sh b/build/undercloud.sh index 1101da87..4e1b963a 100755 --- a/build/undercloud.sh +++ b/build/undercloud.sh @@ -24,6 +24,9 @@ pushd opnfv-tht > /dev/null git archive --format=tar.gz --prefix=openstack-tripleo-heat-templates/ HEAD > ${BUILD_DIR}/opnfv-tht.tar.gz popd > /dev/null +# inject rt_kvm kernel rpm name into the enable file +sed -i "s/kvmfornfv_kernel.rpm/$kvmfornfv_kernel_rpm/" ${BUILD_ROOT}/enable_rt_kvm.yaml + # installing forked opnfv-tht # enabling ceph OSDs to live on the controller # OpenWSMan package update supports the AMT Ironic driver for the TealBox @@ -48,6 +51,8 @@ LIBGUESTFS_BACKEND=direct virt-customize \ --run-command "cp /usr/share/instack-undercloud/undercloud.conf.sample /home/stack/undercloud.conf && chown stack:stack /home/stack/undercloud.conf" \ --upload ${BUILD_ROOT}/opnfv-environment.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/first-boot.yaml:/home/stack/ \ + --upload ${BUILD_ROOT}/kvm4nfv-1st-boot.yaml:/home/stack/ \ + --upload ${BUILD_ROOT}/enable_rt_kvm.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/csit-environment.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/virtual-environment.yaml:/home/stack/ \ --install "python2-congressclient" \ diff --git a/build/variables.sh b/build/variables.sh index 93ae83df..4ba591c4 100644 --- a/build/variables.sh +++ b/build/variables.sh @@ -33,6 +33,9 @@ dpdk_rpms=( 'ovs4opnfv-e8acab14-openvswitch-2.5.90-0.12032.gitc61e93d6.1.el7.centos.x86_64.rpm' ) +kvmfornfv_uri_base="http://artifacts.opnfv.org/kvmfornfv" +kvmfornfv_kernel_rpm="kernel-4.4.6_rt14_1703030237nfv-1.x86_64.rpm" + tacker_repo="http://github.com/openstack/tacker" tacker_branch="stable/newton" tacker_commit=$(git ls-remote ${tacker_repo} ${tacker_branch} | awk '{print substr($1,1,7)}') -- cgit 1.2.3-korg