Научная статья на тему 'Построение имитационной модели сетевого контроллера канального уровня'

Построение имитационной модели сетевого контроллера канального уровня Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
195
25
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СИСТЕМА МАССОВОГО ОБСЛУЖИВАНИЯ / КАНАЛЬНЫЙ УРОВЕНЬ / СЕТЕВОЙ КОНТРОЛЛЕР / ТОЧКА-ТОЧКА / QUEUING SYSTEMS / LINK LAYER / DATA CONTROLLER / POINT-POINT

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Яблоков Евгений Николаевич

Статья посвящена первичной оценке характеристик сетевых контроллеров на канальном уровне. Рассматривается методика построения моделей сетевого контроллера с помощью имитационного моделирования на основе систем массового обслуживания.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

BUILDING A SIMULATION-BASED DATA LINK LAYER CONTROLLER MODEL

The article is devoted to a preliminary assessment of the characteristics of the data link controllers. The described method allows to make the data link controller model using simulation-based queuing systems.

Текст научной работы на тему «Построение имитационной модели сетевого контроллера канального уровня»

УДК 004.716

ПОСТРОЕНИЕ ИМИТАЦИОННОЙ МОДЕЛИ СЕТЕВОГО КОНТРОЛЛЕРА

КАНАЛЬНОГО УРОВНЯ

© 2017 Е.Н. Яблоков

Санкт-Петербургский государственный университет аэрокосмического приборостроения

Статья поступила в редакцию 21.03.2017

Статья посвящена первичной оценке характеристик сетевых контроллеров на канальном уровне. Рассматривается методика построения моделей сетевого контроллера с помощью имитационного моделирования на основе систем массового обслуживания.

Ключевые слова: система массового обслуживания, канальный уровень, сетевой контроллер, точка-точка

Канальный уровень является вторым уровнем из семи модели OSI для построения вычислительных сетей. Этот уровень представляет собой механизм, который позволяет передавать данные между соседними узлами глобальной сети или между узлами в локальном сегменте той же сети. Канальный уровень описывает различные функции и методы для передачи данных между объектами в сети и так же предоставляет средства для обнаружения и исправления ошибок (если такая задача ставится), которые могут возникнуть на физическом уровне при передаче данных.

Попробуем рассмотреть систему канального уровня как систему массового обслуживания (СМО). В любую систему канального уровня поступает полезная информация, которая передается через ее структуру. В качестве полезной информации системы канального уровня рассматривается информация, которая поступает из более высоких уровней и передается посредством канального уровня и выдается на более высокий уровень, или информация, которая генерируется на канальном уровне и так же передается на более высокий уровень. Данную информацию можно рассматривать как поток заявок, которые генерируются по определенным законам и являются входным потоком для СМО канального уровня. Необходимо учитывать, что данные потоки могут быть как с одним приоритетом, так и с разными приоритетами обслуживания.

В зависимости от типа устройства канального уровня разрабатываемая система канального уровня может являться как СМО с ожиданием - при наличии некоторого физического буфера на входе системы, так и системой с отказами (при отсутствии такого буфера или в зависимости от конфигурации создаваемого оборудования). На практике моделирование устройств канального уровня осуществляется редко. Практически всегда модель сетевого контроллера встраиваются в модели более высокого уровня не на основании конкретных математических расчетов, а на основании предположений о

Яблоков Евгений Николаевич, научный сотрудник. Е-шаП: [email protected]

пропускной способности более высоких уровней, совершенно игнорируя данные, которые ходят только на канальном уровне и которые не надо передавать выше. Широко распространена идея, что издержки канального уровня, такие как размеры памяти, которая требуется для хранения данных, пропускная способность внутренних каналов или блоков (например, подсчет контрольной суммы), не влияют на пропускную способность и аппаратные издержки. Важная функция управления потоков совершенно не учитывается на подобных моделях. Поэтому построение моделей канального уровня необходимо.

При разработке СМО сетевого контроллера канального уровня можно поставить задачу расчета следующих характеристик:

- среднее время прохождения данных через контроллер (важно для данных, которые критичны ко времени)

- средняя пропускная способность контроллера, т.е. сколько данных возможно передать через контроллер

