BC/NW 2007, №1, (10) :11.2
МЕТОДИКА ЭКСПЕРИМЕНТАЛЬНОГО ОПРЕДЕЛЕНИЯ БАЗОВЫХ ПАРАМЕТРОВ
ПРОИЗВОДИТЕЛЬНОСТИ КОММУНИКАЦИОННОГО УЗЛА.
Е.В. Кокорина, Л.И. Абросимов
(Москва, Московский энергетический институт (технический университет), Россия)
В условиях роста вычислительных сетей, как глобальных,
так и корпоративных возникает необходимость оценки сетевой производительности
коммуникационных узлов, как на этапе проектирования новых вычислительных сетей для обеспечения требуемой
производительности и масштабируемости системы
в целом, так и на этапе эксплуатации существующих для выявления узких
мест и их устранения.
Целью проводимых исследований является разработка
методики экспериментального определения сетевых характеристик
производительности вычислительной сети (ВС).
Поставленная цель
потребует решения следующих задач:
·
Разработка плана
проведения экспериментов
·
Выбор и
обоснование коммуникационного узла (КУ) для проведения экспериментальных
исследований
·
Анализ
возможностей программных средств
·
Сбор и настройка
экспериментального стенда
·
Разработка
методики экспериментального определения количественных значений сетевых
характеристик КУ
·
Разработка
комплекса программных средств для измерения базовых временных параметров
функционирования сетевых программ
·
Разработка
программных средств для обработки и представления количественных значений сетевых характеристик
на основе предложенной методики.
Под коммуникационным узлом вычислительной сети понимаем устройство, выполняющее функции
транспортного, сетевого и канального
уровня, которое реализовано на базе IBM PC, функционирующей под управлением ОС Linux в сети Fast Ethernet.
Исследование работы современных компьютеров на уровне
команд операционной системы, является сложной проблемой. В настоящем
исследовании разрабатывается методика, использующая программные измерители
временных параметров.
Для проведения экспериментальных исследований рассматривается
команда ping, как тестовая
команда, которая позволяет проверить все положения методики исследования количественные
значения сетевых характеристик КУ, которые являются базовыми понятиями при определении производительности ВС.
Сетевая команда ping служит для проверки работоспособности функционирующего
сетевого трафика удаленной ЭВМ и для определения времени передачи пакетов
удаленному компьютеру, на которые должна получить ответ. На экран выводится время ответа на каждый пакет, а затем
- статистика всех пакетов (количество
отправленных, полученных и потерянных).
Постановка задачи:
Развитие вычислительных сетей привело к повышению
требований к технико-экономическим показателям, одним из которых является
производительность ВС. Производительность элементов ВС является базовой, так как
на ее основе могут быть рассчитаны все остальные значения производительностей.
Под элементом узла ВС понимаются единица обработки,
временно сосредотачивающая ресурсы узла для обработки транзакции (процессы,
подпрограммы).
Чтобы по численным характеристикам элементов
определить значения производительности узлов, необходима математическая модель.
Математическая модель (ММ) содержит в своем составе аналитические
соотношения, отображающие связи измеряемы параметров и определяемых параметров
сетевой производительность. Модель необходима для получения системных и
количественных характеристик функционирования ВС с целью повышения
эффективности построения самой ВС.
Для проведения исследований предложена
«детализированная» модель КУ, с помощью которой можно оценить интервалы времени
обработки тестовых пакетов отдельными модулями КУ, входящими в состав модели.
Декомпозиция каждого модуля на отдельные функции позволит замерить эти функции
с помощью стандартных программных средств.
«Детализированная» модель КУ для фазы обработки
полученного пакета представлена на рисунке 1.
Далее приводятся разъяснения примененных обозначений
модулей КУ. Каждый из представленных модулей содержит собственные точки
трассировки, поддерживаемые Linux Trace Toolkit.
Hardware Controllers – работа аппаратных контроллеров;
Kernel –
работ ядра ОС Linux;
Network –
выполнение сетевых функций;
IPC (Inter Process Сommunication) – работы внутренних процессов взаимодействия;
Scheduler –
работа планировщика процессов;
System Call Interface –
работа интерфейса системных вызовов;
Virtual File System –
работа виртуальной файловой системы;
Socket –
выполнение функций сокетом.
`
Рисунок 1 -
«Детализированная» модель коммуникационного узла
(фаза обработки полученного пакета)
В полученной «детализированной» модели представлены
функции, которые выполняются в КУ при
сетевом обмене, последовательность, частота и длительность их
выполнения.
Соответственно при планировании экспериментов для
оценки интервалов времени обработки тестовых пакетов отдельными модулями КУ
необходимо:
- декомпозировать модули на отдельные
функции;
- измерить время выполнения каждой из
функций;
- определить суммарное время выполнения
функций для каждого из модулей.
Для декомпозиции программных модулей КУ на отдельные
функции потребовалось провести детальный анализ структуры ОС КУ и организацию
ее работы с сетью, а также выяснить взаимодействие модулей системы,
проанализировать путь сетевого трафика, стек протоколов и назначение функций,
вызываемых в процессе установки соединения, отправки и получения сообщений.
Таким образом, измеряемыми параметрами
производительности (ИПП) является время обслуживания t0
сетевых транзакций КУ, где t0 =1/ µ. Базовым параметром производительности (БПП) является
интенсивность обслуживания µ потока
сетевых транзакций КУ
Для измерения времени выполнения функций использованы
возможности программных средств:
§
Linux Trace Toolkit-0.9.5a
§
Kernprof 1.5.1
§
Dynamic
Probes (DProbes)
§
Gprof
и
определены параметры для их настройки. Данные программные средства позволяют
измерять интервалы задержки при обработке пакета в модели КУ с точностью до выполнения
каждой вызываемой функции.
С помощью программных средств необходимо оценить
интервалы времени обработки тестовых пакетов отдельными программными модулями
КУ при их отправлении/получении и по полученным (найденным) значениям времен
оценить производительность модулей КУ для режима отправки и получения тестовых
пакетов.
Для обработки результатов экспериментов
разрабатывается программный модуль, с помощью которого определяется интервалы
времен при отправке/получении тестовых пакетов, время пакетов в сети. По
найденным значениям интервалов времен каждого модуля КУ определяется интенсивность
отправки и получения тестовых пакетов, строится график прохождения тестовых
пакетов. Также в программном модуле формируется список функций ядра, состоящий
из следующих частей: функции отправки, получения и общих функции для всего
процесса передачи тестового пакета.
Описание экспериментального стенда
Коммуникационный узел (КУ) реализован на базе
компьютера IBM PC под
управлением операционной системы (ОС) RedHat Linux 8.0 с
ядром версии 2.4.19.
Конфигурация компьютера:
- Intel Pentium II 233 MHz,
- ОЗУ 288 Мбайт,
- сетевые карты Intel 21041 и RealTek8139.
К
сетевой карте RealTek8139 подключена внешняя сеть, к сетевой карте Intel 21041
подключена клиентская машина (клиент).
Клиент – компьютер IBM PC под
управлением ОС Windows 2000 AS. Конфигурация компьютера клиента: Intel Pentium I
MMX
200 MHz, ОЗУ 160 МБайт, сетевая карта Intel 21041.
КУ, клиент и внешняя сеть изображены на рисунке 2 КУ
выполняет роль моста между клиентом и внешней сетью. Заметим, что КУ на базе
компьютера представляет собой довольно универсальное решение, т.к. при желании
его возможно использовать, например, как маршрутизатор.
Рисунок 2 – Соединение КУ с внешними устройствами
Данный стенд предоставляет нам широкие
возможности. В общем случае КУ обслуживает только одного клиента, но так как
имеется непосредственный доступ к клиенту, мы можем изменять его сетевую
активность и наблюдать за КУ. Можно выявить «узкие места» в КУ и попытаться их
устранить.
В данном работе на КУ будут установлены следующие
средства: Kernprof, Linux Trace Toolkit и Dynamic Probes, с
помощью которых мы сможем узнать какие процессы происходят в ядре, какие
функции наиболее важные с точки зрения сетевой обработки и в какие моменты
времени они вызываются. Собранные данные помогут при будущем изучении данного
вопроса.
В рамках данного исследования спланированы и проведены
эксперименты по передачи тестовых пакетов. Для этого разработана методика
экспериментального определения сетевых характеристик производительности ВС.
Цели проведения экспериментов следующие:
·
проверка
работоспособности комплекса программных средств;
·
получить список
функций, вызываемых модулями КУ, с временными отметками их выполнения .
·
получить
временные интервалы задержки на отправку и получение тестовых пакетов
отдельными модулями КУ, на примере команды PING, для оценки интенсивности обслуживания и уточнения
модели КУ;
·
определение
количественных значений сетевых характеристик коммуникационного узла, которые
являются базовыми понятиями при определении производительности вычислительной
сети.
Измерять характеристики для любого КУ можно только
в реальном времени выполнения программных функций.
Данное исследование позволит оценивать характеристики
целого класса КУ, основанного на базе универсального компьютера с
соответствующим программным обеспечением.
Разработана методика, экспериментального
определения сетевых характеристик КУ,
включающая в себя следующие этапы:
·
Обоснование
состава параметров в модели.
·
Обоснование
состава измеряемых параметров в модели.
·
Выбор
инструментальных средств и их параметров настройки.
·
Настройка
инструментальных средств.
·
Сбор «сырых»
измеренных параметров.
·
Обработка
измеренных параметров для получения параметров модели.
Для проведения экспериментов используется протокол
межсетевых управляющих сообщений ICMP
(Internet Control Message Protocol), который формирует команда PING, рассматриваемую как тестовую транзакцию при
проведении эксперимента.
v
В соответствии с
п.1 Плана экспериментов необходимо:
- провести
серию экспериментов по трассировке событий пользовательского уровня (на примере
выполнения команды ping), используя программное средство Linux Trace Tookit 0.9.5a(LTT).
№ п/п |
Что необходимо сделать |
Что получаем в результате проведения эксперимента |
1.1 |
загрузить
ядро linux-ltt. |
При
прохождении команды ping: 1.
отображен граф событий 2.
анализ процессов 3.
поток событий, с указанием временных отметок 4.
результаты трассировки записаны в файл. |
-
выполнить анализ процессов:
-зафиксировать
поток событий при трассировке:
-построить
граф событий:
зафиксировать
фрагмент файла результатов работы LTT
---------------------------------------------------------------------------------------------------------
######################################################################
Event Time PID Length Description
######################################################################
Process
1,075,049,346,986,941 0 16 WAKEUP
PID :
Sched change
1,075,049,346,986,942 1937 19 IN : 1937;
Syscall exit 1,075,049,346,986,944 1937 7
Syscall entry 1,075,049,346,986,958 1937 12
SYSCALL :
File system
1,075,049,346,986,959 1937 20 WRITE : 1;
Timer
1,075,049,346,986,986 1937 17 SET
TIMEOUT :
---------------------------------------------------------------------------------------------------------
где приняты следующие
обозначения:
Event – имя
зафиксированного события (функции);
Time – временная
отметка (указывается в микросекундах);
PID – идентификатор
текущего процесса;
Length – длина зафиксированного события;
Description –
описание вызова зафиксированного события (функции).
v
В соответствии с
п.2 Плана экспериментов необходимо:
Для
более глубокого изучения процессов, происходящих в ядре ОС Linux провести серию экспериментов используя программное
средство Kernprof 2.5.
№ п/п |
Что необходимо сделать |
Что получаем в результате проведения эксперимента |
2.1 |
загрузить
ядро linux-kernprof |
1. единый
файл, содержащий перечень уникальных функций вызываемых в ядре ОС Linux для серии экспериментов 2. установлена
взаимосвязь между функциями ядра |
-
зафиксирован фрагмент файла результатов работы Kernprof
#############################################################################
Flat profile:
Each sample counts as 1e-05 seconds.
% cumulative
self self total
time seconds seconds calls
us/call us/call name
84.49
0.60 0.60 huft_build
8.02 0.65 0.06
6527 8.70 8.79
exit_notify
1.66 0.67 0.01 pm_send
1.63 0.68 0.01 read_zero
0.38 0.68 0.00
10240 0.27 0.27 zlib_inflate_flush
. . .
Call graph (explanation follows)
granularity: each sample hit covers 4 byte(s) for 0.00% of 0.71 seconds
index % time self children
called name
5439180 huft_build [1]
[1] 84.5
0.60 0.00 0+5439180 huft_build [1]
#############################################################################
Kernprof позволяет получить список вызываемых в ядре функций,
то есть исследовать уровень ядра.
-
установить взаимосвязь между функциями ядра (фрагмент файла):
В результате проведенных экспериментов выявлен список
уникальных функций, вызываемых в
ядре ОС Linux при исследовании команды PING Количество функций ≈ 690 .
Таким образом, «детализированная» модель исследована с
точностью до выполнения элементарных функций ядра.
v
В соответствии с
п.3 Плана экспериментов необходимо:
Для
обеспечения универсального рассмотрения всего исполняемого пространства ОС Linux, т.е.
уровней пользовательского и ядра, использовать DProbes совместно с Linux Trace Toolkit. На примере выполнения команды ping
убедиться, что происходит срабатывание в Dprobes
зондов и зафиксировать все события в выходном файле LTT.
№ п/п |
Что необходимо сделать |
Что получаем в результате проведения эксперимента |
3.1 |
загрузить
ядро linux-ltt-dp |
1. получен
файл «сквозной» трассировки пользовательского уровня совместно с уровнем ядра
ОС Linux в формате LTT. |
3.2 |
разработать
алгоритм скрипта для проведения экспериментов LTT совместно с Dprobes |
|
3.3 |
разработать
и исполнить скрипт для проведения экспериментов |
Поток событий при трассировке
LTT
совместно с DProbes:
###########################################################################################
Event Time PID Length Description
###########################################################################################
Event creation
1,146,143,245,356,705 N/A 391 NEW
EVENT TYPE : /usr/src/linux/vmli;
CUSTOM EVENT ID : 23
/usr/src/linux/vmli 1,146,143,245,356,718 N/A 75 01 00 38 00 FB 07 00 00
07 00 FE 00 5E 0F 00 00 00 00 00 00
10 00 E0 C0 13 C0 14 CB 97 96 14 C0 0D C2 50 44 6C 71 05 00 74 72 61 63 65 64
61 65 6D 6F 6E 00 00 00 00 00
Syscall exit 1,146,143,245,356,722 N/A 7
/usr/src/linux/vmli 1,146,143,245,356,766 N/A 75 01 00 38 00 FB 07 00 00
07 00 B7 00 5E 0F 00 00 00 00 00 00
10 00 B0 66 11 C0 C4 BF 84 93 10 C0 0D C2 50 44 9D 71 05 00 74 72 61 63 65 64
61 65 6D 6F 6E 00 00 00 00 00
Trap entry
1,146,143,245,356,773 N/A 13 TRAP : page fault; EIP : 0x400F6110
/usr/src/linux/vmli 1,146,143,245,356,781 N/A 75 01 00 38 00 FB 07 00 00
07 00 E9 00 5E 0F 00 00 00 00 00 00
10 00 A0 B4 12 C0 DC EC 7B 67 11 C0 0D C2 50 44 AC 71 05 00 74 72
/usr/src/linux/vmli 1,146,143,245,356,795 N/A 75 01 00 38 00 FB 07 00 00
07 00 24
#############################################################################################
В
поле Event Description информация
выводится в шестнадцатеричной системе счисления, в том случае, если LTT
зафиксировало событие ядра. Если же
трассировщик зафиксировал событие пользовательского уровня – описание данного
поля будет соответствовать стандартному для LTT.
Приведем пояснения поля Event Description (зафиксировано событие ядра):
Обязательная часть – первые
12 байт.
1,2 – facility_id
(идентификатор процесса)
3,4 – len (длина поля)
5,6,7,8 – mask (маска)
9,10 – major (мажор)
11,12 – minor (минор)
41-56 – имя процесса (z - строка).
v
В соответствии с
п.4 Плана экспериментов необходимо:
Разработать
программу для преобразования полученного файла, содержащего перечень уникальных
функций вызываемых в ядре ОС Linux для
серии экспериментов в файл, с описанием точек зондирования. Программа должна
создать входной файл для программного средства dprobes при его использовании совместно с LTT.
№ п/п |
Что необходимо сделать |
Что получаем в результате проведения эксперимента |
4.1 |
разработать
формат файла программы с описанием
точек зондирования. |
1. файл с описанием точек зондирования probes.rpn. |
4.2 |
разработать заголовок
файла программы зондов |
|
4.3 |
определить
точки зондирования |
|
4.4 |
разработка
программы mkprobes |
Фрагмент файла с описанием
точек зондирования
// *** Заголовок файла ***
name="/usr/src/linux/vmlinux" // имя
модуля, в который "вставляем" зонд
modtype=kernel // kmod | user //тип
модуля ядро/модуль ядра/польз. модуль
Vars=0 //число
переменных
gvars=0 //число
глобальных переменных
major=7 //главный код
точки зондирования
id=0
//идентификатор программы зондов
logmax=1024 //максимальное число
байт
jmpmax=256 //максимальное число
переходов и циклов
//чтобы гарантировать, что система не зависнет
logonfault=no //будет производится
запись в журнал при
//ошибочной\ невыполненной команде
// *** Определения точек
зондирования ***
address=_alloc_pages //название функции
opcode=0x89c1
//код операции
minor=1 //второстепенный
код точки зондирования
max_hits=0x7fffffff
//точка зондирования будет заблокирована после
//данного количества совпадений
Exit
//завершения обработчика зондов с сохранением
Входными данными для начала
работы программы mkprobes:
·
файл, содержащий
список уникальных функций ядра (List690.txt ), в
котором на каждой строчке одно имя функции, сформированный в результате
проведения серии экспериментов
·
файл дампа ядра Linux (dump.txt), полученный с помощью команды objdump.
По завершении работы mkprobes сформирует файлы:
·
файл probes.rpn – файл с описанием точек зондирования, т.е. входной
файл для dprobes
·
файл errors.txt – файл с
названиями функций, которые не были обнаружены в дампе ядра
v
В соответствии с
п.5 Плана экспериментов необходимо:
Разработать
программу для обработки и представления data - файлов (полученных при проведении
экспериментов LTT и Dprobes)
№ п/п |
Что необходимо сделать |
Что получаем в результате проведения эксперимента |
5.1 |
Разработка
алгоритма работы программы AnalysisD2T (укрупненная схема) |
1. преобразованное
поле Description из hex-формата в текстовый вид для data-
файлов 2.
расчет времен отправки (), в сети (), получения () команды ping. 3. рассчитать
по полученным значениям времен , , интенсивности (БПП) - отправки, - передачи в сети, - отправки команды ping. 4.
диаграмма, отображающую процесс работы команды ping 5.
вызываемые в ядре ОС Linux
функции
(при прохождении команды ping) разделены на три группы, 1– группа общих функций, 2 – группа функций,
участвующих при получении и 3 – группа функций, участвующих при отправке
команды ping. 6. полученные
при обработке результаты сохранены в
отдельный файл. |
5.2 |
Разработка
алгоритма работы программы AnalysisD2T(обработка data - файла) |
|
5.3 |
анализ формат строки
поля Description
|
|
5.4 |
Обработка
data-файла |
Для расчета времен отправки (tAB), в сети (tBC), получения (tCD), необходимо
проанализировать путь, который проходит команда ping.
Точки A и D соответствуют моментам первого и последнего появления событий
с процессом ping.
Точки B и C
соответствуют LTT-событиям “SO SEND” и “SO RECEIVE”,
соответственно, сообщающих о посылке и о приеме команды ping.
Входные данные:
n
Filename – имя
обрабатываемого data-файла.
Выходные данные:
n txt-файл – результат преобразования (имеет то же имя, что
и у входного файла, отличается только расширением);
n rep-файл –
отчет, содержащий информацию о том, какие функции встретились в исходном файле
(data - файле), какие из них участвовали при посылке ping’а и какие при его приеме (имеет то же имя, что и у
входного файла, отличается только расширением).
n
b-файл –
содержит обобщенные данные по проведенным экспериментам (список функций)
Начальное состояние программы
(главное окно).
Фрагмент входного файла:
#############################################################################
Event Time PID Length Description
...
/usr/src/linux/vmli 1,146,147,640,178,988 3806
75 01 00 38 00 FB 07 00 00 07 00 6E 02 DE 0E 00 00 00 00 00
00 10 00 F0 8C 25 C0 10 00 84 92 10 C0 38 D3 50 44 2B
BB 02 00 70 69 6E 67 00 6C 6C 00 00
00 00 00
00 00 00
00
Socket
1,146,147,640,178,992 3806 16
SO; CALL : 16; FPM(FD) : 3
Socket
1,146,147,640,179,004 3806 16
SO SEND; TYPE : 3; SIZE : 64
/usr/src/linux/vmli 1,146,147,640,179,034 3806
75 01 00 38 00 FB 07 00 00 07 00 3F 00 DE 0E 00 00 00 00 00
00 10 00 50 A9 25 C0 73 00 17 9E 25 C0 38 D3 50 44 59
BB 02 00 70 69 6E 67 00 6C 6C 00 00
00 00 00
00 00 00
00
/usr/src/linux/vmli 1,146,147,640,179,064 3806
75 01 00 38 00 FB 07 00 00 07 00 9E 01 DE 0E 00 00 00 00 00
00 10 00 90 C7 25 C0 B8 C6 2C FF 26
#############################################################################
Фрагмент файла результата преобразования
#############################################################################
Event Time PID Length Description
...
/usr/src/linux/vmli 1,146,147,640,178,988 3806
75 Process: ping; major:
7; minor: 622
(function: sys_socketcall)
Socket
1,146,147,640,178,992 3806 16
SO; CALL : 16;
FPM(FD)
: 3
Socket
1,146,147,640,179,004 3806 16
SO SEND; TYPE : 3;
SIZE : 64
/usr/src/linux/vmli 1,146,147,640,179,034 3806
75 Process: ping; major:
7; minor: 63 (function: alloc_skb)
/usr/src/linux/vmli 1,146,147,640,179,064 3806
75 Process: ping; major:
7; minor:
414 (function: memcpy_fromiovecend)
...
#############################################################################
Фрагмент файла отчета
#############################################################################
Работа процесса ping: 96.3 %
Интервалов: 2
1) [ 640160750 ,
640179610 ]
2) [ 640180802 ,
640192662 ]
SO SEND: 640179004 мкс
SO RECEIVE: 640179468 мкс
tAB = 18254
мкс µAB = 54.78 1/с
tBC =
464 мкс µBC = 2155.17 1/с
tCD = 13194 мкс µCD
= 75.79 1/с
____________________________________________________
N OTHER
OUT IN NAME
1 X
X X _alloc_pages
2 X
- - __block_commit_write
3 X
- - __block_prepare_write
...
#############################################################################
Вид главного окна после
обработки файла
Диаграмма, отображающий
работу процесса ping
Список функций ядра:
В рамках данного исследования разработана и успешно
опробована методика экспериментального определения сетевых характеристик
производительности вычислительной сети.
Разработанная методика используется для
проведения сравнительных исследований работы модулей ТСР и IP.