Оригинальная статья: Ferry Boender. Перевод: Азовцев Юрий.
Иногда вам нужно что то скачать из сети, но при этом вы не хотите полностью занимать Internet канал. Возможно вы уже загружаете что то очень важное, или вашим каналом пользуется несколько человек и вы не хотите вести себя эгоистично. Некоторые приложения, например gFTP, wget и bittorrent предлагают встроенные инструменты ограничения скорости входящего/исходящего потока. Но, например, apt-get не имеет таких возможностей.
Trickle – это “шейпер” для интернет канала, работающий как пользовательский процесс. Он позволяет ограничить скорость доступа прикладных программ к Интернет каналу без необходимости накладывания патчей на ядро, каких либо настроек firewall’a либо прав супер-пользователся (aka root) в системе. Trickle может быть запущен в режиме взаимодействия и как отдельный сервис. В режиме сервиса trickle лимитирует скорость использования канала большим количеством пользовательских приложений. В режиме одиночного приложения trickle будет уменьшать скорость доступа к каналу для приложения, которое вы ему явно укажете.
Содержание |
Это наиболее простой способ использования trickle. Запустите trickle с параметрами пропускной способности канала и названием программы, которую вы хотите ограничить.
[todsah@jib]~$ trickle -d 20 -u 20 wget http://www.electricmonk.nl/bigfile trickle: Could not reach trickled, working independently: No such file or directory –12:19:18– http://www.electricmonk.nl/bigfile => `bigfile’ Resolving www.electricmonk.nl… 194.187.77.6 Connecting to www.electricmonk.nl|194.187.77.6|:80… connected. HTTP request sent, awaiting response… 200 OK Length: 51,200,000 (49M) [text/plain] 0% [ ] 180,224 21.83K/s ETA 38:03
В примере мы использовали утилиту wget для демонстрации. На самом деле wget имеет собственные опции ограничения использования пропускной способности канала. Как вы можете видеть, скорость загрузки 21.83K/с. Конечно это не идеальные 20 K/s, но скорость будет варьироваться от 19 до 21 K/s давая в среднем наши 20 K/s. Для более тонкой настроки такого поведения программы вы можете использовать опции -w и -t. Для более подробной информации смотрите manual.
В режиме сервиса trickle может лимитировать пропускную способность канала для группы приложений. Для запуска trickle в данном режиме используйте команду:
[todsah@jib]~$ trickled -d 20 -u 20
В системе будет запщен сервис, ограничивающий скорость доступа программ, запущенных через trickle, до 20 K/s (входящую и исходящую скорости) к интернет каналу. При запуске одной программы через trickle ей будет доступен канал в 20 K/s, для двух – по 10 K/s и т.д. Для примера мы можем запустить три сессии wget:
[todsah@jib]~/temp$ trickle wget http://www.electricmonk.nl/bigfile 1% [ ] 933,888 6.66K/s ETA 1:47:17 [todsah@jib]~/download$ trickle wget http://www.electricmonk.nl/bigfile 1% [ ] 720,896 6.65K/s ETA 1:56:59 [todsah@jib]~$ trickle wget http://www.electricmonk.nl/bigfile 2% [ ] 1,228,800 6.64K/s ETA 1:45:00
Скорость загрузка на каждой из сессий будет около 6.6 K/s, создавая в сумме 19.8 K/s. Как и в случае с другими шейперами, может потребоваться несколько секунд для начала ограничения скорости. Это связанно с алгоритмами шейперов, использующихся для определения времени задержки трафика перед передачей или приемом.
Trickle доступен в Debian начиная с версии 3.1 (Sarge) и в Ubuntu с Warty. apt-get install trickle должно сработать “без шума и пыли”.
Trickle не работает с setuid программами. Причиной является игнорирование этими программами функции LD_PRELOAD, что сделано в целях безопасности. Trickle требует обязательного использования этой опции для шейпинга. (по той же причине trickle не работает со статически собранными программами).
Trickle работает лишь с программами, использующими интерфейс socket(2) для передачи и приема данных. Так же он работает лишь с TCP соединениями, но не с UDP.