Журнал LinuxFormat - перейти на главную

LXF119:Trickle

Материал из Linuxformat
Перейти к: навигация, поиск
Hardcore Linux Проверь себя на крутом проекте для продвинутых пользователей

Содержание

Trickle: Контроль трафика в сети

Шашанк Шарма управляет шириной канала, доступного отдельным приложениям, с помощью Trickle и сверкающего острого меча.

Каждому случалось попадать в ситуацию, когда вы на миг останавливались, переносились в прошлое и говорили себе: «Почему я тогда этого не знал?» А если лично вам не случалось, Trickle враз пробудит массу таких воспоминаний. С помощью Trickle можно контролировать скорость входящего и исходящего потока для приложений, чтобы ни одна программа не занимала весь канал. Это поможет вам добиться, чтобы закачки Firefox не мешали загрузке нужного вам файла через FTP.

Управление шириной канала – одна из обычных задач системного администратора, что в крупной корпорации, что в малом офисе. В наше время вряд ли есть те, кто не встречал или хотя бы не слышал жалоб про отдельных пользователей сети, сжирающих всю ширину канала. Необходимость контроля ширины канала для отдельных пользователей в сети понятна всем, но вы можете спросить себя, есть ли реальная необходимость ограничения входящей или исходящей скорости для отдельных приложений. В ответ мало будет сказать «да». Вы по-настоящему оцените Trickle только в той ситуации, когда одно приложение забирает себе весь трафик, превращая жизнь остальных программ в сущий кошмар. В разное время, по разным причинам, приложения способны проявить строптивость и неуступчивость.

Вы наверняка слышали сказку о воине, вступившем на узкий мост, по которому мог пройти только один человек; а на другом берегу стоял другой воин. Способ решить, кто пройдет первым, был либо признать главенство другого, либо вызвать его на бой до первой крови. Конец этой истории зависит от того, какой воин по душе рассказчику, или какой воин больше любит Emacs, чем Vi. Приложения часто попадают в похожую ситуацию, так как мост обычно недостаточно широк для всех приложений, а иногда есть и более двух претендентов на один мост. Знание, как рулить полосой пропускания, разделяя ее между приложениями, сродни обладанию самым сверкающим и острым мечом и несравненным мастерством. Оно к тому же делает вашу кровь прозрачной, и вы никогда не проиграете в битве «до первой крови». Плюс – расширяет мост для всех. Это очень дзен- философское решение, если вас не волнует утеря победной славы в «кровавых» драках.

Сантехник для канала

Если вы работаете на машинах под управлением Fedora или Debian/Ubuntu, для установки Trickle достаточно yum или aptget. Trickle зависит только от одной библиотеки – libevent, и она должна быть у вас уже установлена. Libevent есть в большинстве современных дистрибутивов. Кто желает, может также собрать сей славный ограничитель трафика из исходных кодов, с помощью трио configure, make и make install.

Trickle регулирует скорость, задерживая данные, передаваемые через сокет. Он предоставляет альтернативную версию API сокетов BSD, в результате чего обращения к сокетам перехватываются Trickle. Скорость ограничивается количеством данных, читаемых или записываемых в/из сокета. Trickle умеет работать только на TCP-соединении, и его нельзя применять для управления UDP- потоками вроде DNS.

TCP-соединения тоже подойдут не все. Так как Trickle использует динамическое связывание и загрузку, он работает только с приложениями, поддерживающими динамические библиотеки (Glibc). Статически скомпонованные приложения не совместимы с Trickle. Чтобы определить, годится ли Trickle для регулирования скорости конкретного приложения, обратитесь к команде ldd, она даст вам список всех его внешних библиотек. Например, чтобы узнать, сработается ли Trickle с браузером Epiphany, введите команду

ldd /usr/bin/epiphany | grep libc.so
libc.so.6 => /lib/libc.so.6 (0x00c14000)


Вы можете провести похожий тест для других приложений – KTorrent, KFTPGrabber и т.п. Результат покажет, может ли Trickle управлять скоростью сетевых соединений в этих программах. Таким образом можно даже ограничить ширину канала, доступную команде RPM при установке или опросе пакетов.

Это не трюк, это Trickle

Применяя Trickle, выберите соответствующие скорости входящего и исходящего потока для ограничения приложений. Чтобы заставить Trickle притормозить ваше приложение, не требуется ничего сверхъестественного – просто используйте ключи -d или -u, чтобы задать Trickle входящую и исходящую скорости, дозволенные программе. Например, команда

