Update documentation structure.
[kvmfornfv.git] / docs / release / configguide / low-latency.feature.configuration.description.rst
diff --git a/docs/release/configguide/low-latency.feature.configuration.description.rst b/docs/release/configguide/low-latency.feature.configuration.description.rst
new file mode 100644 (file)
index 0000000..c53aa52
--- /dev/null
@@ -0,0 +1,151 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+=============================================
+Low Latency Feature Configuration Description
+=============================================
+
+Introduction
+------------
+In KVM4NFV project, we focus on the KVM hypervisor to enhance it for NFV, by
+looking at the following areas initially
+
+* Minimal Interrupt latency variation for data plane VNFs:
+   * Minimal Timing Variation for Timing correctness of real-time VNFs
+   * Minimal packet latency variation for data-plane VNFs
+* Inter-VM communication,
+* Fast live migration
+
+Configuration of Cyclictest
+---------------------------
+
+Cyclictest measures Latency of response to a stimulus. Achieving low latency
+with the KVM4NFV project requires setting up a special test environment.
+This environment includes the BIOS settings, kernel configuration, kernel
+parameters and the run-time environment.
+
+* For more information regarding the test environment, please visit
+  https://wiki.opnfv.org/display/kvm/KVM4NFV+Test++Environment
+  https://wiki.opnfv.org/display/kvm/Nfv-kvm-tuning
+
+Pre-configuration activities
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Intel POD10 is currently used as OPNFV-KVM4NFV test environment. The rpm
+packages from the latest build are downloaded onto Intel-Pod10 jump server
+from artifact repository. Yardstick running in a ubuntu docker container
+on Intel Pod10-jump server will configure the host(intel pod10 node1/node2
+based on job type), the guest and triggers the cyclictest on the guest using
+below sample yaml file.
+
+
+.. code:: bash
+
+    For IDLE-IDLE test,
+
+    host_setup_seqs:
+    - "host-setup0.sh"
+    - "reboot"
+    - "host-setup1.sh"
+    - "host-run-qemu.sh"
+
+    guest_setup_seqs:
+    - "guest-setup0.sh"
+    - "reboot"
+    - "guest-setup1.sh"
+
+.. figure:: images/idle-idle-test.png
+   :name: idle-idle-test
+   :width: 100%
+   :align: center
+
+.. code:: bash
+
+    For [CPU/Memory/IO]Stress-IDLE tests,
+
+    host_setup_seqs:
+    - "host-setup0.sh"
+    - "reboot"
+    - "host-setup1.sh"
+    - "stress_daily.sh" [cpustress/memory/io]
+    - "host-run-qemu.sh"
+
+    guest_setup_seqs:
+    - "guest-setup0.sh"
+    - "reboot"
+    - "guest-setup1.sh"
+
+.. figure:: images/stress-idle-test.png
+   :name: stress-idle-test
+   :width: 100%
+   :align: center
+
+The following scripts are used for configuring host and guest to create a
+special test environment and achieve low latency.
+
+Note: host-setup0.sh, host-setup1.sh and host-run-qemu.sh are run on the host,
+followed by guest-setup0.sh and guest-setup1.sh scripts on the guest VM.
+
+**host-setup0.sh**: Running this script will install the latest kernel rpm
+on host and will make necessary changes as following to create special test
+environment.
+
+   * Isolates CPUs from the general scheduler
+   * Stops timer ticks on isolated CPUs whenever possible
+   * Stops RCU callbacks on isolated CPUs
+   * Enables intel iommu driver and disables DMA translation for devices
+   * Sets HugeTLB pages to 1GB
+   * Disables machine check
+   * Disables clocksource verification at runtime
+
+**host-setup1.sh**: Running this script will make the following test
+environment changes.
+
+   * Disabling watchdogs to reduce overhead
+   * Disabling RT throttling
+   * Reroute interrupts bound to isolated CPUs to CPU 0
+   * Change the iptable so that we can ssh to the guest remotely
+
+**stress_daily.sh**: Scripts gets triggered only for stress-idle tests. Running this script
+make the following environment changes.
+
+   * Triggers stress_script.sh, which runs the stress command with necessary options
+   * CPU,Memory or IO stress can be applied based on the test type
+   * Applying stress only on the Host is handled in D-Release
+   * For Idle-Idle test the stress script is not triggered
+   * Stress is applied only on the free cores to prevent load on qemu process
+
+   **Note:**
+    - On Numa Node 1: 22,23 cores are allocated for QEMU process
+    - 24-43 are used for applying stress
+
+**host-run-qemu.sh**: Running this script will launch a guest vm on the host.
+     Note: download guest disk image from artifactory.
+
+**guest-setup0.sh**: Running this scrcipt on the guest vm will install the
+latest build kernel rpm, cyclictest and make the following configuration on
+guest vm.
+
+   * Isolates CPUs from the general scheduler
+   * Stops timer ticks on isolated CPUs whenever possible
+   * Uses polling idle loop to improve performance
+   * Disables clocksource verification at runtime
+
+**guest-setup1.sh**: Running this script on guest vm will do the following
+configurations.
+
+   * Disable watchdogs to reduce overhead
+   * Routes device interrupts to non-RT CPU
+   * Disables RT throttling
+
+Hardware configuration
+~~~~~~~~~~~~~~~~~~~~~~
+
+Currently Intel POD10 is used as test environment for kvm4nfv to execute
+cyclictest. As part of this test environment Intel pod10-jump is configured as
+jenkins slave and all the latest build artifacts are downloaded on to it.
+
+* For more information regarding hardware configuration, please visit
+  https://wiki.opnfv.org/display/pharos/Intel+Pod10
+  https://build.opnfv.org/ci/computer/intel-pod10/
+  http://artifacts.opnfv.org/octopus/brahmaputra/docs/octopus_docs/opnfv-jenkins-slave-connection.html