Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

6 кареев киров

351 views

Published on

  • Be the first to comment

  • Be the first to like this

6 кареев киров

  1. 1. Презентация для QASib<br />Г. Кареев, А. Киров<br />Анализ потребления ресурсов группами взаимодействующих процессов, включая короткоживущие<br />(или как объять необъятное и поймать неуловимое)<br />
  2. 2. Постановка задачи<br />Тестирование производительности сложного программного продукта, состоящего из множества долгоживущих (сервисы) и короткоживущих (утилиты) процессов:<br />Замер потребления системных ресурсов за промежуток времени и/или операцию продуктом в целом<br />Анализ потребления индивидуально по каждому процессувключая или не включая дочерние процессы<br />
  3. 3. Проблемы<br />Сложно определить точную загрузку процессора<br />Сложно получить какую-либо информацию о короткожившем процессе<br />Значения потребления памяти процессом имеют неоднозначные трактования<br />
  4. 4. Виртуальная память<br />
  5. 5. Виртуальная память<br />Данные в физическую память помещаются в виде страниц <br />Локальный адрес состоит из номера страницыисмещения<br />Physicalmemory<br />CPU<br />f<br />d<br />p<br />d<br />Logical address<br />Physicaladdress<br />p<br />offset<br />Page number<br />Page framesare typically2-4 kb<br />Page table<br />
  6. 6. Виртуальная память<br />framenumber<br />0<br />Page 1<br />1<br />Page 0<br />4<br />2<br />0<br />Page 1<br />1<br />1<br />Page 3<br />3<br />Page 2<br />6<br />2<br />Page 0<br />4<br />3<br />Page 3<br />3<br />5<br />pagetable<br />logicalmemory<br />Page 2<br />6<br />7<br />physicalmemory<br />
  7. 7. Виртуальная память<br />framenumber<br />Process 1 virtual memory<br />Process 1 page table<br />0<br />1<br />1<br />cpp<br />cpp<br />2<br />4<br />cc1<br />11<br />3<br />cc2<br />7<br />cc1<br />4<br />data1<br />5<br />Process 2 virtual memory<br />6<br />Process 2 page table<br />data1<br />7<br />1<br />cpp<br />data2<br />8<br />4<br />cc1<br />9<br />11<br />cc2<br />10<br />8<br />data2<br />cc2<br />11<br />memory<br />
  8. 8. Имеющиеся инструменты<br />
  9. 9. Имеющиеся инструменты<br />
  10. 10. Имеющиеся инструменты<br />
  11. 11. Имеющиеся инструменты<br />
  12. 12. Имеющиеся инструменты<br />
  13. 13. Основные требования<br />Слежение за группой процессов<br />Слежение за изменением дерева процессов<br />Получение информации об умершем процессе<br />Отсутствие* влияния работы самого анализатора на результат<br />Предоставление следующих данных:<br />Потребление памяти<br />Потребление CPU<br />Кол-во считанных и записанных байт данных с диска/на диск<br />Кол-во принятых и отправленных байт данных по сети<br />Кол-во открытых файловых дескрипторов и сокетов<br />Кол-во запущенных процессов-потомков<br />Off-line подсчёт разделяемой памяти<br />
  14. 14. Версия для Linux<br />PTool<br />
  15. 15. PTool<br />Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов<br />Состав:<br />Модуль ядра Линукс для сбора необходимой информации<br />Утилита для управления модулем ядра, получения и записи данных в двоичном виде<br />Утилита конвертации двоичных данных в собственный текстовый формат<br />Утилита для преобразования текстовых данных в формат csv ‘как есть’ или с помощью пользовательского набора правил<br />
  16. 16. Kernel probes<br />API ядра Линукс для профилирования в реальном времени<br />Преимущества:<br />Не требует модификации и перекомпиляции ядра из исходных кодов<br />Точки профилирования могут быть размещены и убраны в реальном времени<br />Поддержка трех типов точек профилирования:<br />По адресу любой процессорной инструкции (kprobe)<br />По адресуточки входа в функцию ядра (jprobe)<br />В момент выхода из функции ядра (retprobe)<br />
  17. 17. Особенности порождения новых процессовв ядре Линукс<br />framenumber<br />Process virtual memory<br />Process page table<br />0<br />1<br />1<br />cpp<br />cpp<br />2<br />4<br />cc1<br />11<br />3<br />data1<br />7<br />cc1<br />4<br />data2<br />5<br />Child process virtual memory<br />6<br />Child process page table<br />data2<br />7<br />1<br />cpp<br />data2<br />8<br />4<br />cc1<br />9<br />11<br />data1<br />10<br />8<br />data2<br />data1<br />11<br />memory<br />
  18. 18. Пример анализа результатов<br />
  19. 19. Версия для Windows<br />PTool<br />
  20. 20. PTool<br />Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов<br />Состав:<br />Драйвер ядра Windows для сбора необходимой информации<br />Утилита для управления работой драйвера: получения и записи данных в собственный текстовый формат<br />Утилита для преобразования текстовых данных в формат csv ‘как есть’ или с помощью пользовательского набора правил<br />Утилита для подсчёта разделяемой памяти<br />
  21. 21. Карта памяти процесса в Windows<br />Windows 2008<br />Windows 2003<br />Commit charge<br />Working set<br />Kernel memory<br />Shareable WS<br />(Потенциальноразделяемаяпамять)<br />Private WS<br />(Неразделяемаяпамять)<br />System cache<br />Shared WS (Разделённая память dllи файлы)<br />Available<br />Paged bytes = Файл подкачки + Отображенныефайлы<br />
  22. 22. Проблема подсчёта CPU<br />Системный тик Windows (16ms) слишком велик для современных процессоров<br />Процессы могут успевать выполнять свои задачи, не превышая системный тик, а следовательно не учитываться операционной системой как потребляющие CPU<br />
  23. 23. Проблема слежения за группой процессов<br />Для правильного построения дерева процессов нужно детектировать короткоживущие процессы<br />Perl code:<br />Far command line:<br />Perl.exe C:temptest.pl<br />exec(“notepad.exe”);<br />(PID: 2192 | Parent: 2808)<br />Far.exe<br />(PID: 3592 | Parent: 2192)<br />cmd.exe<br />Время жизни<br />промежуточных процессов<br />< 0,015 c<br />(PID: 496 | Parent: 3592)<br />perl.exe<br />(PID: 2372 | Parent: 496)<br />notepad.exe<br />
  24. 24. Проблема слежения за группой процессов<br />
  25. 25. Проблема переиспользования PID<br />Проблема:<br />При создании нового процесса, оперционная система может переиспользовать PID<br />Решение:<br />Строить дерево по двойному ключу: PID+время создания процесса<br />
  26. 26. Существующие технологии для анализа производительности<br />WINDOWS API<br />WMI<br />DLL HOOKS<br />Прямая работа с ядром<br />
  27. 27. (1/4) Windows API<br />Получение параметров производительности через пользовательское пространство<br />Вызов функций библиотеки Winapi32.dll<br />Приложение работает в userspace<br /><ul><li>Невозможно детектировать короткоживущие процессы
  28. 28. Невозможно получить информацию от умерших процессов
  29. 29. Переключение контекстов снижает производительность</li></li></ul><li>(2/4) WMI<br />WindowsManagementInstrumentation —технология для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows<br />WMI Query Language (WQL) – SQL-подобный язык запросов к Windows<br />Примеры запросов:<br />Set colProcesses = objService.ExecQuery("Select * from Win32_Process Where Handle = 4")<br />“SELECT * FROM InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process‘”<br /><ul><li>На выполнение WQL запросов требуется значительное время
  30. 30. Можно выполнить один запрос только по одному пулу событий за промежуток времени</li></li></ul><li>(3/4) DLL HOOKS<br />Ловушка (hook) - это механизм Windows, позволяющий перехватывать события, предназначенные некоторому приложению, до того как эти события до него дойдут<br />Использование функции <br />HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);<br /><ul><li>Невозможно сделать hook на завершение процесса
  31. 31. Ограниченный функционал
  32. 32. Переключение контекста</li></li></ul><li>(4/4) Работа с ядром Windows<br />Работать с ядром Windows можно только в системном пространстве – нет переключения контекстов и вызовов лишних функций<br />Нет практически никаких ограничений на получение параметров производительности<br />подписка на события менеждера процессовчерезPsSetCreateProcessNotifyRoutine()<br /><ul><li>Сложность реализации
  33. 33. Разные ядра в разных версиях Windows</li></li></ul><li>Q & A<br />

×