RSS
 

Плохо ездит ? Проверь железо и почитай буквари!

06 Apr

Последнюю неделю боремся с рядом моментов у заказчиков, которые можно описать фразой “А у меня загрузка не поднимается больше X мбит/с”. Или – “вечером появляется 2% потерь при достижении порога в Y мбит/с”.

Результаты разбирательств прогнозируемы. Причины проблем у заказчиков:

  • перегрузка “роутера” на базе FreeBSD. Ресурсы кушает pf, не хватает буферов, прерывания  и т.п. Результат – потери, деградация качества канала.
  • промежуточное железо. Ставит заказчик ноутбук на интерфейс – все пучком. Включает свою инфраструктуру – чудеса. Причина – на трассе стоит свитч вендора “икс”, который почему-то не свитчит с необходимой производительностью.
  • false negative. Мерять канал пингом или mtr для получения объективных данных – неверно в корне. Тот-же iperf – тоже не особая панацея, мы ведь живем не в зоопарке, не в замкнутой экосистеме. Реальный Интернет – это нечто другое, нежели лаба с парой свитчей и роутеров.

Подробнее о последнем. Если хочется померять мегабиты – можно сходить на speedtest.net, конечно. Но этот сервис предназначен для ориентировочной проверки скорости для бродбенд-пользователей, скорости между компьютером клиента и сервером speedtest’а. Здесь возникает масса моментов – антивирус на компьютере пользователя, операционные системы и настройки ip-стэка на сервере и у клиента, загруженность тестового сервера (мы, кстати, свой kharkiv.speedtest.net перевели на nginx и получили 20-25% прироста в скорости! Только заменой вэб-сервера!). Далее помним о зависимости расстояния (читай – времени, т.к. есть свои естественные задержки в связи со скоростью света и привнесенные задержки на каналообразующем и маршрутизирующем оборудовании) и TCP Window Size. Подробнее см. отличный материал на Wikipedia. Как ни крути, 10Мбит/с получить единичным TCP-соединением с достаточно удаленного источника  (а именно поверх TCP ходят протоколы FTP и WWW – ведь именно скачкой/закачком обычно пытаются измерять) НЕВОЗМОЖНО в принципе.

То есть, если нужно померять более-менее реально, запускаем пару-тройку десятков закачек с разных серверов. Можно это сделать на FreeBSD с помощью fetch или curl:

# fetch -o /dev/null http://remote.server.tld/iso/big_DVD_image.iso
# curl -o /dev/null http://another.server.tld/iso/big_DVD_image.iso

Далее – о мнимых “потерях”. Запустим любимый в народе mtr на, допустим, yahoo.eu (извините, вырвалось :)):

Мнимые потери в mtr

Видим “страшные потери” на каком-то хопе. Звоним своему провайдеру и начинаем его ругать. А причина проста – там (как и у нас, собственно) стоит Juniper с отличной конструкцией в конфигурационном файле, в разделе filter:

term icmp {
from {
protocol icmp;
icmp-type [ echo-request echo-reply unreachable time-exceeded ];
}
then {
policer small-bw-policer;
accept;
}

term trace-route {
from {
protocol udp;
destination-port 33434-33523;
}
then {
policer small-bw-policer;
accept;
}
}

…где small-bw-policer выглядит как:

policer small-bw-policer {
  if-exceeding {
    bandwidth-limit 128k;
    burst-size-limit 15k;
  }
  then discard;
}

Умеющим читать на английском вышеизложенные куски конфига понятны. Неумеющим читать – конфиг нам говорит, что если общее количество трафика icmp или udp (на диапазон портов), предназначенного маршрутизатору, будет больше 128К, трафик уничтожается, а mtr показывает “мнимые” потери.

А проверить по-настоящему просто:

# ping -s 1500 -q -c 100 yahoo.eu
PING yahoo.eu (68.180.206.184): 1500 data bytes
--- yahoo.eu ping statistics ---
100 packets transmitted, 100 packets received, 0% packet loss
round-trip min/avg/max/stddev = 217.482/220.701/224.686/2.490 ms

То есть для корректного результата мы делаем icmp-эхо-запросы на хост, который нам интересен и смотрим на результат. И тогда в ряде случаев не прийдется паниковать и звонить провайдеру с сообщением, что “все пропало”.

Вышеизложенным я не в коей мере не хочу сказать, что у нас все идеально, что во всем мире интернет работает, как часы. Даже с учетом достаточно высокой надежности, к которой мы стремимся, интернет сложен и зависим от каждого – причем не только от каждого оператора/провайдера, но и от конечного пользователя или подключенного в интернет устройства. На моей памяти за последние два месяца были две или три достаточно неприятные проблемы со связностью у наших аплинков, причем это были проблемы вне их зоны влияния. Из-за роста нагрузки мы переводим бэкбон на Extreme – каталисты близки к потолку по надежной производительности и иногда выдают чудеса, о которых как-нибудь в другой раз. Просто хотелось бы видеть грамотную диагностику проблем. И не забываем о модели OSI :)

 

Tags: ,

Leave a Reply

You must be logged in to post a comment.

  1. nucleo

    апреля 7, 2009 at 21:51

    Time to live exceeded in transit – такие вообще все могут уничтожаться, а в соответствующем хопе будет 100% потерь.