litceysel.ru
добавить свой файл
  1 ... 4 5 6 7 8

6. Выводы

После проделанных тестов утверждение о том, что измерения профайлера никогда не бывают точными, полностью подтвердилось. Действительно:


  • все проделанные измерения для профайлеров имеют собственную погрешность,

  • используемые методы не идеальны, и возможно подобрать программу, для которой они работают неверно,

  • показания профайлера могут качественно отличаться для архитектур различных процессоров.

Впрочем, измерения, получающиеся после работы современных профайлеров, вполне удовлетворяют потребностям разработчиков, и обнаруженные погрешности в большинстве случаев настолько незначительны, что их просто оставляют без внимания.

Если рассмотреть все характеристики показаний разработанного метода подсчета инструкций, то можно сказать, что получаемая оценка – метрика на множестве программ. Эту метрику можно использовать для сравнения производительности различных приложений.

Подобно тому, как при оценке времени работы алгоритма в О-нотации отбрасывается константа, так и оценка, вычисленная разработанным инструментом, не учитывает влияние системы.

7. Заключение


Предложенный в работе метод можно использовать гораздо шире. Так можно оценивать время исполнения не только программы, скомпилированной под платформу x86, а, например, время работы программ на виртуальных машинах или на интерпретаторах. Разработка таких программ сейчас довольно распространена из-за высокой скорости их разработки. Для проведения профайлинга достаточно собрать достаточную статистику для каждой инструкции байт-кода или другой элементарной операции: например, сколько тактов процессора в среднем тратится на исполнение той или иной команды.

Разработанный в рамках дипломной и курсовой работ инструмент имеет свои сильные и слабые стороны, как и остальные разработанные на данный момент профайлеры. Многие из них используют предоставляемую процессорами функциональность для профайлинга. Добавление этой функциональности было вынужденной мерой. Без нее осуществлять быстрый и качественный профайлинг было невозможно. Также в этой работе было доказано, что производить точные измерения времени работы приложения также невозможно по причине сложности архитектуры процессора и самого процесса исполнения программ.


Как видим, существенную роль в профайлинге занимает центральный процессор. Из этого можно сделать предположение, что в будущем профайлингом приложений будет заниматься целиком только сам процессор. Например, будет создан специальный режим работы процессора, в котором измерения не будут влиять на процесс исполнения самой программы. За это придется заплатить некоторым снижением скорости работы программы.

Еще один способ получения идеальных измерений – создание программы-эмулятора, точной копии процессора. Такой эмулятор позволит анализировать код программы настолько всесторонне, насколько это возможно. Но такой подход крайне сложен в реализации и, скорее всего, реализован не будет никогда.

8. Глоссарий


  1. Инструментирование – внедрение в исходные или машинные коды дополнительных команд, которые производят необходимые замеры (времени, счетчиков процессора и т.д.).

  2. Профайлинг приложения – измерение количества ресурсов потребляемой той или иной программой и поиск мест, в которых потребление больше чем в остальных.

  3. Семплирование – анализ программы на основе периодических замеров.

  4. Сплайсинг функции – замена первых пяти байт функции инструкцией безусловного перехода. Необходим для перехвата вызовов этой функции [29].

9. Литература


  1. Alexey Ott, “Что такое valgrind и зачем он нужен”.

http://www.alexott.net/ru/linux/valgrind/Valgrind.html;

  1. “AMD CodeAnalyst Performance Analyzer. Product page”.

http://developer.amd.com/cpu/CodeAnalyst/Pages/default.aspx;

  1. AMD Developer Central, CodeAnalyst, “Time-Based Profiling”. http://developer.amd.com/cpu/CodeAnalyst/codeanalystlinux/Documents/CodeAnalyst-Linux-help/analysis_TBP.htm;
  2. Amitabh Srivastava, Alan Eustace, “Atom: A system for building customized program analysis tools”, 1994.


http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.119.8540;

  1. “AQtime Pro. Product page”.

http://smartbear.com/products/development-tools/performance-profiling/;

  1. “Dmalloc – Debug Malloc Library”. http://dmalloc.com/;

  2. “Dyninst. An Application Program Interface (API) for Runtime Code Generation”. http://www.dyninst.org/;

  3. “How I ran AMD CodeAnalyst on an Intel CPU”.

http://www.virtualdub.org/blog/pivot/entry.php?id=288;

  1. “IBM S/360 System Calls”.

http://www.cs.clemson.edu/~mark/syscall/s360.html;

  1. Intel® 64 and IA-32 Architectures, Optimization Reference Manual, Appendix C, “Instruction latency and throughput”;

  2. “Intel® 64 and IA-32 Architectures Software Developer's Manuals”.

