6 кареев киров
TRANSCRIPT
![Page 1: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/1.jpg)
Презентация для QASib
Г. Кареев, А. Киров
Анализ потребления ресурсов группами взаимодействующих процессов, включая короткоживущие(или как объять необъятное и поймать неуловимое)
![Page 2: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/2.jpg)
2
Постановка задачи
Тестирование производительности сложного программного продукта, состоящего из множества долгоживущих (сервисы) и короткоживущих (утилиты) процессов:• Замер потребления системных ресурсов за промежуток времени
и/или операцию продуктом в целом• Анализ потребления индивидуально по каждому процессу включая
или не включая дочерние процессы
![Page 3: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/3.jpg)
3
Проблемы
• Сложно определить точную загрузку процессора• Сложно получить какую-либо информацию о короткожившем
процессе• Значения потребления памяти процессом имеют неоднозначные
трактования
![Page 4: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/4.jpg)
4
Виртуальная память
![Page 5: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/5.jpg)
5
Виртуальная память
• Данные в физическую память помещаются в виде страниц • Локальный адрес состоит из номера страницы и смещения
CPU f dp d
Physicalmemory
Logical address
Physicaladdress
p
Page table
Page number
offset
Page framesare typically
2-4 kb
![Page 6: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/6.jpg)
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
![Page 7: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/7.jpg)
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
![Page 8: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/8.jpg)
8
Имеющиеся инструменты
![Page 9: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/9.jpg)
9
Имеющиеся инструменты
![Page 10: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/10.jpg)
10
Имеющиеся инструменты
![Page 11: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/11.jpg)
11
Имеющиеся инструменты
![Page 12: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/12.jpg)
12
Имеющиеся инструменты
![Page 13: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/13.jpg)
13
Основные требования
• Слежение за группой процессов• Слежение за изменением дерева процессов• Получение информации об умершем процессе• Отсутствие* влияния работы самого анализатора на результат
• Предоставление следующих данных:• Потребление памяти• Потребление CPU• Кол-во считанных и записанных байт данных с диска/на диск• Кол-во принятых и отправленных байт данных по сети• Кол-во открытых файловых дескрипторов и сокетов• Кол-во запущенных процессов-потомков• Off-line подсчёт разделяемой памяти
![Page 14: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/14.jpg)
Версия для Linux
PTool
![Page 15: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/15.jpg)
15
PTool
Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов
Состав:• Модуль ядра Линукс для сбора необходимой информации• Утилита для управления модулем ядра, получения и записи данных в
двоичном виде• Утилита конвертации двоичных данных в собственный текстовый
формат• Утилита для преобразования текстовых данных в формат csv ‘как есть’
или с помощью пользовательского набора правил
![Page 16: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/16.jpg)
16
Kernel probes
API ядра Линукс для профилирования в реальном времени
• Преимущества:• Не требует модификации и перекомпиляции ядра из исходных кодов• Точки профилирования могут быть размещены и убраны в реальном
времени
• Поддержка трех типов точек профилирования:• По адресу любой процессорной инструкции (kprobe)• По адресу точки входа в функцию ядра (jprobe)• В момент выхода из функции ядра (retprobe)
![Page 17: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/17.jpg)
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
![Page 18: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/18.jpg)
18
Пример анализа результатов
![Page 19: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/19.jpg)
Версия для Windows
PTool
![Page 20: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/20.jpg)
20
PTool
Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов
Состав:• Драйвер ядра Windows для сбора необходимой информации• Утилита для управления работой драйвера: получения и записи данных
в собственный текстовый формат• Утилита для преобразования текстовых данных в формат csv ‘как есть’
или с помощью пользовательского набора правил• Утилита для подсчёта разделяемой памяти
![Page 21: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/21.jpg)
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
![Page 22: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/22.jpg)
22
Проблема подсчёта CPU
• Системный тик Windows (16ms) слишком велик для современных процессоров
• Процессы могут успевать выполнять свои задачи, не превышая системный тик, а следовательно не учитываться операционной системой как потребляющие CPU
![Page 23: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/23.jpg)
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
![Page 24: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/24.jpg)
24
Проблема слежения за группой процессов
![Page 25: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/25.jpg)
25
Проблема переиспользования PID
Проблема:• При создании нового процесса, оперционная система может
переиспользовать PID
Решение:• Строить дерево по двойному ключу: PID+время создания процесса
![Page 26: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/26.jpg)
26
Существующие технологии для анализа производительности
1. WINDOWS API
2. WMI
3. DLL HOOKS
4. Прямая работа с ядром
![Page 27: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/27.jpg)
27
(1/4) Windows API
• Получение параметров производительности через пользовательское пространство
• Вызов функций библиотеки Winapi32.dll • Приложение работает в userspace
– Невозможно детектировать короткоживущие процессы– Невозможно получить информацию от умерших
процессов– Переключение контекстов снижает производительность
![Page 28: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/28.jpg)
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 запросов требуется значительное время– Можно выполнить один запрос только по одному пулу событий за
промежуток времени
![Page 29: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/29.jpg)
29
(3/4) DLL HOOKS
• Ловушка (hook) - это механизм Windows, позволяющий перехватывать события, предназначенные некоторому приложению, до того как эти события до него дойдут
• Использование функции
HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);
– Невозможно сделать hook на завершение процесса– Ограниченный функционал– Переключение контекста
![Page 30: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/30.jpg)
30
(4/4) Работа с ядром Windows
• Работать с ядром Windows можно только в системном пространстве – нет переключения контекстов и вызовов лишних функций
• Нет практически никаких ограничений на получение параметров производительности
• подписка на события менеждера процессов черезPsSetCreateProcessNotifyRoutine()
– Сложность реализации– Разные ядра в разных версиях Windows
![Page 31: 6 кареев киров](https://reader036.vdocuments.pub/reader036/viewer/2022062419/557eed84d8b42aa30a8b4808/html5/thumbnails/31.jpg)
31
Q & A