- средняя длина очереди - для расчета глубины буферов FIFO, используемых в сетевом контроллере

Данные характеристики являются основными и должны быть рассчитаны до начала создания устройства в железе, так как они смогут дать общее представление о характеристиках, которыми будет обладать конечное аппаратное устройство.

Модель будет строиться из расчета характеристик сетевого контроллера для канала точка-точка. Все данные, которые поступили в сетевой контроллер, должны быть переданы, потеря данных или отказ от обработки внутри контроллера не допускается. Сетевой контроллер канального уровня состоит из 2 основных частей: приемная часть, передающая часть и коммуникационная среда, через которую осуществляется передача данных. Два сетевых контроллера осуществляют передачу с использованием коммуникационной среды. В подавляющем числе случаев используется дуплексный режим передачи, когда передача данных идет в обе стороны (рис. 1).

Рис. 1. Простая схема сетевого контроллера канального уровня канала точка-точка

Как видно из рис. 1, осуществляется параллельная передача в оба направления. Данные могут передаваться с одним или с различными приоритетами. Сетевой контроллер может или передавать данные о готовности (контроллер с управлением потоком), или быть готовым принять любое количество данных (контроллер без управления потоком). Контроллеры без управления встречаются сильно реже и используются при низкой интенсивности данных. Представим обмен канального уровня в качестве модели на основе СМО. В общем случае модель контроллера канального уровня представляет

собой (рис. 2) устройство для передачи заявок различных типов. Данная модель будет отправлять заявки через всю описанную систему. В такой модели часть заявок могут быть более приоритетны, чем другие. Данная СМО описывает канал соединения точка-точка между передатчиком и приемником через коммуникационную среду. Возможность реализации коммуникаций на других структурах не рассматривается, так как современные высокоскоростные протоколы используют исключительно каналы точка-точка. Реализации сетевых контроллеров на других структурах не рассматриваются.

'у, -;п

Очередь Бр |-3>| конаейер171^ ^ ^

Очередь ~|-^ конаейерЗ,

Очередь |-^ к<ывейерБп ^ ^

Выбор заявок на передачу

Задержки коммун II кац ионной среды

Сорта ров ка заявок

-И Буферу ¡¿_шш, Ли

1-^ц за

—>1 еу^, ^

1-< Ц 81-

Рис. 2. Модель сетевого контроллера канального уровня

В этой статье рассмотрены коммуникационные системы на базе непосредственных связей между узлами, определен набор характеристик, существенных для разработки сетевого контроллера, разработана методика оценки данных с точки зрения их применимости для сетевого контроллера. Так как данные не могут не быть обработаны в сетевом контроллере - весь сетевой контроллер будем рассматривать как СМО с ожиданием, то есть без отказов. Поток заявок, поступающих в данную СМО, будем считать пуассоновским с учетом аппроксимации Клейнрока [1] и теоремы Джексона [2], которые допускают независимость потока в каждом узле, независимости времени поступления заявки и ее длины от предыдущих заявок, при этом считается, что поток заявок стационарен и время поступления и обслуживания заявок распределены по экспоненциальному закону.

Практически любая система канального уровня представляет собой тот или иной вариант конвейера. Конвейерная обработка может находиться как в приемной, так и в передающей части блока. Если рассматривать конвейер с точки зрения СМО, то конвейер, который состоит из п ступеней, можно рассматривать как многофазную СМО с бесконечными очередями между фазами (рис. 3). Время обработки одной заявки одной фазой конвейера будет зависеть от количества времени, которое будет потрачена на этом этапе конвейера. В этом случае время прохождения заявки через конвейер будет равно сумме затраченного времени на каждом шаге конвейера, по которой формируется интенсивность обработки заявки. Все СМО являются од-ноканальными с бесконечной очередью. Для этого класса СМО выходной поток является пуассоновским.

Входной поток

И

-лз>

-Лп-1>

-}м>

Ц"

Выходной

Рис. 3. Аппаратный конвейер с точки зрения СМО

В данной общей схеме могут передаваться заявки только одного типа (если аппаратный конвейер передает только данные одного типа), и заявки

нескольких типов (если идет передача всех типов данных и разрешений по одному каналу). В общем случае конвейер передает заявки разных типов,