http://www.intel.com/products/processor/manuals/;

  1. “Intel® Parallel Amplifier 2011. Product page”.

http://software.intel.com/en-us/articles/intel-parallel-amplifier/;

  1. “Intel® Parallel Studio XE 2011 – Purchase”.

http://software.intel.com/en-us/articles/intel-parallel-studio-xe-purchase/;

  1. Intel Software Developer’s Manual, 3 том, Приложение A, “Performance-monitoring events”;

  2. Intel Software Developer’s Manual, 3 том, глава 30, 30.8. ”Performance Monitoring (Processors based on Intel NetBurst® Microarchitecture)”, стр 328.

  3. Intel® Software Network, “Using Intel® VTune™ Performance Analyzer Events/ Ratios & Optimizing Applications”.

http://software.intel.com/en-us/articles/using-intel-vtune-performance-analyzer-events-ratios-optimizing-applications/;
  1. “Intel® VTune™ Amplifier XE 2011. Product page”.


http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/;

  1. John von Neumann, "First Draft of a Report on the EDVAC". http://qss.stanford.edu/~godfrey/vonNeumann/vnedvac.pdf;

  2. Maxim Chirkov, “Для чего нужно профилирование”.

http://www.opennet.ru/docs/RUS/gprof/gprof-1.html;

  1. MSDN, “CreateProcess Function”.

http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx;

  1. MSDN, “CreateRemoteThread Function”.

http://msdn.microsoft.com/en-us/library/ms682437(v=vs.85).aspx;

  1. MSDN, “Memory Protection Constants”.

http://msdn.microsoft.com/en-us/library/aa366786(v=vs.85).aspx;

  1. MSDN, “Process Creation Flags”.

http://msdn.microsoft.com/en-us/library/ms684863(v=vs.85).aspx;

  1. MSDN, “RaiseException Function”.

http://msdn.microsoft.com/en-us/library/ms680552(v=vs.85).aspx;

  1. MSDN, “ResumeThread Function”.

http://msdn.microsoft.com/en-us/library/ms685086(v=vs.85).aspx;

  1. MSDN, “Structured Exception Handling”.

http://msdn.microsoft.com/en-us/library/ms680657(v=vs.85).aspx;

  1. MSDN, “Vectored Exception Handling”.

http://msdn.microsoft.com/en-us/library/ms681420(v=vs.85).aspx;

  1. MSDN, “VirtualAllocEx Function”.

http://msdn.microsoft.com/en-us/library/aa366890(v=vs.85).aspx;

  1. Ms-Rem, “Перехват API функций в Windows NT (часть 1). Основы перехвата”, 2005 год.

http://www.wasm.ru/article.php?article=apihook_1;

  1. “Optimizing your Application with Shark 4”.

http://developer.apple.com/tools/sharkoptimize.html;


  1. Paul J. Drongowski, “Increased performance with AMD CodeAnalyst™ software and Instruction-Based Sampling”.

http://developer.amd.com/Assets/amd_ca_linux_june_2008.pdf;

  1. “Pin – A Dynamic Binary Instrumentation Tool”.

http://www.pintool.org/;

  1. RSDN, “Дизассемблер длин инструкций (x86)”.

http://www.rsdn.ru/forum/src/3120789.1.aspx;

  1. Steve Mansour, “Profile code with Quantify 1.1”, 1994.

http://portal.acm.org/citation.cfm?id=188277;

  1. “Valgrind. Product site”. http://www.valgrind.org/;

  2. VX Heavens, “Catchy32”. http://vx.netlux.org/vx.php?id=ec11;

  3. Wikipedia, “Data structure alignment”.

http://en.wikipedia.org/wiki/Data_structure_alignment;

  1. Wikipedia, “Harvard Architecture”.

http://en.wikipedia.org/wiki/Harvard_architecture;

  1. Zack Smith, “The Intel 8086 / 8088/ 80186 / 80286 / 80386 / 80486 Instruction Set”. http://home.comcast.net/~fbui/intel.html;

  2. Булычев Иван, ”Разработка метода сбора информации о ходе исполнения программы, который использует возможность модификации памяти процесса”.

http://willzyx-edu-project.googlecode.com/svn/trunk/Proj1/doc/coursework.pdf;

  1. Википедия, “Дизассемблер длин”.

http://ru.wikipedia.org/wiki/Дизассемблер_длин;

  1. Гумеров Максим, “Загрузчик PE-файлов”.

http://www.rsdn.ru/article/baseserv/peloader.xml;

  1. “Деревья эволюции операционных систем и языков программирования”.

http://shannon.usu.edu.ru/history/trees.htm;

  1. Чирков Максим,“Профилятор gprof”.

http://www.opennet.ru/docs/RUS/gprof/;


<< предыдущая страница   следующая страница >>