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