From 617a77d8fbfe31873729090d4429c1f52953852c Mon Sep 17 00:00:00 2001 From: lirui34 Date: Mon, 23 Sep 2019 09:55:38 +0800 Subject: [PATCH] doc: Add document of RT performance tuning. Add document of RT performance tuning. Signed-off-by: lirui34 --- doc/develop.rst | 1 + doc/tutorials/images/vm_exits_log.png | Bin 0 -> 78904 bytes doc/tutorials/realtime_performance_tuning.rst | 198 ++++++++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 doc/tutorials/images/vm_exits_log.png create mode 100644 doc/tutorials/realtime_performance_tuning.rst diff --git a/doc/develop.rst b/doc/develop.rst index 7e7fe999b..d5599b1a4 100644 --- a/doc/develop.rst +++ b/doc/develop.rst @@ -27,6 +27,7 @@ Configuration Tutorials tutorials/using_sdc2_mode_on_nuc tutorials/using_hybrid_mode_on_nuc tutorials/building_acrn_in_docker + tutorials/realtime_performance_tuning User VM Tutorials ***************** diff --git a/doc/tutorials/images/vm_exits_log.png b/doc/tutorials/images/vm_exits_log.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfc31fae982baec10fce11f977e8f3d49648aa9 GIT binary patch literal 78904 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/realtime_performance_tuning.rst b/doc/tutorials/realtime_performance_tuning.rst new file mode 100644 index 000000000..0e7ffecb2 --- /dev/null +++ b/doc/tutorials/realtime_performance_tuning.rst @@ -0,0 +1,198 @@ +.. _rt_performance_tuning: + +Trace and Data Collection for ACRN Real-Time(RT) Performance Tuning +################################################################### +The document describes the methods to collect trace/data for ACRN RT VM real-time +performance analysis. Two parts are included: + +- Method to use trace for the VM exits analysis; +- Method to collect performance monitoring counts for tuning based on PMU. + +VM exits analysis for ACRN RT performance +***************************************** + +VM exits in response to certain instructions and events are a key source of +performance degradation in virtual machines. During the runtime of hard RTVM +of ACRN, there are still some instructions and events which will impact the +RT latency's determinism. + + - CPUID + - TSC_Adjust read/write + - TSC write + - APICID/LDR read + - ICR write + +Generally, we don't want to see any VM exits occur during the critical section +of the RT task. + +The methodology of VM exits analysis is very simple. Firstly, we should clearly +identify the critical section of RT task. The critical section is the duration +of time where we do not want to see any VM exits occur. Different RT tasks get +different critical section. So this article will take the cyclictest as an example +to elaborate how to do VM exits analysis. + +The critical sections +===================== + +Here is example pseudocode of cyclictest implementation. + +.. code-block:: none + + while (!shutdown) { + … + clock_nanosleep(&next) + clock_gettime(&now) + latency = calcdiff(now, next) + … + next += interval + } + +Time point ``now`` is the actual point at which the cyclictest is wakeuped and +scheduled. Time point ``next`` is the expected point at which we want the cyclictest +to be woken up and scheduled. Here we can get the latency by ``now - next``. We don't +want to see VM exits during ``next`` through ``now``. So define the start point of +critical section as ``next`` and end point ``now``. + +Log and trace data collection +============================= + +#. Add timestamps (in TSC) at ``next`` and ``now``. +#. Capture the log with the above timestamps in RTVM. +#. Capture the acrntrace log in Service VM at the same time. + +Offline analysis +================ + +#. Convert the raw trace data to human readable format. +#. Merge the logs in RTVM and ACRN hypervisor trace based on timestamps (in TSC). +#. Check if there is any VM exit within the critical sections, the pattern is as follows: + + .. figure:: images/vm_exits_log.png + :align: center + :name: vm_exits_log + +Performance monitoring counts collecting +**************************************** + +Enable Performance Monitoring Unit (PMU) support in VM +====================================================== + +By default, ACRN hypervisor doesn't expose the PMU related CPUID and MSRs to +guest VM. In order to use Performance Monitoring Counters (PMCs) in guest VM, +need to modify the ACRN hypervisor code to expose the capability to RTVM. + +.. note:: Precise Event Based Sampling (PEBS) is not enabled in VM yet. + +#. Expose CPUID leaf 0xA as below: + + .. code-block:: none + + --- a/hypervisor/arch/x86/guest/vcpuid.c + +++ b/hypervisor/arch/x86/guest/vcpuid.c + @@ -345,7 +345,7 @@ int32_t set_vcpuid_entries(struct acrn_vm *vm) + break; + /* These features are disabled */ + /* PMU is not supported */ + - case 0x0aU: + + //case 0x0aU: + /* Intel RDT */ + case 0x0fU: + case 0x10U: + +#. Expose PMU related MSRs to VM as below: + + .. code-block:: none + + --- a/hypervisor/arch/x86/guest/vmsr.c + +++ b/hypervisor/arch/x86/guest/vmsr.c + @@ -337,6 +337,41 @@ void init_msr_emulation(struct acrn_vcpu *vcpu) + /* don't need to intercept rdmsr for these MSRs */ + enable_msr_interception(msr_bitmap, MSR_IA32_TIME_STAMP_COUNTER, INTERCEPT_WRITE); + + + + + /* Passthru PMU related MSRs to guest */ + + enable_msr_interception(msr_bitmap, MSR_IA32_FIXED_CTR_CTL, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERF_GLOBAL_CTRL, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERF_GLOBAL_STATUS, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERF_GLOBAL_OVF_CTRL, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERF_GLOBAL_STATUS_SET, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERF_GLOBAL_INUSE, INTERCEPT_DISABLE); + + + + enable_msr_interception(msr_bitmap, MSR_IA32_FIXED_CTR0, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_FIXED_CTR1, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_FIXED_CTR2, INTERCEPT_DISABLE); + + + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC0, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC1, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC2, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC3, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC4, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC5, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC6, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PMC7, INTERCEPT_DISABLE); + + + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC0, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC1, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC2, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC3, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC4, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC5, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC6, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_A_PMC7, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERFEVTSEL0, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERFEVTSEL1, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERFEVTSEL2, INTERCEPT_DISABLE); + + enable_msr_interception(msr_bitmap, MSR_IA32_PERFEVTSEL3, INTERCEPT_DISABLE); + + + /* Setup MSR bitmap - Intel SDM Vol3 24.6.9 */ + value64 = hva2hpa(vcpu->arch.msr_bitmap); + exec_vmwrite64(VMX_MSR_BITMAP_FULL, value64); + +Use Perf/PMU tool in performance analysis +========================================= + +After exposing PMU related CPUID/MSRs to VM, the performance analysis tool such as +perf and pmu tool can be used inside VM to locate the bottleneck of the application. +**Perf** is a profiler tool for Linux 2.6+ based systems that abstracts away CPU +hardware differences in Linux performance measurements and presents a simple command +line interface. Perf is based on the perf_events interface exported by recent versions +of the Linux kernel. +**PMU** tools is a collection of tools for profile collection and performance analysis +on Intel CPUs on top of Linux Perf. You can refer to the following links for the usage +of Perf: + + - https://perf.wiki.kernel.org/index.php/Main_Page + - https://perf.wiki.kernel.org/index.php/Tutorial + +You can refer to https://github.com/andikleen/pmu-tools for the usage of PMU tool. + +Top-down Micro-architecture Analysis Method (TMAM) +================================================== + +The Top-down Micro-architecture Analysis Method based on the Top-Down Characterization +methodology aims to provide an insight into whether you have made wise choices with your +algorithms and data structures. See the Intel |reg| 64 and IA-32 `Architectures Optimization +Reference Manual `_, +Appendix B.1 for more details on the Top-down Micro-architecture Analysis Method. +You can refer to this `technical paper +`_ +which adopts TMAM for systematic performance benchmarking and analysis of compute-native +Network Function data planes executed on Commercial-Off-The-Shelf (COTS) servers using available +open-source measurement tools. + +Example: Using Perf to analysis TMAM level 1 on CPU core 1. + + .. code-block:: console + + perf stat --topdown -C 1 taskset -c 1 dd if=/dev/zero of=/dev/null count=10 + 10+0 records in + 10+0 records out + 5120 bytes (5.1 kB, 5.0 KiB) copied, 0.00336348 s, 1.5 MB/s + + Performance counter stats for 'CPU(s) 1': + + retiring bad speculation frontend bound backend bound + S0-C1 1 10.6% 1.5% 3.9% 84.0% + + 0.006737123 seconds time elapsed +