суббота, 21 февраля 2009 г.

Математика в ИТ

На днях, во время встречи с одним из Заказчиков мне задали вопрос, начало которого было привычным, а вот продолжение - не совсем. Скажу сразу, меня поставили в тупик и я взял тайм-аут для размышлений.
Вопрос звучал так: "У нас есть канал с известными характеристиками, есть приложение, установленное как локально, так и опубликованное на сервере Citrix XenApp. Когда у пользователя на его локальном устройстве будет прорисован экран после запроса информации?"
Приложение транзакционное, соответственно время реакции локального приложения посчитать достаточно просто. Оно равно - количество транзакций * на задержку в канале передачи данных. Естественно здесь принимается допущение о том, что размер транзакции меньше размера сетевого пакета и временем отрисовки графической подсистемой можно пренебречь.
После обдумывания на досуге и совместного мозгового штурма с моим коллегой Николаем Шадриным, у нас получилась вот такая интересная формула:
Время вывода на экран локального устройства экранной формы опубликованного приложения = (Глубина цвета*Размер экрана по вертикали*Размер экрана по горизонтали * Степень сжатия * Процент новой информации)/8 *(Задержка в канале/Размер окна при сетевой передаче + 1/Ширина полосы пропускания)
А теперь попробуем пояснить, что есть что:
  • Глубина цвета - измеряется в битах, является характеристикой экрана опубликованного приложения, обычно 8, 16 или 24.
  • Размер экрана по вертикали - размер экрана отображаемого приложения в пикселях по вертикали.
  • Размер экрана по горизонтали - размер экрана отображаемого приложения в пикселях по горизонтали.
  • Степень сжатия - коэффициент, который введён, чтобы учитывать технологии сжатия, применяемые при передачи информации с помощью протокола ICA. Изменяется от 1 (никакого сжатия вообще), до 0 (недостижимый идеал сжатия). Мы для своих расчётов брали практический коэффициент - 0.1. Т.е. изначальная информация сжимается в 10 раз.
  • Процент новой информации. Известно, что протокол ICA передаёт только изменившуюся информацию на экране, а не весь экран целиком. Коэффициент также меняется от 1 - абсолютно новая экранная форма, до 0 - никаких изменений на экране не происходило.
  • Задержка в канале - сек, то время, которое необходимо пакету пройти от точки А в сети до точки Б и обратно.
  • Ширина полосы пропускания - это скорость передачи в канале, измеряем в байтах в секунду.
  • Размер окна при сетевой передачи - сетевой параметр TCP Window Size, определяющий количество принятых байт, до момента отправки подтверждения.

А теперь давайте рассмотрим это на примерах:


Наши исходные данные:

  • Размер экрана - 1024*768
  • Задержка в канале - 0.2 сек
  • Полоса пропускания - 6400 байт/сек, это приблизительно 50 кбит/сек
  • Глубина цвета - 24 (второй вариант - 8)
  • Степень сжатия - 0.1 (данные из практики)
  • Процент новой информации - 1 (для варианта 2 - 0.05 - это значит, что на экране обновилось 5% информации)
  • Размер сетевого пакета = 1460 байт (msdn.microsoft.com)
  • Размер окна = 17520 байт (msdn.microsoft.com)

В результате получаем следующие данные


Глубина цвета 24 и 100% новой информации:

Объём данных = 1024 * 768 * 24 * 0.1 * 1 / 8 = 235930 байт

Количество пакетов = 17520 / 1460 = 12

Время = (235930 * 0.2 / (12* 1460) + 235930/6400) = 39.56 сек


Глубина цвета - 8 бит и 100% новой информации:

Объём данных = 1024 * 768 * 8 * 0.1 * 1 / 8 =78643 байт

Количество пакетов = 17520 / 1460 = 12

Время = (78643 * 0.2 / (12* 1460) + 78643/6400) = 13.19 сек


Глубина цвета 24 и 5% новой информации:

Объём данных = 1024 * 768 * 24 * 0.1 * 0.05 / 8 = 11797 байт

Количество пакетов = 17520 / 1460 = 12

Время = (11797 * 0.2 / (12* 1460) + 11797/6400) = 1.98 сек


Глубина цвета - 8 бит и 5% новой информации:

Объём данных = 1024 * 768 * 8 * 0.1 * 0.05 / 8 =3932 байт

Количество пакетов = 17520 / 1460 = 12

Время = (3932 * 0.2 / (12* 1460) + 3932/6400) = 0.66 сек

Вот мы и получили, данные, на которые можно опираться при начальных расчётах. Конечно практика это критерий истины, и поэтому я рекомендую проверять все такие выкладки на практических тестах.
Удачи.