которые могут находится на разных фазах конвейера. Для систем М/М/1 теорема Берга [3] позволяет считать выходной поток так же пуассоновским.

Общий вид конвейера редко используется в аппаратуре. Аппаратные конвейеры чаще всего можно разбить на несколько подтипов, конвейеры с обработкой одного типа данных (или одной заявки), данный тип обработки встречается очень часто, конвейер с одинаковым временем обработки на каждой фазе с возможностью блокирования на последнем этапе, такой тип конвейера используется при подготовке определенного типа данных к передаче. Как пример можно рассмотреть двухфазный конвейер, на первой фазе которого происходит добавление заголовка и подсчет CRC на втором этапе.

Введем следующие обозначения: ТКОНЕ - время прохождения заявки через все стадии конвейера, Ткокв - Для i-й заявки; щонв - интенсивность обработки конвейера, ц^онв - для /-Й заявки; Ts - время прохождения заявки через стадию конвейера s, Tj -- для /-Й заявки; ps- интенсивность обработки заявки стадией конвейера s, |4 - для i-й заявки; LC4 -длина очереди заявок; LCHCT - общее количество заявок в системе. Для расчета характеристик данной СМО можно разделить конвейер на составные части вида А1|В1|1, А2|В2|1 ... AN|BN|1, где каждая стадия конвейера будет представлена отдельной СМО. В этом случае общее время задержки заявки в системе будет равно сумме задержек каждого этапа конвейера, а именно:

^конв = + + I" ^лг

Интенсивность же обработки заявки конвейером будет определяться временем обработки самой медленной заявки

\iKонв = шш(щ,ц2, ....р,,)

Количество заявок, которое находится непосредственно в конвейере, равно количеству ступеней конвейера, количество заявок в очередях не ограничено. В нашем случае мы будем рассматривать эти СМО как М/М/1 [4], так как на практике каждый этап конвейера в сетевых контроллерах определяется физической структурой и все задержки, как и время обработки, можно предположить предварительно. Среднюю задержка заявки на каждом этапе можно рассчитать по формуле:

_ Р Гсист " А(1-р)

Таким образом, задержки для одной конкретной СМО можно рассчитать по этой формуле, как и количество заявок, которые находятся в данной конкретной СМО. Рассчитав задержку каждой СМО можно выяснить общую задержку каждой конкретной СМО всего конвейера для заявки г:

м

^конв ^ ^ ^t» k=1

где М - количество стадий конвейера.

Исходя из вышеизложенного, интенсивность потока входных заявок для конвейерных СМО для

каждой заявки не должна бьпь больше интенсивности обслуживания заявок каждой ступенью конвейера, т.е.

{^конв ^ М-конв

Р40НВ = тш(|4, |4>-■■< Им)

Среднее количество заявок в системе, как и среднее количество заявок в очередях считается как сумма всех заявок во всех стадиях конвейера.

Второй неотъемлемой частью любой системы канального уровня является блок выбора передаваемых данных (или заявок). В зависимости от ситуации - выбор может осуществляться или в абсолютно-приоритетном доступе, или относительно приоритетном доступе, или бесприоритетном доступе. При абсолютно приоритетном доступе все поступающие заявки имеют свой приоритет. Чем выше приоритет канала, тем больше вероятность обработки заявки данного канала. При относительном приоритете некоторая группа, или группы заявок имеют приоритет над другой группой, или группами заявок, внутри группы приоритетов нет. При бесприоритетном доступе все заявки имеют одинаковый приоритет и отправляются последовательно из каждого канала (рис. 4).

Канал 1 -

Канал 2 ->

Канал 3 ->

Канал т ->

Рис. 4. Модель СМО с одним каналом и несколькими заявками

Блок выбора канала изначально будем рассматривать как общий случай блока с приоритетом обслуживания заявок М/С/1, причем с тем свойством, что поступающие заявки делятся на несколько классов различного приоритета, причем 1-й класс имеет наивысший приоритет, 2-й класс—второй по величине приоритет и т. д. Данное доказательство для приоритетного доступа было взято из доказательств для доступа с приоритетом для различных сетевых устройств [5].

СМО с одной очередью, в которой заявки поступают в соответствии с пуассоновским процессом с интенсивностью X, длительности обслуживания заявок имеют экспоненциальное распределение. Предположим, что заявки обслуживаются в порядке поступления, X — длительность обслуживания /-Й заявки, случайные величины (X, Хг, ...) одинаково распределены, взаимно независимы и не зависят от интервалов между моментами поступления. Рассматривая эту систему необходимо учитывать, что Х1, = Е {X} = - - средняя длительность обслуживания;

Выбор

канала

Х2, = Е {X2} - второй момент длительности обслуживания.

Для начала рассмотрим систему, где часть заявок находится в очереди и на вход поступает /-я заявка, в обслуживании находится заявка }, а в очереди некоторое количество заявок. Система обладает следующими характеристиками:

И\ - время ожидания в очереди для /-й заявки; - остаточное время обслуживания в момент поступления /-й заявки. Это означает, что если заявка находится на обслуживании в момент появления заявки /, то равно промежутку времени от этого момента до завершения обслуживания заявки. Если нет заявки, которая обслуживается (т. е. система пуста в момент поступления заявки 1), И ; равно нулю;

Х; - длительность обслуживания /-й заявки V - число требований, которые в очереди при поступлении /-й заявки

Для формирования задержек в очередях для каждой заявки воспользуемся следующей формулой

1-1

Гг=Дг+ £ Х]

Проводя соответствующие преобразования для системы М/С/1, - получаем следующий результат для задержек в системе и очередях. Задержки для заявок к-го приоритета рассчитываются по формуле

W,

Wt=-

R

ожидания в очереди заявки к-го порядка необходимо учитывать приоритеты с номером меньше к, в то время как все заявки с приоритетом больше к игнорируются. В этом случае задержку для данного блока вычисляем по формуле абсолютного приоритета

1 выбр

(¿) С1 - Р1 - Р2-----

(1 - VI - Р2-----Рк)(. 1 -Р1-Р2-----Рк-1)

Как писалось выше, - второй момент длительности обслуживания равен X} = 2 для системы М/М/1.

Задержка коммуникационной среды вычисляются исходя из законов физики. Среду передачи можно разделить на 2 типа кабелей - медный и оптический. Задержка, с которой информация передается в проводах ограничена соответственно скоростью света (в 300 тыс. км/с), что и является предельной скоростью передачи информации. Рассчитаем минимальную задержку в кабеле из расчета задержки на 1 метр:

1 1 1 ~ с ~ 300000000

3,33 • 10"9 = 3,33 нс.

(1 - Pi - Р2-----Рк-i)(l -Р1-Р2-----Рк)

Из данной формулы единственным неизвестным параметром представляется среднее остаточное время дообслуживания. Его можно вычислить графическим способом, где получается

п

1=1

Как итог - среднее время ожидания в очереди будет составлять

wk =---

(i -V1-P2-----Рк-i)(i -Р1-Р2-----Рк)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Как говорилось выше, второй момент длительности обслуживания г-й заявки представляется как X} = Е {X2 }. Для системы M/G/1 расчет может вызвать затруднения, однако, в нашем случае наша система представляет собой СМО M/M/1, и в этом случае XX соответственно равен Х} = 2 для системы M/M/1. Средняя задержка в данном блоке заявки k-го приоритета Тк будет составлять

TLeP = ^- + wk

Теперь рассмотрим вариант, когда вместо относительных приоритетов данный блок использует абсолютный приоритет, то есть заявки с более высоким приоритетом поступают в обслуживание сразу, а заявки с более низким - ждут и дообслужи-ваются после. При вычислении среднего времени

Соответственно - минимальная задержка каждого метра кабеля дает задержку в 3.33 наносекунды. Дополнительно в задержках среды можно учитывать ошибки, которые могут произойти. Пусть - вероятность ошибки, - время обработки ошибки, которое будет затрачено на обработку ошибочной ситуации. В этом случае время, которое будет потеряно на ошибке передачи заявки будет

^ош ^ош^обр

Вероятность возникновения ошибки зависит от физических характеристик коммуникационной среды и в данной работе не рассматривается. Итоговая формула для задержки среды для кабеля, длинной Ь, рассчитывается по формуле: Т = I г + Т

1 сред ^^ 1 ош"