Trickle -d 20 wget -c http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm

заставит скачиваться RPM-пакет с помощью Wget со скоростью не более 20 Кбит/с. Скептики заметят, что у Wget и без того есть параметр --limit-rate, но пусть уж это будет иллюстрацией моей неспособности придумать пример получше.

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

trickled -d 50 -u 10

Не забудьте подставить сюда ваши собственные значения, поскольку копирование и вставка моих – это не метод. Демон trickled отслеживает все ваши соединения, и коль скоро вы его запустили, уже незачем повторять настройки скорости для Wget, FTP, браузеров и прочего, что использует TCP.

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

[linuxlala@localhost ~]$ ldd /bin/rpm | grep libc.so
 libc.so.6 => /lib/libc.so.6 (0x00c14000)

Допустим, надо ограничить скорость скачивания, доступную RPM, до 5 Кбит/с. Ключом -d это делается так:

Trickle -d 5 rpm

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

rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm

вы сразу отметите снижение скорости.


На вашем месте я сейчас открыл бы терминал и выяснил, сколько приложений можно регулировать с помощью Trickle. Учтите, при фиксации скорости для одной программы, например, браузера, отведенная ширина канала разделяется между всеми одновременно загружаемыми файлами. И я получил этому подтверждение. Ниже мы увидим, что происходит с двумя торрентами, которые я пытался скачать с помощью KTorrent при ограничении на доступную пропускную способность в размере 20 кбит/с.

Если вы думаете, что Trickle только и делает, что настройку скорости выгрузки и скачивания, то ошибаетесь. Этот инструментец позволяет определить приоритеты приложений, и можно также задать параметры сглаживания по времени и по длине. Не пугайтесь, слыша этот жаргон. При сглаживании по времени вы определяете приложению временной интервал для передачи данных. Большее значение приведет к всплескам отправки и приема данных, а меньшее значение обеспечит их гладкую и непрерывную передачу. Задает значение сглаживания по времени (в секундах) ключ -t. Значение по умолчанию равно 5 с. Согласно man-странице Trickled, время сглаживания около 1 с идеально для интерактивных приложений, а от 1 до 10 с – для приложений, передающих большие объемы данных. Кроме сглаживания по времени, можно задать сглаживание по длине, ключом -l.

Постоянные настройки

Как уже упоминалось, определения глобальных скоростей (установление ограничений скорости для всех приложений) делается с помощью команды trickled. Ну, а если нужно определить значения сглаживания по времени и по длине, свои для разных приложений? Для свершения этого геройского подвига обратитесь к файлу /etc/trickled.conf. Когда вы запускаете Trickle, он проверяет, работает ли демон trickled, и применяет параметры, заданные в этом файле, для запущенных программ. Значения параметров, указанные Trickle в командной строке при его запуске, главнее заданных в файле /etc/trickled. conf, и переопределят их.

Каждая секция файла помечена квадратными скобками. Формат прост – но не верьте мне на слово, смотрите сами:

[service]
Priority = <значение>
Time-Smoothing = <значение>
Length-Smoothing = <значение>

Первое, на что вы должны обратить внимание в trickled.conf – это параметр Priority: приоритет, устанавливаемый относительно других служб. Более низкое значение означает больший приоритет. А что это дает, спросите вы? Ну, например, службы с более высоким приоритетом получают большую долю канала, чем прочие. Кроме того, на базе приоритетов trickled создает собственную очередь, благодаря которой можно подключиться к службе, даже если полоса вся занята. Вот моя копия этого файла; она вам покажет, как это переводится на реальный мир.

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 1
[www]
Priority = 2
Time-Smoothing = 5
Length-Smoothing = 10
[ftp]
Priority = 8

Здесь SSH имеет наивысший приоритет, чтобы удаленные сессии не тормозили, а параметры сглаживания заботятся о том же. Ничто так не злит человека, как спотыкание при просмотре сайтов, поэтому WWW – следующий в цепочке приоритетов. Наконец, я мало качаю через FTP, поэтому он имеет самый низкий приоритет; параметров сглаживания я не указал, и Trickle будет использовать здесь значения по умолчанию.

В чем засада?

