OpenQuality.ru

Качество программного обеспечения

Качество программного обеспечения: в главных ролях

Лента  Радар  Блог  Опыт  
Разум  Видео  Заметки  Эпизоды


Тестирование приложений на медленных каналах связи

В статье о регулировании прохождения пакетов в сети Daniel Berrange описывает интересный опыт тестирования AutoFS. Попытки получить доступ к ресурсам в Бостоне, предпринимаемые из Лондона, заканчивались неудачей в 25% процентах случаев. Еще более обескураживающими были результаты монтирования ресурсов в Лос-Анжелесе: осечка во всех экспериментах.

Даниел выяснил, что причиной такого поведения был кусок кода, в котором “живучесть” удаленного сервера оценивалась по результатам RPC ping с тайм-аутом 100 mc. Время прохождения пакетов между Лондоном и Бостоном составляло 100+/-5mc, что объясняло случающиеся время от времени неудачные попытки монтирования.

Увеличить временной интервал было несложным делом, но Даниел задумался, как организовать надежное тестирование системы в подобных случаях. Ниже описывается способ, предложенный Даниелом (с небольшими добавлениями и комментариями на примере RHEL AS 4).

Задержка пакетов выполняется на основе iptables. В состав iptables входит библиотека libipq, которая позволяет организовать очередь пакетов (с помощью модуля ядра ip_queue) и регулировать задержку их передачи по назначению. Для libipq есть Perl-модуль IPQueue.pm, упрощающий работу с этой библиотекой. Псевдо-код для реализации задержки пакетов выглядит так:

forever
  foreach queued packet
     if queue time > requested delay
        accept packet

  wait for an incoming packet

  add packet to queue

Вот последовательность шагов в реализации этого алгоритма:

1. установить iptables-devel. В случае Red Hat Enterprise Linux AS release 4 Nahant Update 3 это iptables-devel-1.2.11-3.1.rhel4.i386.rpm

2. загрузить необходимые модули ядра (не забыть организовать их автоподключение в случае возможного reboot’a системы):

modprobe iptable_filter
modprobe ip_queue
modprobe ipt_ttl

3. установить perlipq и Time-HiRes

4. запустить Perl-демон delay.pl:
./delay-net.pl 300 > /dev/null
(здесь 300 - период задержки в mc)

5. прописать правило в iptables:
iptables -A INPUT –source 192.168.16.4 -j QUEUE

Пакеты, приходящие с адреса 192.168.16.4, будут передаваться в очередь QUEUE. Демон delay.pl регулирует время их задержки, что легко проверить, выполнив ping с адреса 192.168.16.4 на машину с реализованной задержкой пакетов.

Усложним задачу. Что если мы хотим организовать задержку пакетов между двумя Windows-машинами, на которых работает клиент-серверное приложение? Задействуем Linux-хост в качестве роутера:

1. разрешим перенаправление пакетов на Linux. В /etc/sysctl.conf пропишем:
net.ipv4.ip_forward = 1
и выполним:
sysctl -p

2. на Linux-хосте (192.168.16.3): пакеты, адресованные Windows-станциям (192.168.16.8 и 192.168.16.7), отдавать в очередь QUEUE:

iptables -A FORWARD –destination 192.168.16.8 -j QUEUE
iptables -A FORWARD –destination 192.168.16.7 -j QUEUE

3. на Windows-станциях добавим правила в таблицу маршрутов:

- на первой машине (192.168.16.8): все пакеты, адресованные второй Windows-станции (192.168.16.7), перенаправлять Linux-хосту (192.168.16.3)
route ADD 192.168.16.7 192.168.16.3

- на второй машине (192.168.16.7): все пакеты, адресованные первой Windows-станции (192.168.16.8), перенаправлять Linux-хосту (192.168.16.3)
route ADD 192.168.16.8 192.168.16.3

C помощью tracert можно проверить маршрут пакетов, а ping покажет задержку в их передаче.

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

Отправить в Twitter, Facebook, FriendFeed, ВКонтакте | Опубликовано 09.09.2008 в рубрике "Инструменты"

Комментарии (5)

  1. Автор комментария : Anonymous | September 9, 2008

    netem

    [Ответить]


  2. Автор комментария : StreSS | September 9, 2008

    Смотреть в строну IFB (http://www.opennet.ru/tips/info/1421.shtml) и не мучатся. Куча вкусеностей.

    [Ответить]


  3. Автор комментария : Капитан Аляска | September 9, 2008

    StreSS и Anonymous, спасибо за IFB и netem!

    [Ответить]


  4. Автор комментария : Artour Bakiev | December 8, 2008

    Очень любопытно. Можно ли сделать такое в Windows окружении без привлечения Linux router’а?

    [Ответить]


  5. Автор комментария : Капитан Аляска | December 8, 2008

    Артур, хороший вопрос :) На самом деле, изначально мне это надо было именно в Windows-окружении, но попадались только платные утилиты (сейчас с ходу не вспомню названия) - а это никого не устроило. Задача стояла сделать бесплатно :)

    Иными словами, наверняка это можно сделать и в Windows (и может быть, даже бесплатно), но мне такие решения не попадались.

    [Ответить]



Добавить комментарий

Пожалуйста, исправьте результат: дважды два равно



КРАТКОЕ СОДЕРЖАНИЕ

Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.


ПУТЕВОДИТЕЛЬ

Список всех статей с краткой аннотацией и разбивкой по рубрикам. Открыть карту.

ПОДПИСКА

Доступ к самым интересным материалам по электропочте и RSS. Подробности.

ИЩЕЙКА