Что касается блока сортировки заявок, - общая задержка /-й заявки считается довольно просто, учитывая, что приемная часть не может

задерживать приходящую информацию, ввиду от-

сутствия очереди, поэтому - в базовом случае -расчет задержки представляется простым значени-

ем в зависимости от количества тактов, потраченных на обработку очередной заявки. Задержка в выходном буфере Твых рассчитывается как СМО М/М/1, которая выводится из описанных выше формул для конвейерной системы. В этом случае интенсивность поступления заявок сохраняется равной изначальной X, а ц интенсивности обработки

задается извне системой, которая забирает данные из очереди. Подводя итог, можно сказать, что общая

задержка любой заявки / в системе будет составляться как сумма полученных задержек при прохождении через систему, а именно как

Т' = Т' 4- Т 4- Т' 4- Т' 4- Т'

1 общ 1 конв 1 1 сред 1 1 выбр 1 1 сорт 1 1 вых-

Максимальная интенсивность потока заявок типа i должна быть меньше интенсивности обслуживания каждого блока

Aj < min(j40HB, Цвыбр. |4ых )'

где рКОНЕЗ - интенсивность обработки заявки блока конвейера, - интенсивность обработки заявки блока выбора заявки г, - интенсивность обработки выходной очереди.

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

Pi +Р2 + Рз + - + Рп < 1,

где р1,р2,рз --Рп ~ коэффициенты использования системы.

Данная формула позволяет высчитать полную среднюю задержку любой заявки, которая рассчитывается для сетевого контроллера и является временем прохоледенил заявки через сетевой контроллер, включая очереди.

Размеры буферов {аппаратные затраты на очередь) для заявок i определяется с помощью формулы Литта

Ni = А^.

Получив среднее число заявок в очередях (или в системе) становится просто рассчитать аппаратные затраты для одного или нескольких FIFO. Средняя пропускная способность зависит от типа самой заявки и количества полезной информации, которая она передает через систему. Если предположить, что количество полезной информации, которая передает заявка /, составляет некоторое число бит и равно bt, то средняя пропускная способность Qi} характеризующая полезную информацию заявки i, которая передается через нашу модель, вычисляется по формуле

А. Ь.

Qi=JT ч

где t-i - период времени, за который идет расчет пропускной способности

Одной из важнейших функций является функция управления потоком. Сетевой контроллер представленный на начальном рис. 2 подходит к сетевым контроллерам без ярко выраженного управления потоком на канальном уровне, - например, для сетевых контроллеров по стандарту Ethernet или AFDX. В этих контроллерах изначально интенсивность потока определяется более высоким уровнем и зависит только от интенсивности

обработки каждого блока модели. Однако большинство сетевых контроллеров используют другие формы управления потоком. Самой сложной системой управления потоком (но одной из самых эффективных) является система так называемого кредитования, где, при обмене данными между сторонами, вторая сторона сообщает первой о том, сколько заявок она может принять. Такой способ управлением поток называется кредитованием. Система кредитования разделяется на 2 типа - абсолютную и относительную. При относительном кредитовании каждый сетевой контроллер хранит у себя количество данных, которое он может отправить. Специальный пакет или флит, который приходит от второй стороны увеличивает это число на определенное значение.