Мы охватили почти все, что умеет Trickle, и я догадываюсь, что впечатлил вас. Но полна ли эта картина? Может ли инструмент, выполняющий столь важную функцию, реально не иметь недостатков? Увы, нет. И крупнейший его недостаток – то, что он уже много лет не видел новой версии. Но тут беспокоиться нечего: это общая черта многих проектов с открытым кодом, их разработчики частенько стеснены во времени на решение запланированных задач.


По- моему, главная беда Trickle – его неспособность динамически корректировать заданные скорости. Вот вы установили загрузку для Firefox на 20Кбит/с, а потом решили увеличить или уменьшить скорость. Придется закрыть Firefox, сбросить скорость, а затем запустить Firefox. И не только Firefox: Trickle вообще не допускает динамической коррекции скорости. Эта функция какое-то время была в списке на добавление, и она также отмечена в разделе 6 документа, опубликованного по адресу http://monkey.org/~marius/Trickle/Trickle.pdf.

В зависимости от ваших требований и занятий, вы, возможно, захотите исследовать работу Trickle с чем-нибудь вроде VNC Viewer. Как описано выше с командой ldd, Trickle неплохо сыграется и с ним. Считайте это нашей подсказкой начать эксперименты.

Еще одна проблема Trickle в том, что он ладит не со всеми приложениями. С тех пор как я прикипел к окружению рабочего стола Gnome на моей машине с Fedora, у меня был установлен клиент BitTorrent Transmission, помимо KTorrent, хорошо работающего с Trickle. Как и KTorrent, Transmission тоже позволяет внутренне ограничить скорость загрузки/отдачи торрента. При установке скорости входящего потока для Transmisson с помощью Trickle все безупречно. А вот если ограничить исходящий, то скорость входящего тоже упадет. Например, при установке скорости выдачи 10 кбит/с скорость загрузки так и не выйдет за эти рамки. Для установки скорости изнутри Transmission выберите торрент из списка и щелкните на кнопке Torrent Info. Теперь устанавливайте скорость загрузки и выдачи на вкладке Options [Параметры].

Одинокий бизон?

Отнюдь нет! Ограничителей пропускной способности полно, и у каждого свой набор функций и капризов. Один из таких инструментов – Wondershaper. Как и Trickle, он тоже работает по типу Bash, как утилита командной строки и все такое. Тем, кто не находится в сети, или не имеет несколько сетевых интерфейсов, Wondershaper, вероятно, ни к чему. Его преимущество – способность ограничивать трафик на конкретном интерфейсе. Так, при желании ограничить скорости загрузки и выгрузки на eth2, скомандуйте wondershaper eth2 downspeed upspeed. В отличие от Trickle, где настройки теряются при закрытии терминала (только если вы запустили приложение с помощью команды trickle -d), для выключения функции формирования трафика используется wondershaper clear [сетевой_интерфейс]. В нашем случае надо задать интерфейс eth2.

Wondershaper есть в репозиториях Ubuntu и Debian. Пользователи других дистрибутивов могут скачать сжатый tar-архив и распаковать скрипт wshaper из него.

Благодаря способности контролировать передачи на сетевом интерфейсе, Wondershaper вдохновил многие другие ограничители ширины канала. Большинство из них, как Trickle и Wondershaper, не видели новой версии много лет, но каждый имеет своих приверженцев. LXF

Шаг за шагом: Тормозим загрузки KTorrent

Шаг 1

  • 1 Запускаем KTorrent
    Вы можете запустить KTorrent из меню Прило­жения > Интернет или из терминала, командой ktorrent. В зависимости от способа запуска, скоро­сти нужно установить заранее. Если вы не хотите устанавливать скорость перед каждым запуском, можете назначить для KTorrent псевдоним.

Шаг 2

  • 2 Задаем скорость торрента
    Если у вас несколько торрентов в очереди загруз­ки, доступная ширина канала будет делиться меж­ду ними. По моему опыту могу сказать, что чаще всего один из торрентов стопорится, а другой сжи­рает весь канал. Раз в несколько минут, на какие­-то секунды, полоса разделяется почти поровну.

Шаг 3

  • 3 Лимиты скачивания
    Максимальную скорость скачивания/закачива­ния для каждого торрента можно задать и в са­мом KTorrent. При ограничении скорости торрента до величины, меньшей, чем ему выдал Trickle, ос­татки заберет другой торрент. Когда вы добавляе­ те новый торрент, в первые пару минут он получит скорость менее 1 Кбит/с, а потом другие торренты начнут делиться с ним.
Персональные инструменты
купить
подписаться
Яндекс.Метрика