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

31
Презентация для QASib Г. Кареев, А. Киров Анализ потребления ресурсов группами взаимодействующих процессов, включая короткоживущие (или как объять необъятное и поймать неуловимое)

Upload: qasib

Post on 15-Jun-2015

205 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 6 кареев киров

Презентация для QASib

Г. Кареев, А. Киров

Анализ потребления ресурсов группами взаимодействующих процессов, включая короткоживущие(или как объять необъятное и поймать неуловимое)

Page 2: 6 кареев киров

2

Постановка задачи

Тестирование производительности сложного программного продукта, состоящего из множества долгоживущих (сервисы) и короткоживущих (утилиты) процессов:• Замер потребления системных ресурсов за промежуток времени

и/или операцию продуктом в целом• Анализ потребления индивидуально по каждому процессу включая

или не включая дочерние процессы

Page 3: 6 кареев киров

3

Проблемы

• Сложно определить точную загрузку процессора• Сложно получить какую-либо информацию о короткожившем

процессе• Значения потребления памяти процессом имеют неоднозначные

трактования

Page 4: 6 кареев киров

4

Виртуальная память

Page 5: 6 кареев киров

5

Виртуальная память

• Данные в физическую память помещаются в виде страниц • Локальный адрес состоит из номера страницы и смещения

CPU f dp d

Physicalmemory

Logical address

Physicaladdress

p

Page table

Page number

offset

Page framesare typically

2-4 kb

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

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 кареев киров

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 кареев киров

8

Имеющиеся инструменты

Page 9: 6 кареев киров

9

Имеющиеся инструменты

Page 10: 6 кареев киров

10

Имеющиеся инструменты

Page 11: 6 кареев киров

11

Имеющиеся инструменты

Page 12: 6 кареев киров

12

Имеющиеся инструменты

Page 13: 6 кареев киров

13

Основные требования

• Слежение за группой процессов• Слежение за изменением дерева процессов• Получение информации об умершем процессе• Отсутствие* влияния работы самого анализатора на результат

• Предоставление следующих данных:• Потребление памяти• Потребление CPU• Кол-во считанных и записанных байт данных с диска/на диск• Кол-во принятых и отправленных байт данных по сети• Кол-во открытых файловых дескрипторов и сокетов• Кол-во запущенных процессов-потомков• Off-line подсчёт разделяемой памяти

Page 14: 6 кареев киров

Версия для Linux

PTool

Page 15: 6 кареев киров

15

PTool

Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов

Состав:• Модуль ядра Линукс для сбора необходимой информации• Утилита для управления модулем ядра, получения и записи данных в

двоичном виде• Утилита конвертации двоичных данных в собственный текстовый

формат• Утилита для преобразования текстовых данных в формат csv ‘как есть’

или с помощью пользовательского набора правил

Page 16: 6 кареев киров

16

Kernel probes

API ядра Линукс для профилирования в реальном времени

• Преимущества:• Не требует модификации и перекомпиляции ядра из исходных кодов• Точки профилирования могут быть размещены и убраны в реальном

времени

• Поддержка трех типов точек профилирования:• По адресу любой процессорной инструкции (kprobe)• По адресу точки входа в функцию ядра (jprobe)• В момент выхода из функции ядра (retprobe)

Page 17: 6 кареев киров

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 кареев киров

18

Пример анализа результатов

Page 19: 6 кареев киров

Версия для Windows

PTool

Page 20: 6 кареев киров

20

PTool

Набор утилит командной строки для сбора, хранения и анализа информации о потребляемых ресурсах выбранными процессами или деревьями процессов

Состав:• Драйвер ядра Windows для сбора необходимой информации• Утилита для управления работой драйвера: получения и записи данных

в собственный текстовый формат• Утилита для преобразования текстовых данных в формат csv ‘как есть’

или с помощью пользовательского набора правил• Утилита для подсчёта разделяемой памяти

Page 21: 6 кареев киров

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 кареев киров

22

Проблема подсчёта CPU

• Системный тик Windows (16ms) слишком велик для современных процессоров

• Процессы могут успевать выполнять свои задачи, не превышая системный тик, а следовательно не учитываться операционной системой как потребляющие CPU

Page 23: 6 кареев киров

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 кареев киров

24

Проблема слежения за группой процессов

Page 25: 6 кареев киров

25

Проблема переиспользования PID

Проблема:• При создании нового процесса, оперционная система может

переиспользовать PID

Решение:• Строить дерево по двойному ключу: PID+время создания процесса

Page 26: 6 кареев киров

26

Существующие технологии для анализа производительности

1. WINDOWS API

2. WMI

3. DLL HOOKS

4. Прямая работа с ядром

Page 27: 6 кареев киров

27

(1/4) Windows API

• Получение параметров производительности через пользовательское пространство

• Вызов функций библиотеки Winapi32.dll • Приложение работает в userspace

– Невозможно детектировать короткоживущие процессы– Невозможно получить информацию от умерших

процессов– Переключение контекстов снижает производительность

Page 28: 6 кареев киров

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 кареев киров

29

(3/4) DLL HOOKS

• Ловушка (hook) - это механизм Windows, позволяющий перехватывать события, предназначенные некоторому приложению, до того как эти события до него дойдут

• Использование функции

HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);

– Невозможно сделать hook на завершение процесса– Ограниченный функционал– Переключение контекста

Page 30: 6 кареев киров

30

(4/4) Работа с ядром Windows

• Работать с ядром Windows можно только в системном пространстве – нет переключения контекстов и вызовов лишних функций

• Нет практически никаких ограничений на получение параметров производительности

• подписка на события менеждера процессов черезPsSetCreateProcessNotifyRoutine()

– Сложность реализации– Разные ядра в разных версиях Windows

Page 31: 6 кареев киров

31

Q & A