В системе с абсолютным кредитованием сообщение о величине свободных мест в приемном буфере сообщается в абсолютных цифрах. Такие сообщения должны регулярно отсылаться либо в составе других заявок, либо самостоятельной заявкой. Приоритет данных заявок может быть любой. В этом случае используется базовая модель для сетевого контроллера на рисунке 2. Дополнительное ограничение, которое накладывается на заявки такого типа - это количество заявок в системе. Количество заявок, для которого используется абсолютное кредитование, не должно быть больше определенного количества, которое было откредитовано. Соответственно для каждой заявки /, для которой используется абсолютное кредитование, необходимо учитывать формулу Литта, где N( - количество заявок типа i в СМО, которое может находится в данный конкретный момент времени в системе. На заявку i накладывается следующее ограничение

7;

7"' = Т* 4-Т -4-7"* -4-7"* -4-7"*

общ 1 конв сред 1 выбр 1 1 сорт 1 вых

А, < min (Ц™„Е. |4ы&р. lltus)

Последовательно вычисляются интенсивность А( и задержка 7*0'6щ, на основании этого рассчитываются пропускная способность Qt и общая длина очереди ht. Система с относительным кредитованием является еще более сложным случаем для работы сетевого контроллера канального уровня. Модифицируем нашу модель под эту систему кредитования (рис. 5).

Рис. 5. Модель сетевого контроллера с кредитованием

Часть заявок (на рис. 5 это заявки с h+1 до п) используют систему относительного кредитования, где произвольная является самой заявкой, а -разрешающей заявкой на отправку. Построение модели следует следующим дополнительным принципам:

- произвольное разрешение И ; на отправку заявки обладает большим приоритетом, чем сама заявка (однако - может обладать меньшим приоритетом, чем разрешения и заявки другого типа);

- заявка И ; может разрешать отправку сразу п заявок где п больше 0;

- если заявка требует наличия разрешения И то такая заявка формируется только при наличии разрешения в соответствующем буфере, и поток Дн формируется в зависимости от наличия разрешений в соответствующем буфере;

- количество разрешений, которые выдает заявка , которое может находится в системе, ограничено (чаще всего - приемным буфером заявок );

- количество заявок ограничено количеством выданных разрешений заявками ;

- заявка разрешения &, считается обработанной после того, как заявка поступила в канал.

Данный метод предполагает обмен информацией между двумя сторонами. Приведем ряд дополнительных ограничений, которые появятся в данной модели. Так как количество заявок ограничено - то для произвольной поток будет рассчитываться по формуле Литта как 3

Л-Ш ~ Т >

где - количество заявок во всей СМО, -задержка передачи заявки по системе. В стационарном режиме в лучшем случае поток должен быть равен . Если же в результате расчетов задержек на основе приведенных формул получится, что , это означает, что или система креди-

тования неэффективна и ; необходимо увеличивать, что предполагает увеличение физического буфера, так как зависит от этого физического параметра. Так же возможно увеличить время на

обработку заявки , что улучшит аппаратные характеристики устройства например путем снижения внутренней частоты. Если же получится, что , это означает, что либо задержки обработки заявки слишком велики или же (если уменьшение этих заявок невозможно или не требуется), -возможно сокращение количества заявок , а значит - уменьшение размера буфера .

Расчет задержек для всех заявок осуществляется по выведенным формулам для . Размер буфера для заявок без кредитования делает по формуле, выведенными для очередей. Пропускная способность заявок с кредитованием будет определяться из системы для каждого , причем

¿Ri >■

^Asl < min (uShb' Ивыбр' Ивых)

Nm = N^ ,

Tsi nTsi что в итоге дает

f Asl < min (uShb' Ивыбр' 1^вых)

Asi

Хт>

■ < n

где n-количество заявок S;, которое разрешает R£.

Выводы: построенная имитационная модель позволяет сделать расчет вышеозначенных характеристик, таких как средняя задержка передачи, количество буферных элементов и среднюю пропускную способность устройств канального уровня.

СПИСОК ЛИТЕРАТУРЫ:

1. Клейнрок, Л. Теория массового обслуживания, пер. с англ. - М.: Машиностроение, 1979. 432 с.

2. Jackson, R. Oueueing systems with phase type service // OperationalResearch Quarterly. 1954. Vol. 5. Р. 109-120.

3. Burke, P. The output of a queuing system // Operations Research. 1956. Vol. 4.Р. 699-704.

4. Вентцель, Е.С. Исследование операций: задачи, принципы, методология.— М.: Наука. Гл. ред. физ.-мат. лит., 1988. 208 с.

5. Бертсекас, Д. Сети передачи данных, пер. с англ. — М.: Мир, 1989. 544 с.

BUILDING A SIMULATION-BASED DATA LINK LAYER CONTROLLER MODEL

© 2017 E.N. Yablokov

St-Petersburg State University of Aerospace Instrumentation

The article is devoted to a preliminary assessment of the characteristics of the data link controllers. The described method allows to make the data link controller model using simulation-based queuing systems.

Key words: queuing systems, link layer, data controller, point-point

Evgeniy Yablokov, Research Fellow. E-mail: [email protected]

i Надоели баннеры? Вы всегда можете отключить рекламу.