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

Preview:

Citation preview

Презентация для 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