diff --git a/doc/source/manual_tests/index.rst b/doc/source/manual_tests/index.rst index 7ff7e70..0e66c82 100644 --- a/doc/source/manual_tests/index.rst +++ b/doc/source/manual_tests/index.rst @@ -27,3 +27,4 @@ For more information about StarlingX, see https://docs.starlingx.io/. distributed_cloud/index system_inventory/index AIO_simplex/index + performance/index diff --git a/doc/source/manual_tests/performance/detection_fail_VM.rst b/doc/source/manual_tests/performance/detection_fail_VM.rst new file mode 100644 index 0000000..fc55d3f --- /dev/null +++ b/doc/source/manual_tests/performance/detection_fail_VM.rst @@ -0,0 +1,72 @@ +=================================== +Detection of failed virtual machine +=================================== + + +.. contents:: + :local: + :depth: 1 + +----------------------- +detection_fail_VM_01 +----------------------- + +:Test ID: detection_fail_VM_01 +:Test Title: Detection of failed virtual machine +:Tags: performance + +~~~~~~~~~~~~~~~~~~ +Testcase Objective +~~~~~~~~~~~~~~~~~~ + +The objective of this test is to verify how much time is cosumed StarlingX to +detect when a Virtual Machine has failed. + + +~~~~~~~~~~~~~~~~~~~ +Test Pre-Conditions +~~~~~~~~~~~~~~~~~~~ + +The StarlingX configuration deployed for this is the Standard Controller +(2 controllers + 2 computes) in order to review the behavior in a multinode +environment. + + +~~~~~~~~~~ +Test Steps +~~~~~~~~~~ + +1. Launch a VM with the features described below, this section includes an +script which could help to do that (Another alternative is to use the +OpenStack dashboard). + +:: + + | Feature | Description | + |------------|------------------------| + | RAM | 2GB | + | Disk | 20GB | + | VCPUS | 1 | + | Properties | hw:mem_page_size=large | + | Image | [Debian] | + +* Detect the compute where that VM was deployed and kill the QEMU process, + immediately after this, the initial time must be taken. +* Make a constant of pull request of the VM status and stop the test when it + changes. +* Finally take the end time and calculate the delta. + + +~~~~~~~~~~~~~~~~~ +Expected Behavior +~~~~~~~~~~~~~~~~~ + +Result being around 500ms + +~~~~~~~~~~ +References +~~~~~~~~~~ + +N/A + + diff --git a/doc/source/manual_tests/performance/index.rst b/doc/source/manual_tests/performance/index.rst new file mode 100644 index 0000000..784e62b --- /dev/null +++ b/doc/source/manual_tests/performance/index.rst @@ -0,0 +1,24 @@ +================= +PERFORMANCE TESTS +================= + +The proposed test cases create a set of scripts and documentation under the +starlingx testing repository (https://opendev.org/starlingx/test) that anyone +can use to measure the metric they need under their hardware and software +environment. + +----------------- +Test Requirements +----------------- + +NA + +---------- +Subdomains +---------- + +.. toctree:: + :maxdepth: 2 + + detection_fail_VM + diff --git a/doc/source/manual_tests/performance/scripts/create_instance.sh b/doc/source/manual_tests/performance/scripts/create_instance.sh new file mode 100755 index 0000000..94f4c24 --- /dev/null +++ b/doc/source/manual_tests/performance/scripts/create_instance.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +# This script has to be executed in the controller. + +CLOUD_IMAGE="debian-9.9.5-20190721-openstack-amd64.qcow2" +TEST_IMAGE="debian" +TEST_KEY_NAME="stx-key-test" +DEBIAN_CLOUD_URL="http://cdimage.debian.org/cdimage/openstack/9.9.5-20190721" +TEST_FLAVOR="f2.small" +TEST_NETWORK="network-1" +INSTANCE_NAME="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 10 ; echo '')" +TIMEOUT=300 + +if [ -z "$OS_CLOUD" ]; then + export OS_CLOUD=openstack_helm +fi + +# Verify if the controller already has a SSH key. +if [ ! -f "$HOME/.ssh/id_rsa" ]; then + ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa +fi + +if [ -z "$(openstack keypair list | grep -wo $TEST_KEY_NAME)" ]; then + openstack keypair create \ + --public-key $HOME/.ssh/id_rsa.pub \ + $TEST_KEY_NAME +else + echo "key: $TEST_KEY_NAME OK" +fi + +# Verify OpenStack image. +# This section looks for a debian image, this is +# because the cirrOS image did not work. +if [ -z "$(openstack image list -c Name | grep -w $TEST_IMAGE)" ]; then + echo "image: $TEST_IMAGE no found" + echo "$TEST_IMAGE will be installed" + if [ ! -f "$CLOUD_IMAGE" ]; then + curl -OL "${DEBIAN_CLOUD_URL}/${CLOUD_IMAGE}" + fi + + openstack image create \ + --file $CLOUD_IMAGE \ + --disk-format qcow2 \ + --property hw:mem_page_size=large \ + --public $TEST_IMAGE +else + echo "image: $TEST_IMAGE OK" +fi + +# Verify customized flavor +if [ -z "$(openstack flavor list -c Name | grep -w $TEST_FLAVOR)" ]; then + openstack flavor create \ + --ram 2048 \ + --disk 20 \ + --vcpus 1 \ + --public \ + --id auto \ + --property hw:mem_page_size=large $TEST_FLAVOR +else + echo "flavor: $TEST_FLAVOR OK" +fi + +# Verify network +if [ -z "$(openstack network list -c Name | grep -w $TEST_NETWORK)" ]; then + echo "Create $TEST_NETWORK" + openstack network create $TEST_NETWORK + # Configure subnets + openstack subnet create \ + --network $TEST_NETWORK \ + --subnet-range 192.168.0.0/24 \ + --ip-version 4 \ + --dhcp subnet-1 +else + echo "network: $TEST_NETWORK OK" +fi + +# Create instance using the image, flavor and network verified before +TEST_NETWORK_ID="$(openstack network list --name=$TEST_NETWORK -c ID -f value)" +echo "Launch instance ..." +openstack server create \ + --image $TEST_IMAGE \ + --flavor $TEST_FLAVOR \ + --nic net-id=$TEST_NETWORK_ID \ + --config-drive true \ + --key-name $TEST_KEY_NAME \ + $INSTANCE_NAME + +if [ $? -ne 0 ]; then + echo "error: $INSTANCE_NAME no created" + exit 1; +fi + +for (( count=0; i<${TIMEOUT}; count++ )); do + INSTANCE_STATUS="$(openstack server list \ + --name=$INSTANCE_NAME -c Status -f value)" + if [ "$INSTANCE_STATUS" == "ACTIVE" ]; then + echo "new instance status: $INSTANCE_STATUS" + break; + fi + echo "wait for active instance, current status: $INSTANCE_STATUS" +done + +if [ "$(( $TIMEOUT - 1 ))" -eq "$count" ]; then + echo "error: someting was wrong timeout expired!" + exit 1 +fi + +COMPUTE="$(openstack server show \ + -c OS-EXT-SRV-ATTR:host -f value $INSTANCE_NAME)" + +echo "The instance $INSTANCE_NAME was created successfully in $COMPUTE" + +exit 0 + diff --git a/doc/source/manual_tests/performance/scripts/get_results.sh b/doc/source/manual_tests/performance/scripts/get_results.sh new file mode 100755 index 0000000..c064748 --- /dev/null +++ b/doc/source/manual_tests/performance/scripts/get_results.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +INSTANCE_NAME="$1" + +if [ -z "$INSTANCE_NAME" ]; then + echo "error: instance no specified." + exit 1; +fi + +if [ -z "$(openstack server list --name $INSTANCE_NAME -c ID -f value)" ]; then + echo "error: $INSTANCE_NAME no found" + exit 1 +else + echo "$INSTANCE_NAME: OK" +fi + +COMPUTE="$(openstack server show \ + -c OS-EXT-SRV-ATTR:host -f value $INSTANCE_NAME)" + +echo "kill QEMU process..." +INIT_TIME=$(echo $(($(date +%s%N)/1000000))) +ssh $COMPUTE sudo pkill qemu +while [ 1 ]; do + INSTANCE_STATUS="$(openstack server list \ + --name=$INSTANCE_NAME -c Status -f value)" + if [ "$INSTANCE_STATUS" != "ACTIVE" ]; then + END_TIME=$(echo $(($(date +%s%N)/1000000))) + break; + fi +done + +echo "instance status: $INSTANCE_STATUS" +echo "init time (ms): $INIT_TIME" +echo "end time (ms): $END_TIME" +echo "delta: INIT_TIME=$(echo $(($END_TIME - $INIT_TIME)))"