1. Презентация для QASib Г. Кареев, А. Киров Анализ потребления ресурсов группами взаимодействующих процессов, включая короткоживущие (или как объять необъятное и поймать неуловимое)
2. Постановка задачи Тестирование производительности сложного программного продукта, состоящего из множества долгоживущих (сервисы) и короткоживущих (утилиты) процессов: Замер потребления системных ресурсов за промежуток времени и/или операцию продуктом в целом Анализ потребления индивидуально по каждому процессувключая или не включая дочерние процессы
3. Проблемы Сложно определить точную загрузку процессора Сложно получить какую-либо информацию о короткожившем процессе Значения потребления памяти процессом имеют неоднозначные трактования
5. Виртуальная память Данные в физическую память помещаются в виде страниц Локальный адрес состоит из номера страницыисмещения Physicalmemory CPU f d p d Logical address Physicaladdress p offset Page number Page framesare typically2-4 kb Page table
13. Основные требования Слежение за группой процессов Слежение за изменением дерева процессов Получение информации об умершем процессе Отсутствие* влияния работы самого анализатора на результат Предоставление следующих данных: Потребление памяти Потребление CPU Кол-во считанных и записанных байт данных с диска/на диск Кол-во принятых и отправленных байт данных по сети Кол-во открытых файловых дескрипторов и сокетов Кол-во запущенных процессов-потомков Off-line подсчёт разделяемой памяти
15. PTool Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов Состав: Модуль ядра Линукс для сбора необходимой информации Утилита для управления модулем ядра, получения и записи данных в двоичном виде Утилита конвертации двоичных данных в собственный текстовый формат Утилита для преобразования текстовых данных в формат csv ‘как есть’ или с помощью пользовательского набора правил
16. Kernel probes API ядра Линукс для профилирования в реальном времени Преимущества: Не требует модификации и перекомпиляции ядра из исходных кодов Точки профилирования могут быть размещены и убраны в реальном времени Поддержка трех типов точек профилирования: По адресу любой процессорной инструкции (kprobe) По адресуточки входа в функцию ядра (jprobe) В момент выхода из функции ядра (retprobe)
17. Особенности порождения новых процессовв ядре Линукс framenumber Process virtual memory Process page table 0 1 1 cpp cpp 2 4 cc1 11 3 data1 7 cc1 4 data2 5 Child process virtual memory 6 Child process page table data2 7 1 cpp data2 8 4 cc1 9 11 data1 10 8 data2 data1 11 memory
20. PTool Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов Состав: Драйвер ядра Windows для сбора необходимой информации Утилита для управления работой драйвера: получения и записи данных в собственный текстовый формат Утилита для преобразования текстовых данных в формат csv ‘как есть’ или с помощью пользовательского набора правил Утилита для подсчёта разделяемой памяти
21. Карта памяти процесса в Windows Windows 2008 Windows 2003 Commit charge Working set Kernel memory Shareable WS (Потенциальноразделяемаяпамять) Private WS (Неразделяемаяпамять) System cache Shared WS (Разделённая память dllи файлы) Available Paged bytes = Файл подкачки + Отображенныефайлы
22. Проблема подсчёта CPU Системный тик Windows (16ms) слишком велик для современных процессоров Процессы могут успевать выполнять свои задачи, не превышая системный тик, а следовательно не учитываться операционной системой как потребляющие CPU
23. Проблема слежения за группой процессов Для правильного построения дерева процессов нужно детектировать короткоживущие процессы Perl code: Far command line: Perl.exe C:empest.pl exec(“notepad.exe”); (PID: 2192 | Parent: 2808) Far.exe (PID: 3592 | Parent: 2192) cmd.exe Время жизни промежуточных процессов < 0,015 c (PID: 496 | Parent: 3592) perl.exe (PID: 2372 | Parent: 496) notepad.exe
25. Проблема переиспользования PID Проблема: При создании нового процесса, оперционная система может переиспользовать PID Решение: Строить дерево по двойному ключу: PID+время создания процесса