BC/NW 2013: №1 (22):3.1
РАЗРАБОТКА МОДЕЛЕЙ ДЛЯ ОЦЕНКИ ПРОИЗВОДИТЕЛЬНОСТИ ПРОКСИ-СЕРВЕРА
Л.И. Абросимов, М.Д. Крамаренко
Введение
Возрастающий объем мультимедийного трафика, информация которого обрабатывается в реальном времени, требует согласования интенсивности трафика с производительностью вычислительной сети.
В соответствии с предложенной концепцией [1] вычислительная сеть (ВС) - это техническая система, содержащая компьютеры, соединенные коммуникационными устройствами и каналами связи, которая обеспечивает дистанционное выполнение информационно-вычислительных работ пользователей.
ВС являются сложными системами, поэтому эффективность их функционирования невозможно оценить одной величиной, и необходимо использовать набор характеристик. К основным характеристикам эффективности функционирования ВС следует отнести: производительность, надежность, конфидициальность обслуживания и стоимость.
Производительность вычислительных сетей
Производительность ВС как системы, обслуживающей пользователей, должна оцениваться общим количеством информационно-вычислительных работ, которые выполняют все устройства, входящие в состав ВС.
Информационно-вычислительные работы, выполняемые ВС, отличаются большим разнообразием, которое определяется количеством пользователей, их требованиями и возможностями устройств, составляющих ВС.
Производительность устройств, выполняющие обработку в ВС, определяется техническими и программными средствами. К параметрам, характеризующим производительность технических средств ВС, обычно относят: тактовую частоту процессора, время выполнения операции сложения, время выполнения регистровой операции, время обработки эталонных запросов.
К параметрам, характеризующим производительность программных средств, обычно относят: количество операций, скорость выполнения программы, частоту использования программы.
К параметрам, характеризующим производительность каналов связи, относят скорость передачи данных.
Из изложенного становится понятным что основная проблема оценки производительности ВС состоит в необходимости выявления и формирования основных параметров, которые влияют на производительность ВС и имеют количественную оценку, а также вывод расчетных соотношений, позволяющих рассчитывать требуемые показатели производительности ВС.
Следовательно, для определения производительности ВС необходимо создание модели, содержащей набор параметров, отражающих особенности функционирования ВС с точки зрения ее производительности.
Для описания производительности ВС необходимо определить единицу обработки.
В процессе дистанционного обслуживания на абонентском компьютере формируется заявка с запросом на обработку. Коммуникационные устройства (КУ) и каналы связи (КС) обеспечивают доставку сообщения с запросом на обработку. Далее обслуживающий компьютер обрабатывает полученную заявку и формирует сообщение с результатами обработки, которые по каналам доставляются в абонентский компьютер.
Обработка заявки в каждом компьютере производится в соответствии с программой обслуживания, заданной абонентом (например, видом обработки, оговоренным в списке меню). В соответствии с типом программы для обработки заявки компьютер выполняет определенное количество вычислительных операций.
Обработка сообщения коммуникационными устройствами и в каналах связи в первую очередь зависит от объема сообщения, измеряемого, например, в битах.
Вычислительные сети выполняют функции передачи и обработки данных и осуществляют преобразование заявки в сообщение и наоборот. Для обозначения функционально связанных заявок и сообщений будем использовать термин транзакция, который определяется двумя параметрами: объемом данных и количеством вычислительных операций, необходимыми для обработки. Следовательно, в качестве обслуживаемых единиц работы, определяющих производительность ВС, будем рассматривать транзакции различных типов.
Для обработки транзакции в компьютере и в коммуникационном устройстве требуется выделение вычислительного ресурса на время выполнения необходимого количества вычислительных операций.
Таким образом, обработку транзакции любой формы можно характеризовать инвариантной характеристикой - временем нахождения транзакции в обслуживающем узле.
Обслуживающий узел - это модель устройства ВС, свойства которого описываются параметрами и соотношениями, которые соответствуют моделям систем массового обслуживания транзакций с очередями.
Возможные направления перехода транзакций с выхода обслуживающего узла на вход последующего узла отображаются ориентированными дугами.
Для обработки в обслуживающем узле каждой транзакции рассматриваемого типа может потребоваться в течение определенного временного интервала использование соответствующих технических и программных средств, например, создать процесс или запустить подпрограмму. Такие единицы обработки, временно сосредотачивающие ресурсы узла для обработки транзакции рассматриваемого типа, назовем элементами обслуживающего узла .
При обработке транзакций в обслуживающих узлах ВС, может происходить изменение объемов, типов и количества транзакций. Таким образом, описание всего разнообразия средств, составляющих ВС и предоставляющих транзакциям свои ресурсы на какой-то интервал времени обслуживания, можно представить как различные наборы элементов множеств , (), входящих в состав узлов
В практической работе оценку производительности осуществляют как пользователи, так и администраторы ВС.
Производительность ВС с точки зрения пользователя должна характеризовать скорость обработки транзакции рассматриваемого типа. С точки зрения администратора ВС производительность ВС должна отражать способность всех ресурсов ВС обрабатывать транзакции с оговоренной скоростью обслуживания.
В качестве единицы измерения производительности может использоваться как время, в течение которого обрабатывается транзакция, так и интенсивность, оценивающая количество транзакций, поступивших и обработанных в единицу времени.
Однако, следует отметить, что наличие в ВС транзакций различных типов может приводить к неоднозначности этих оценок. Поэтому для рассматриваемой ВС, должны быть известны: состав, связи и характеристики обслуживающих узлов, а также зафиксировано, какие абоненты инициируют транзакции, какого типа и по каким маршрутам движутся транзакции.
Наличие разных потребностей и применение различной степени декомпозиции при описании процессов обработки транзакций в ВС приводит к необходимости использования нескольких оценок производительности ВС, к которым в первую очередь можно отнести следующие:
- производительность элементов каждого узла ВС ( ),
- производительность узла ВС,
- комплексную производительность всех узлов ВС ( U),
- рабочую производительность ВС,
- пиковую производительность ВС,
- предельную производительность ВС для рассматриваемого типа транзакций при пиковой нагрузке.
Производительность элементов ВС оценивается набором интервалов времени {}, которые затрачивает каждый элемент каждого обслуживающего узла при обработке транзакции соответствующего типа.
Производительность узла ВС оценивается:
- математическим ожиданием времени , которое затрачивает каждый обслуживающий узел при обработке транзакции соответствующего типа,
- интенсивностью обработки каждым обслуживающим узлом транзакции соответствующего типа.
Комплексная производительность ВС оценивается:
- набором математических ожиданий времени {}, которые затрачивают наборы обслуживающих узлов при обработке транзакции каждого рассматриваемого типа,
- набором интенсивностей {} обслуживающих узлов , обрабатывающих транзакции каждого рассматриваемого типа. Комплексная производительность фактически характеризует способность ВС обслуживать транзакции одного типа при полном отсутствии внешнего трафика.
Рабочая производительность ВС оценивается:
- набором математических ожиданий времени , которые затрачивает соответствующий набор обслуживающих узлов ВС при обработке транзакции каждого рассматриваемого типа (при известном соотношении типов транзакций, составляющих рабочий трафик),
- набором интенсивностей обработанных транзакций каждого рассматриваемого типа соответствующим набором обслуживающих узлов ВС при известном соотношении типов транзакций, составляющих рабочий трафик.
Пиковая производительность ВС оценивается:
- набором математических ожиданий времени , которые затрачивает соответствующий набор обслуживающих узлов ВС при обработке транзакций каждого рассматриваемого типа при известном соотношении типов транзакций, составляющих пиковый трафик нагрузки,
- набором интенсивностей обработанных транзакций каждого рассматриваемого типа соответствующим набором обслуживающих узлов ВС при известном соотношении типов транзакций составляющих пиковый трафик нагрузки.
Предельная производительность рассматриваемого типа транзакций при пиковой нагрузке оценивается:
- набором математических ожиданий времени , которые затрачивает при обработке транзакций каждого рассматриваемого типа соответствующий набор обслуживающих узлов ВС при известном соотношении типов транзакций, составляющих пиковый трафик нагрузки, и предельной нагрузке в одном из обслуживающих узлов ВС.
- набором интенсивностей обработанных транзакций каждого рассматриваемого типа соответствующим набором обслуживающих узлов при известном соотношении типов транзакций, составляющих пиковый трафик нагрузки, и предельной нагрузке в одном из обслуживающих узлов ВС.
Прокси-сервер как объект исследования
ВС объединяет в своем составе различные устройства: серверы, коммуникационные устройства, абонентские компьютеры, которые имеют технические и функциональные особенности. Следовательно, в множестве U узлов, моделирующих устройства ВС, можно однозначно выделить подмножества:
U, U,
где – подмножество узлов, моделирующих серверы;
- подмножество узлов, моделирующих коммуникационные устройства;
- подмножество узлов, моделирующих абонентские компьютеры.
Прокси-серверы соответствуют узлам , входящих в подмножество ( ) и выполняющих коммуникационные функции, используя стандартизированные протоколы.
Прокси-сервер – служба (комплекс программ) в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам. [2]
В качестве прокси-сервера может выступать ЭВМ, работающая в сети. Как правило, компьютерный прокси-сервер является базовым серверным процессом.
Клиентский компьютер имеет настройку конкретной программы или операционной системы, в соответствии с которой все сетевые соединения по определенному набору протоколов совершаются не на IP-адрес сервера (ресурса), а на IP-адрес прокси-сервера.
При необходимости обращения к любому ресурсу по требуемому протоколу, клиентский компьютер открывает сетевое соединение с прокси-сервером (на нужном порту) и совершает обычный запрос, как если бы он обращался непосредственно к ресурсу.
Распознав данные запроса, проверив его корректность и разрешения для клиентского компьютера, прокси-сервер, не разрывая соединения, сам открывает новое сетевое соединение непосредственно с ресурсом и делает тот же самый запрос. Получив данные (или сообщение об ошибке), прокси-сервер передаёт их клиентскому компьютеру.
Таким образом, прокси-сервер является полнофункциональным сервером и клиентом для каждого поддерживаемого протокола и имеет полный контроль над всеми деталями реализации этого протокола, имеет возможность применения заданных администратором политик доступа на каждом этапе работы протокола.
Ключевыми типами прокси-серверов, которые важны при оценке производительности, являются: пересылающие (forward proxies); прозрачные (transparent proxies); кеширующие (caching proxies); обратные (reverse proxies).
Пересылающие прокси-серверы всегда относительно ограничены в терминах сетевой скорости по отношению к своим пользователям из-за более медленного WAN-соединения (соединения с глобальной сетью), которое обычно отделяет пересылающий прокси-сервер от реального контента в Интернете.
Прозрачные прокси-серверами, которые не осведомляют пользователей в прямой форме о том, что они участвуют в доставке данных.
Кеширующие прокси-серверы сконфигурированы на повторное использование кешированных образов контента, когда это доступно и возможно. Когда кешированная ранее часть контента недоступна, то производится ее выборка и использование в контенте, но также с попыткой ее кэширования.
На рис. 1 отображен типичный пересылающий и кеширующий прокси-сервер.
Рис.1. Фрагмент ВС, использующий пересылающий и кеширующий прокси-сервер
Прокси-сервер является сложным аппаратно-программным комплексом, представляющим собой специализированную ЭВМ. Для уточнения технических параметров рассмотрим аппаратную составляющую ЭВМ, необходимую для работы в сети. Необходимым минимумом для работы в сети являются: материнская плата, процессор, оперативная память, сетевой интерфейс, жесткий диск, которые характеризуются паспортными техническими характеристиками. Для определения производительности ЭВМ важнейшими характеристиками являются тактовая частота f процессора и емкость С оперативной памяти ЭВМ. Длительность выполняемых операций измеряется в тиках.
Выполнение функций обслуживания транзакций, поступающих по сети, обеспечивается совместной работой аппаратных и программных средств. Программные средства ЭВМ включают в свой состав операционную систему (ОС) и прикладное программное обеспечение (ПО). Для работы ЭВМ с внешними устройствами используются программы–драйверы, которые можно рассматривать как программы, входящие в ОС. Производительность ЭВМ, работающая в составе ВС, определяется реализацией r ОС и стеком s используемых протоколов, входящих в состав ОС.
Функциональные модели прокси-сервера
Построение функциональной модели позволит:
Во-первых, разработать математические модели в виде расчетных соотношений, позволяющих использовать характеристики производительности {}, элементов каждого узла , входящего в подмножество , для определения интенсивности обработки каждым обслуживающим узлом транзакции соответствующего типа.
Во-вторых, провести экспериментальные исследования по определению численных значений вероятностно-временных характеристик прокси-сервера, характеризующих его производительность, а именно, наборы интервалов времени {}, которые затрачивает каждый элемент , учитывающих особенности ОС при выполнении сетевой обработки и технические характеристики аппаратной реализации.
В-третьих, разработать математические модели, содержащие расчетные соотношения, позволяющие использовать характеристики производительности прокси-сервера при определении производительности ВС в целом.
Настоящая статья посвящена решению первой задачи.
Базовая функциональная модель прокси-сервера
Функции ВС в полном объеме определяются эталонной моделью взаимодействия открытых систем (ЭМВОС), в которой выполняемые ВС функции разбиты на семь уровней: прикладной, представительный, сессионный, транспортный, сетевой, канальный и физический. При построении базовой функциональной модели прокси-сервера в соответствии с ЭМВОС в качестве элементов каждого узла будем рассматривать функции соответствующих уровней. Таким образом, фрагмент ВС, состоящий из абонентского компьютера, прокси-сервера и сервера данных, может быть представлен, как показано на рис. 2, функциональной моделью. Прокси-сервер моделируется узлом , который включает в свой состав набор из следующих элементов:
- элемент, выполняющий функции сетевого уровня;
- элемент, выполняющий функции транспортного и сеансового уровней;
- элемент, выполняющий функции представительного и прикладного уровней.
Анализ свойств функциональных уровней ЭМВОС показывает, что в процессе функционирования ВС происходит обмена транзакциями с интенсивностью между элементами и соответствующих узлов и обмена транзакциями.
Рис. 2. Базовая функциональная модель фрагмента ВС
При этом, в элементах каждая транзакция преобразуется в один или несколько сегментов, а в элементе каждый сегмент преобразуется в один или несколько пакетов. Для каждого типа транзакций можно ввести коэффициент мультиплексирования m, который определяется типом транзакции, последовательностью обработки транзакции элементами узла и математическим ожиданием количества n вложенных фрагментов.
При последовательности обработки транзакции - - в узле (на рис.2 снизу - вверх) имеем:
– математическое ожидание количества кадров (к) в пакете (п);
- математическое ожидание количество пакетов (п) в сегменте (с);
– математическое ожидание количества сегментов (с) в транзакции (т).
Тогда численные значения коэффициентов мультиплексирования m определяются соотношениями:
= 1/ ; = 1/ ; = 1/ (1)
При последовательности обработки транзакции - - в узле (на рис.2 сверху - вниз) значения коэффициентов мультиплексирования m определяются соотношениями:
= ; = ; = (2)
При оценке производительности прокси-сервера коэффициент мультипликации позволяет определять интенсивности потоков транзакций , сегментов , пакетов и кадров .
Учитывая соотношения (1) можно записать:
= ; = ; = (3)
Учитывая соотношения (2) можно записать:
= ; = ; = (4)
Производительность каждого элемента оценивается интервалом времени , в течение которого осуществляется обработка транзакции или ее компонента (сегмента, пакета, кадра). При взаимодействии трех узлов , , в фрагменте ВС, представленном на рис. 2, осуществляется обмен транзакциями, между парами узлов: - , - , - , - .
Рассмотрим взаимодействие узлов - , - . Точками A, B, G, H отмечены ключевые точки функционирования элементов узла , моделирующих работу прокси-сервера.
· Точка А – представляет точку функционирования элементов , в которой, прикладная программа передает сегмент транзакции стеку сессионного и транспортного протоколов,
· Точка В – представляет точку функционирования элементов , в которой пакет сегмента транзакции, обработан сетевым протоколом, драйвером сетевого интерфейса (СИ) и подготовлен к передаче по линии связи.
· Точка G – представляет точку функционирования элементов , в которой кадры, доставленные по линии связи, передаются от СИ на обработку сетевому протоколу.
· Точка Н – это точка, в которой сегмент транзакции после обработки стеком сессионного и транспортного протоколов передает элементу , обработанные данные на верхний, прикладной уровень.
Точки E, F, D, C представляют соответственные точки внутри абонентского узла .
При анализе выявляется неоднозначность оценки производительности узла , а именно, для взаимодействия - производительность + = , а для взаимодействия - производительность + = . При этом неоднозначность повышается, если рассматривать совместное функционирование узлов , ,
Изложенные результаты анализа показывают, что использование в базовой функциональной модели функциональных уровней ЭМВОС в качестве элементов затрудняет построение адекватной модели функционирования прокси-сервера, так как
1) не позволяют учесть коэффициенты мультиплексирования {m}, которые могут различаться как по направлению передачи, так и по типу транзакцй;
2) не позволяет учесть различный набор функций при отправлении и получении фрагментов транзакций;
3) не позволяет учитывать особенности различных сетевых и транспортных протоколов.
4) не позволяют однозначно идентифицировать местоположение точек входа и выхода элементов.
Детализированная функциональная модель прокси-сервера
Детализированная функциональная модель прокси-сервера разработана для устранения недостатков базовой функциональной модели.
Реализация функций ЭМВОС в существенной степени определяется ОС. Чтобы повысить детализацию анализа функций ЭМВОС, необходимо конкретизировать класс исследуемых ОС.
В качестве сетевого ПО прокси-сервера исследуются ОС на базе Linux, которая входит в широкий класс UNIX подобных ОС, составляющих базис ОС, для которых справедлива детализированная функциональная модель. Следует отметить, что современные тенденции разработки ПО склоняются к разработке свободного программного обеспечения, основу которого составляют UNIX подобные системы. Причем появляющиеся новые ОС в основном строятся на основе ядра ОС Linux, например Android. Наиболее показательным является ОС JUNIOS, разработанная компанией Juniper Networks на основе 4-ой ветки свободной ОС FreeBSD для производимого Juniper Networks сетевого оборудования.
В прокси-сервере концептуально состав функций ЭМВОС аналогичен ОС Linux. Однако при разработке ОС Linux использовался язык C(Си) и как следствие процедурная парадигма программирования. Таким образом, каждая функция ЭМВОС реализуется набором функций ОС Linux.
В составе ОС Linux содержится порядка 6 тыс. функций, обеспечивающих сетевую обработку пакетов и/или сегментов. Наиболее распространенные функции ОС Linux приведены в [3].
На рис. 3 в качестве примера приведена реализация одной из функций ЭМВОС набором взаимодействующих функций ОС Linux, представленный в виде алгоритма.
Рис. 3 Пример реализации одной из функций ЭМВОС набором функций ОС Linux.
Рассмотрим подробнее, как функции ОС участвуют в обработке сетевых пакетов.
При обработке пакетов можно выделить группы функций, осуществляющих прием и передачу сетевых пакетов.
Прием сетевых пакетов
Второй уровень: канальный (например, Ethernet, точка G на рис. 2)
Сетевое устройство предварительно выделяет несколько записей sk_buff для приема. Количество выделяемых записей задается для каждого устройства. Обычно, адреса пространств данных этих записей являются адресами области памяти DMA устройства. Обработчик прерывания устройства заполняет необходимыми данными поля sk_buff. До появления механизма NAPI прием осуществлялся с помощью функции netif_rx(). В NAPI прием состоит из двух фаз:
1. из обработчика прерывания, драйвер устройства просто вызывает функцию netif_rx_schedule() и завершает выполнение прерывания. netif_rx_schedule() добавляет устройство в очередь опроса и устанавливает программное прерывание NET_RX_SOFTIRQ.
2. После установки программного прерывания NET_RX_SOFTIRQ ksoftirqd вызывает функцию net_rx_action(), которая инициирует опрос устройства с помощью виртуального метода. Метод опроса выполняет действия по управлению буферами характерные для устройства, вызывает netif_receive_skb() для каждой записи sk_buff, по необходимости выделяет новые записи sk_buff и заканчивается вызовом функции netif_rx_complete ().
netif_receive_skb() определяет каким образом передать запись sk_buff верхним уровням.
1) netpoll_rx () вызывается, для поддержки API Netpoll;
2) вызов обработчиков протокола ETH_P_ALL (для tcpdump)
3) вызов функции handle_ing() для входной организации очередей
4) вызов функции handle_bridge () для мостов;
5) вызов функции handle_macvlan () для виртуальной LAN;
6) вызов обработчика пакетов, зарегистрированного для обработки протоколом третьего уровня определенного типом пакета.
Обработчики пакетов вызываются функцией deliver_skb(), которая использует виртуальный метод протокола для обработки пакета.
Третий уровень: сетевой (протоколы IPv4, ARP)
Пакеты ARP обрабатываются с помощью функции arp_rcv(). Она обрабатывает информацию ARP, сохраняет его в КЭШе и, если необходимо, посылает ответ. В последнем случае для ответа выделяется новая запись sk_buff (с новым пространством данных).
Пакеты протокола IPv4 обрабатываются с помощью функции ip_rcv (). Она разбирает заголовки, проверяет на корректность, посылает ICMP ответ или при необходимости сообщение об ошибке. Она также ищет адрес получателя, используя функцию ip_route_input(). В зависимости от данных в записи sk_buff могут вызываться функции:
· ip_mr_input() вызывается для широковещательных адресов передачи.
· ip_forward() вызывается для пересылки пакетов по адресу назначения для которого имеется маршрут.
· ip_local_deliver () вызывается, если эта машина является пунктом назначения. Здесь собираются дейтаграммные фрагменты.
Четвертый уровень: транспортный (протокол TCP)
Обработчик сетевого протокола для TCP - tcp_v4_rcv (). Большая часть кода занимается соблюдением протокола TCP, установкой соединений, управлением потоками, и т.д.
Полученный пакет TCP может содержать подтверждение получения ранее посланного пакета, которое в свою очередь может вызвать дальнейшую посылку пакетов (tcp_data_snd_check ()) или для подтверждений (tcp_ack_snd_check ()).
Передача поступившего пакета верхнему уровню происходит в функциях tcp_rcv_established() и tcp_data_queue(). Если пользовательский процесс уже ожидает прибытия данных, то данные будут немедленно скопированы в пространство пользователя, используя функцию skb_copy_datagram_iovec(). Иначе, sk_buff будет приложен к одной из очередей сокета и будет скопирован позже.
Наконец, функции приема вызывают виртуальный метод сокета sk_data_ready для того, чтобы сигнализировать, что данные доступны. Это пробуждает ожидающие процессы.
Пятый уровень: Уровень соединения (сокеты и файлы)
Есть три системных вызова, которые могут получать данные от сети:
· read (чтение данных в память из дескриптора файла)
· recvfrom (чтение данных в память из сокета)
· recvmsg (чтение составного сообщения из сокета)
Все эти вызовы в конечном счете заканчиваются вызовом функции__sock_recvmsg(), который вызывает security_sock_recvmsg (), для проверки разрешений и затем передает сообщение следующему уровню, используя виртуальный метод сокета recvmsg. [linux foundation]
Передача сетевых пакетов
Пятый уровень модели ЭМВОС: сессионный (сокеты и файлы)
Есть три системных вызова, которые могут послать данные по сети:
· write (данные из памяти в дескриптор файла)
· sendto (данные из памяти в сокет)
· sendmsg (составное сообщение в сокет)
Все они, в конечном счете, вызывают функцию __sock_sendmsg(), которая вызывает функцию security_sock_sendmsg() для проверки разрешений и затем передает сообщение следующему уровню, используя виртуальный метод сокета - sendmsg.
Четвертый уровень: Транспортный (протокол TCP)
tcp_sendmsg для каждого сегмента в сообщении выполняет следующие действия:
1. находит запись sk_buff в которой ещё осталось свободное место(используется последняя запись если в ней есть свободное место или выделяется новая запись, если места нет;
2. копирует данные из пространства пользователя в пространство данных структуры sk_buff (вероятнее всего для копирования используется механизм DMA и как следствие используется пространство ядра ОС, которое также является DMA пространством); копирование происходит при помощи функции skb_add_data ();
a. буферное пространство предварительно выделяется для каждого сокета. Если в буфере заканчивается свободное место, то передача прекращается: данные остаются в пространстве пользователя, пока буферное пространство не станет снова доступным (или функция немедленно возвращает ошибку, если передача была неблокирующей).
b. Размер выделяемой памяти под sk_buff равен максимальному размеру сегмента(МРС). МРС может изменяться во время соединения, а так же может быть изменена с помощью настроек пользователя.
c. Сегментация (или соединение отдельных записей) производится на этом уровне. Независимо от того, какие действия выполнялись над буфером sk_buff, его содержимое станет единым TCP сегментом. Однако, сегменты могут быть фрагментированы далее на сетевом уровне.
3. Активируется очередь TCP; пакеты посылаются при помощи функции tcp_transmit_skb () (может вызываться неоднократно, если существуют другие активные буферы).
4. tcp_transmit_skb() формирует заголовок TCP (для заголовка было зарезервировано место при выделении памяти для sk_buff). Далее сформированный пакет копируется для передачи сетевому уровню. Передача управления сетевому уровню производится с помощью виртуальной функции queue_xmit .
Третий уровень: Сетевой (протокол IPv4)
1. ip_queue_xmit() выполняет маршрутизацию (если необходимо) и создает заголовок IPv4;
2. nf_hook() вызывается в нескольких местах, чтобы выполнить фильтрование пакетов ( наприм. брандмауэр, NAT...). Этот крюк может изменить дейтаграмму или отказать её в обслуживании.
3. Принятые решения по маршрутизации отражаются на объекте назначения (dst_entry). Этот объект назначения получает IP-адрес назначения дейтаграммы. Непосредственно для перенаправления дейтаграммы вызывается виртуальный метод перенаправления объекта dst_entry.
4. sk_buff передается функции ip_output();
5. ip_output () выполняет пост маршрутизационное фильтрование; если необходимо, из-за сетевой фильтрации, переназначает дейтаграмму новому получателю; если необходимо производит фрагментацию дейтаграммы на пакеты и наконец, направляет её на устройство вывода.
· Если это возможно, при фрагментации используются существующие буферы фрагментов. Это происходит, когда пересылается уже фрагментированный входящий IP пакет. Буферы фрагментов - специальные объекты типа sk_buff, указывающие в тот же самый участок данных (не требуется копии);
· если буферы фрагментов не доступны, выделяются новые объекты sk_buff с новым пространством данных и данные копируются в новые буферы;
· необходимо отметить, что TCP уже удостоверяется в том, что пакеты меньше, чем MTU, поэтому обычно фрагментация не требуется.
6. Вызов функции вывода устройства для вывода структуры данных осуществляется с помощью вызова виртуального метода. Обычно вызывается функция dev_queue_xmit. Здесь же производится оптимизация пакетов с известным маршрутом (hh_cache).
Второй уровень: канальный (например, Ethernet)
Основной функцией ядра ОС на канальном уровне является планирование пакетов на отправку. Для этого Linux использует абстракцию порядка обслуживания в виде очереди (структура Qdisc).
Функция dev_queue_xmit помещает запись sk_buff в очередь устройства, используя виртуальный метод qdisk->enqueue.
· Если необходимо (в случае, когда устройство не поддерживает фрагментацию данных) данные линеаризуются в sk_buff. Для этого требуется копирование.
· Устройства, которые не поддерживают Qdisc (например, обратная петля) вызывают непосредственно функцию dev_hard_start_xmit().
· Существуют несколько политик планирования Qdisc. Основной и наиболее используемый является pfifo_fast, которая использует три приоритета.
Очередь передачи устройства немедленно вызывается с помощью функции qdisc_run(). Она в свою очередь вызывает функцию qdisc_restart(), которая берет запись skb из очереди, используя виртуальный метод qdisc->dequeue. Определенные дисциплины организации очередей могут задерживать посылку пакетов, не забирая skb и вместо этого устанавливая qdisc_watchdog_timer(). Когда таймер истекает, вызывается netif_schedule() для начала передачи.
В конечном счете sk_buff посылается и удаляется из Qdisc с помощью функции dev_hard_start_xmit (). Если посылку не удается выполнить, skb повторно ставится в очередь и вызывается netif_schedule (), для планирования повторной передачи.
netif_schedule() устанавливает программное прерывание, которое вызывает net_tx_action(), при выполнении NET_TX_SOFTIRQ демоном ksoftirqd. net_tx_action() вызывает qdisc_run() для каждого устройства с активной очередью.
dev_hard_start_xmit() вызывает виртуальный метод hard_start_xmit для сетевого устройства, перед этим вызвав функцию dev_queue_xmit_nit(), которая проверяет, был ли зарегистрирован обработчик пакетов для протокола ETH_P_ALL. Это обработчик используется сниферами и tcpdump.
Функция hard_start_xmit драйвера устройства сгенерирует одну или более команд сетевому устройству для планирования передачи буфера. Через некоторое время сетевое устройство вернет рапорт об отправке. Рапорт об удачной отправке вызывает освобождение места занимаемого записью sk_buff. Если освобождение sk_buff производится из контекста прерывания, то используется функция dev_kfree_skb_irq(). Таким образом откладывая фактическое освобождение памяти, до следующего выполнения NET_TX_SOFTIRQ. Это позволяет избежать освобождения памяти из контекста прерывания.
Элементы () детализированной функциональной модели
На основании проведенного анализа недостатков базовой функциональной модели и возможностей функций ОС Linux предлагается в детализированной функциональной модели прокси-сервера в качестве элемента рассматривать функцию ОС Linux.
Каждому элементу соответствует время , следовательно, для оценки производительности узла необходимо алгоритм функционирования ОС Linux представить как алгоритм взаимодействия элементов . Для учета особенностей обработки пакета протоколами различных уровней, выделим подмножество элементов (), соответствующих функциям протокола . Каждое из подмножеств в свою очередь состоит из подмножеств элементов, участвующих в обработке пакета на различных стадиях s обработки пакета ( ).
Взаимодействие каждого подмножества элементов определяется алгоритмом , описывающим взаимодействие элементов . Учитывая особенности выполнения алгоритма , можно разделить его на 8 частей - .
На стадии приема (s=1) выполняются - .
- включает элементы канального (2-го) уровня, которые выполняют протоколы , где множество протоколов канального уровня, реализованных в ОС прокси-сервера.
- включает элементы сетевого (3-го) уровня, которые выполняют протоколы , где множество протоколов сетевого уровня, реализованных в ОС прокси-сервера.
- включает элементы транспортного (4-го) уровня, которые выполняют протоколы , где множество протоколов транспортного уровня, реализованных в ОС прокси-сервера.
- включает элементы сессионного (5-го) уровня, которые выполняют протоколы , где множество протоколов сессионного уровня, реализованных в ОС прокси-сервера.
На стадии передачи (s=2) выполняются - .
- включает элементы сессионного (5-го) уровня, которые выполняют протоколы , где множество протоколов сессионного уровня, реализованных в ОС прокси-сервера.
- включает элементы транспортного (4-го) уровня, которые выполняют протоколы , где множество протоколов транспортного уровня, реализованных в ОС прокси-сервера.
- включает элементы сетевого (3-го) уровня, которые выполняют протоколы , где множество протоколов сетевого уровня, реализованных в ОС прокси-сервера
- включает элементы канального (2-го) уровня, которые выполняют протоколы , где множество протоколов канального уровня, реализованных в ОС прокси-сервера
Следовательно, для узла производительность оценивается: кортежем математических ожиданий времени, которое затрачивает каждый обслуживающий узел при обработке протоколом транзакции соответствующего типа, и кортежем интенсивностей обработки протоколом на стадии s транзакции соответствующего типа.
Математические модели прокси-сервера
В детализированной функциональной модели прокси-сервера на стадии s имеем сложный алгоритм с циклами, последовательными и параллельными участками обработки. Для определения вероятностно-временных характеристик каждую из частей - алгоритма можно преобразовать в последовательные цепочки (r=), состоящие из набора элементов , каждому из которых поставлено в соответствие и (где - коэффициент, учитывающий повторяемость выполнения элементов .
Таким образом, время обработки пакета узлом определяется следующим соотношением:
= ()+ () + () + () + +() + () + () + () (5)
В выражении (5) каждое слагаемое соответствует обработке пакета элементами цепочки (r=).
В соответствии с методом контуров [1] в качестве математической модели узла принимаем одноканальную СМО M/M/1/, которая имеет пуассоновский закон распределения потока заявок и экспоненциальное распределение времени обслуживания.
Обработка заявки ОС прокси-сервера состоит из трех стадий. При переходе от одной стадии обработки к другой ОС прокси-сервера может прерываться на выполнение других задач. Так же при различной интенсивности потока заявок может меняться принцип обработки заявок. В связи с этим для описания работы прокси-сервера предложены следующие модели:
· Модель 1 с тремя стадиями обслуживания без прерываний и без приоритетов.
· Модель 2 с тремя стадиями обслуживания с прерываниями и без приоритетов.
· Модель 3 с тремя стадиями обслуживания с прерываниями и с приоритетами.
Исследуем каждую из моделей более подробно, принимая на входе узла интенсивность потока пакетов и принимая:.
Математическая модель 1 узла ,
Модель 1, представленная на рис. 4, достаточно точно описывает работу прокси-сервера при малой интенсивности трафика пакетов .
Тогда для модели справедливы следующие соотношения для интенсивности обслуживания, коэффициента загрузки, количества пакетов в системе (обработка и ожидание в очереди) и время пребывания пакетов в системе при условии :
= 1/ ; = ; = /(1- ) ; = /(1- ) (6)
Рис. 4. Модель1 без прерываний и приоритетов
Математическая модель 2 узла ,
Модель 2, представленная на рис.5, описывает прокси-сервер с возможностью прерывания стадий обслуживания заявок.
Рис. 5. Модель с прерыванием, без приоритетов
На рис. 5 каждая из стадий обслуживания s= пакета прерывается на время обработки другой стадии. Когда происходит прерывание, недообработанный пакет возвращается в очередь, в результате формируется суммарный поток пакетов. При условии получаем следующие соотношения:
= 1/ ; = ; = = ; = /(1- ) ;
= /(1- ) (7)
Математическая модель 3 узла ,
Модель 3 представляет прокси-сервер, в котором каждая из стадий обслуживания пакета имеет собственный приоритет. Модель 3 представлена на рис. 6.
После прохождения пакета каждой из стадий s= приоритет недообслуженного пакета понижается, и он попадает в очередь более низкого приоритета. Для модели 3 при условии получаем следующие соотношения:
= 1/ ; = ; = = ;
= /(1-); = /(1-) (8)
Рис. 6. Модель 3 с прерыванием, c учетом приоритетов
Анализ времени в (8) показывает, что пребывание пакета в первой фазе сокращается, и, следовательно, сокращается число потерянных пакетов, поступающих в прокси-сервер.
Заключение
В статье на основании понятий производительности вычислительных сетей (ВС) исследуется прокси-сервер, как одно из типовых устройств, существенно влияющих на производительность ВС. Предлагаются базовая и детализированные функциональные модели, учитывающие особенности ЭМВОС и операционной системы Linux, на основании которых разработаны математические модели для расчета вероятностно - временных характеристик прокси-сервера, учитывающих типы сетевых протоколов и стадии обслуживания кадров, пакетов и сегментов.
Прокси-сервер выполняет функции сетевой обработки передаваемых данных, однако, аналогичные средства используются также рабочими станциями, серверами и хостмашинами, что существенно расширяет область возможных применений полученных результатов.
Предложенные базовая и детализированная функциональная модели обосновывают состав исходных данных для практического использования предложенных математических моделей, к которым относятся: время {}выполнения функций ОС, коэффициенты {} повторяемости функций ОС, коэффициенты {} мультиплексирования, цепочки - элементов для разных фаз обслуживания.
Приведенный набор параметров определяет задачи проведения статистических исследований, которые выполнены авторами и позволили получить количественные значения, подтверждающие практическую реализуемость разработанных моделей.
Литература
1. Абросимов Л.И. Основные положения теории производительности вычислительных сетей. Вестник МЭИ 2001, №4, с. 70-75
2. Статья «Прокси-сервер» http://ru.wikipedia.org/wiki/Прокси-сервер
3. Сетевой поток данных, обрабатываемый ядром. Network_data_flow_through_kernel http://www.linuxfoundation.org/images/1/1c/Network_data_flow_through_kernel.png