Поддержка системы команд THUMB в двоичной трансляции (1187412), страница 5
Текст из файла (страница 5)
потери свойств мониторавиртуальной машины) либо сторонних программных ошибок.Также ожидается, что на исполняемых файлах, закодированных смешанно,различными системами машинных команд, прирост скорости будет получен засчет:1. Увеличения производительности Thumb-кодированных участков2. Уменьшения количества переключений в режим эмуляции при переходемежду Thumb и ARM базовыми блоками.Не должно наблюдаться уменьшения производительности на исполняемыхфайлах, закодированных исключительно системой команд arm.Для проверки данных гипотез был подобран специализированный набортестовых исполняемых файлов.
Он состоит из трех исполняемых файлов; одинзакодирован исключительно в Thumb, второй смешанный, третий исключительноarm.#include <stdio.h>int next_prime(int i, int x[]) {while (x[i] == 0) i++;return i;}int main(int argc, c har* argv[]) {int* primes;int i = 0;int j = 0;int k = 0;const int _end = 100000;for(i=2; i < _end; i++) {primes[i] = i;//printf("%d\n", i);}for(i=2; i < _end; i = next_prime(i+1, primes)) {for(j = (i*2); j < _end; j += i) {//printf("i: %d, j: %d\n", i, j);primes[j] = 0;}}for(i=2; i < _end; i++) {if ( primes[i] != 0 ) {printf("Prime number: %d\n", primes[i]);}}return 0;}Листинг 13.
Исходный код примитивной программы для замерапроизводительности целочисленных расчетов.Код, из которого собраны данные исполняемые файлы, представляет собойпримитивную реализацию решета Эратосфена. Выходной файл покрывает околодвух третей арифметико-логических инструкций, имеет простую с точки зренияанализа потока исполнения структуру и не использует условное исполнение.Для проверки первой гипотезы, Parallels ARM Emulator был собран в двухверсиях, одна из которых поддерживала только эмуляцию Thumb, а другаяподдерживала и эмуляцию, и двоичную трансляцию.Для всех остальных измерений был использован свободный набор бенчмарковMiBench. [17] Его выбор был обусловлен простотой использования,специализацией на встраиваемые RISC системы, а также лицензированием.Для сборки кода был использован кросс-компилятор, полученный от проектаGCC, версии 7.1.0.GNU C99 (GCC) version 7.1.0 (arm-linux-gnueabi)compiled by GNU C version 7.0.1 20170421 (Red Hat 7.0.1-0.15), GMPversion 6.1.2, MPFR version 3.1.5, MPC version 1.0.2, isl version isl-0.16.1-GMPGGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072COLLECT_GCC_OPTIONS='-std=c99' '-fno-exceptions' '-fno-unwind-tables''-nostartfiles' '-masm-syntax-unified' '-fno-pie' '-fno-gnu-tm' '-v' '-march=armv7ve''-mtls-dialect=gnu'Листинг 14.
Версия и конфигурация используемого компилятора.Сравнение производительности было также осуществлено относительноосновных конкурентов (см. главу 2). В сравнении участвовали версии QuickEmulator версии 2.9В качестве Houdini была использована поставка Android 5, сборка Android onx86, на устройстве Asus ZenFone 4 (A450CG), результаты были нормированы потактовой частоте устройств.Характеристики тестового стенда для остальных измерений указаны влистинге 15. Тестовый стенд находится под управлением операционной системыGNU\Linux.$ cat /proc/versionLinux version 4.11.5-300.fc26.x86_64 (mockbuild@bkernel02.phx2.fedoraproject.org)(gcc version 7.1.1 20170526 (Red Hat 7.1.1-2) (GCC) ) #1 SMP Wed Jun 14 19:16:35UTC 2017$ lscpuArchitecture:x86_64CPU op-mode(s):32-bit, 64-bitByte Order:Little EndianCPU(s):8Vendor ID:GenuineIntelModel:42Model name:Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHzStepping:7CPU MHz:799.951CPU max MHz:3500,0000CPU min MHz:800,0000$ cat /proc/meminfoMemTotal:12182760 kBЛистинг 15.
Характеристики тестового стенда для измеренийпроизводительности.ЗаключениеПроведена профилировка производительности монитора виртуальных машинParallels ARM Emulator. Анализ результатов профилировки и основных ожидаемыхи целевых сценариев работы указал на нехватку поддержки архитектуры системыкоманд Thumb, а также на неоптимальное использование структур данных вмодуле анализа потока исполнения.Был предложен и имплементирован способ реализации поддержки системыкоманд Thumb основываясь на уже существующих наработках в архитектуремонитора виртуальных машин.Существующий код модуля анализа потока исполнения был оптимизирован.Были проведены эксперименты по сравнению производительности насинтетических тестах монитора виртуальных машин Parallels ARM Emulator иосновных аналогов.Синтетические тесты содержали арифметические операции, и не содержалиопераций ввода-вывода. Для тестирования прироста производительности былтакже собран тест со смешанным кодом систем команд arm и thumb.Данные тесты показали прирост производительности после выполненных вданной работе оптимизаций приблизительно на 600% в случае исключительноThumb кода и на ~27% в случае приближенного к реальному смешанного(interweaving) кода.По сравнению с Quick Emulation (QEMU), Parallels ARM Emulator показалприблизительно до двух порядков лучшую скорость в обоих случаях.По сравнению с libhoudini существенного отличия в производительностиобнаружить не удалось.
Возможно это свидетельствует об ошибке во времянастройки тестового окружения.Все это позволяет сказать о том, что поставленные в работе цели былиуспешно достигнуты. Предложенные в ходе работы и затем реализованныеметодики улучшают скоростные характеристики программного комплексавиртуализации Parallels ARM Emulator, что было успешно доказано в ходеизмерений в финальной части работы.Дальнейшее продолжение работ в данном направлении видиться возможными актуальным. Касательно исключительно вопросов оптимизации бинарноготранслятора, особенно перспективными видятся попытки дополнительныхоптимизаций транслируемого машинного кода (вопрос изложен в [18], [19]).Список литературы[1] Fabrice Bellard.
QEMU, a Fast and Portable Dynamic Translator// Proceedings of the USENIX Annual Technical Conference 2005[2] Adams K., Agesen O. A comparison of software and hardware techniques for x86virtualization // ACM SIGPLAN Notices. 2006. № 11 (41). C. 2.[3] Altman E., Kaeli D., Sheffer Y. Welcome to the opportunities of binary translation //Computer. 2000. № 3 (33). C. 40–45.[4] De Berg, Mark, Marc Van Kreveld, Mark Overmars, and Otfried CheongSchwarzkopf. "Computational geometry." In Computational geometry, pp. 1-17.Springer Berlin Heidelberg, 2000.[5] Choi M. et al.
Faster Translated Binary Execution on Mobile System throughVirtualization // 2014 IEEE 28th International Conference on AdvancedInformation Networking and Applications. 2014.[6] Choi M., Lim S.-H. x86-Android performance improvement for x86 smart mobiledevices // Concurrency and Computation: Practice and Experience. 2014.
№ 10(28). C. 2770–2780.[7] Cormen T.H. et al. Introduction to algorithms / T.H. Cormen, C.E. Leiserson, R.L.Rivest, C. Stein, Cambridge (Massachusetts): The MIT Press, 2009.[8] Hess K., Newman A. Practical virtualization solutions: virtualization from thetrenches / K. Hess, A. Newman, Upper Saddle River, N.J.: Prentice Hall, PearsonEducation, 2010.[9] Intel, Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2:Instruction Set Reference & Volume 3: System Programming Guide, A-Z, IntelCorporation, 2011.[10] Menken I.
A complete guide on virtualization / I. Menken, Australia: Emereo PtyLtd., 2008.[11] Popek G.J., Goldberg R.P. Formal requirements for virtualizable third generationarchitectures // Communications of the ACM. 1974. № 7 (17). C. 412–421.[12] ARM Architecture Group, ARM® Architecture Reference Manual: ARM® v7-Aand ARM® v7-R edition – errata markup, ARM Limited,ARM 0406C.c errata 2014 (ID051414) edition, 2014.[13] Gartner Report.URL: http://www.psfk.com/2012/03/cloud-replace-pc-headlines.htm ,(01.06.
2017).[14] Rik Myslewski, Rod Watt ARM tests: Intel flops on Android compatibilityURL:https://www.theregister.co.uk/2014/05/02/arm_test_results_attack_intel/(01.06.2017).[15] Niels Penneman, Danielius Kudinskas, Alasdair Rawsthorne, Bjorn De Sutter, KoenDe Bosschere,Formal virtualization requirements for the ARM architecture, 2000MSC: 68M01, 68N25, 68N30[16] H.
Dong, Q. Hao, Extension to the model of a virtualizable computer and analysis onthe efficiency of a virtual machine, in: Second International Conference onComputer Modeling and Simulation, volume 2 of ICCMS 2010,IEEEComputerSociety, Los Alamitos, California, USA, 2010, pp. 503–507.[17] Guthaus M. R.
et al. MiBench: A free, commercially representative embeddedbenchmark suite //Workload Characterization, 2001. WWC-4. 2001 IEEEInternational Workshop on. – IEEE, 2001. – С. 3-14.[18] Spink, Tom, Harry Wagstaff, Björn Franke, and Nigel Topham. "Efficient codegeneration in a region-based dynamic binary translator." In ACM SIGPLAN Notices,vol. 49, no. 5, pp. 3-12. ACM, 2014.[19] D'antras A. et al. Optimizing indirect branches in dynamic binary translators //ACMTransactions on Architecture and Code Optimization (TACO). – 2016. – Т.
13. –№. 1. – С. 7..