Поиск по сайту:

Как ограничить пропускную способность сети, используемую приложениями в системе Linux, с помощью Trickle


Вы когда-нибудь сталкивались с ситуациями, когда одно приложение доминировало над всей пропускной способностью вашей сети? Если вы когда-либо оказывались в ситуации, когда одно приложение съедало весь ваш трафик, то вы оцените роль приложения, формирующего полосу пропускания.

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

Что такое Трикл?

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

Короче говоря, «trickle» позволяет вам контролировать скорость сетевого трафика для каждого приложения, в отличие от контроля для каждого пользователя, который является классическим примером формирования полосы пропускания в среде клиент-сервер и, вероятно, является настройкой, которую мы больше знаком с.

Как работает «Трикл»?

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

Для выполнения этой задачи ручеек устанавливает ограничения трафика на способ отправки и получения данных в сокетах с использованием TCP-соединений. Следует отметить, что, за исключением скорости передачи данных, струйка никоим образом не меняет поведение процесса, который она формирует в любой данный момент.

Чего не может сделать Трикл?

Единственное ограничение, так сказать, заключается в том, что струйка не будет работать со статически связанными приложениями или двоичными файлами с установленными битами SUID или SGID, поскольку для размещения используется динамическое связывание и загрузка. между сформированным процессом и связанным с ним сетевым сокетом. Затем Trickle действует как прокси между этими двумя программными компонентами.

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

Тестовая среда

В этой статье мы объясним, как с помощью струйки ограничить пропускную способность сети, используемую приложениями на сервере Linux.

Для генерации необходимого трафика мы будем использовать ncftpput и ncftpget (оба инструмента доступны после установки ncftp) на клиенте (CentOS сервер – dev1: 192.168.0.17) и vsftpd на сервере (Debian – dev2: 192.168.0.15 ) для демонстрационных целей. Те же инструкции также работают в системах на базе RedHat, Fedora и Ubuntu.

Установка ncftp и vsftpd в Linux

1. Для RHEL/CentOS 8/7 включите репозиторий EPEL. Дополнительные пакеты для Enterprise Linux (EPEL) — это репозиторий высококачественного бесплатного программного обеспечения с открытым исходным кодом, поддерживаемый проектом Fedora и на 100 % совместимый с его дочерними продуктами, такими как Red Hat Enterprise. Linux и CentOS. И trickle, и ncftp доступны из этого репозитория.

2. Установите ncftp следующим образом:

yum update && sudo yum install ncftp		[On RedHat based systems]
aptitude update && aptitude install ncftp	[On Debian based systems]	

3. Настройте FTP-сервер на отдельном сервере. Обратите внимание, что хотя FTP по своей сути небезопасен, он по-прежнему широко используется в тех случаях, когда безопасность при загрузке или скачивании файлов не требуется.

Мы используем его в этой статье, чтобы проиллюстрировать преимущества метода «trickle», а также потому, что он показывает скорость передачи данных в stdout на клиенте, и мы оставим обсуждение того, следует или не следует использовать его для другого Дата и время.

yum update && yum install vsftpd 		[On RedHat based systems]
apt update && apt install vsftpd 	[On Debian based systems]

Теперь отредактируйте файл /etc/vsftpd/vsftpd.conf на FTP-сервере следующим образом:

sudo nano /etc/vsftpd/vsftpd.conf
OR
sudo /etc/vsftpd.conf

Внесите следующие изменения:

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

После этого обязательно запустите vsftpd для текущего сеанса и включите его автоматический запуск при будущих загрузках:

systemctl start vsftpd 		[For systemd-based systems]
systemctl enable vsftpd
service vsftpd start 			[For init-based systems]
chkconfig vsftpd on

4. Если вы решили настроить FTP-сервер в дроплете CentOS/RHEL с ключами SSH для удаленного доступа, вам потребуется защищенная паролем учетная запись пользователя с соответствующим каталогом и права доступа к файлам для загрузки и скачивания желаемого контента ВНЕ домашнего каталога root.

Затем вы можете перейти в свой домашний каталог, введя следующий URL-адрес в браузере. Появится окно входа в систему, предлагающее ввести действительную учетную запись пользователя и пароль на FTP-сервере.

ftp://192.168.0.15

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

Как установить Trickle в Linux

Теперь установите Trickle с помощью yum или apt.

Чтобы обеспечить успешную установку, рекомендуется перед установкой самого инструмента убедиться, что установленные пакеты обновлены (с помощью yum update).

yum -y update && yum install trickle 		        [On RedHat based systems]
apt -y update && apt install trickle 	[On Debian based systems]

Проверьте, будет ли струйка работать с нужным двоичным файлом. Как мы объясняли ранее, ручеек будет работать только с двоичными файлами, использующими динамические или разделяемые библиотеки. Чтобы проверить, можем ли мы использовать этот инструмент с определенным приложением, мы можем использовать известную утилиту ldd, где ldd означает список динамических зависимостей.

В частности, мы будем искать наличие glibc (библиотеки GNU C) в списке динамических зависимостей любой данной программы, поскольку именно эта библиотека определяет системные вызовы, участвующие в обмене данными через сокеты.

Запустите следующую команду для данного двоичного файла, чтобы увидеть, можно ли использовать «Trickle» для формирования его пропускной способности:

ldd $(which [binary]) | grep libc.so

Например,

ldd $(which ncftp) | grep libc.so

чей вывод:

libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

Строка между скобками в выводе может меняться от системы к системе и даже между последующими запусками одной и той же команды, поскольку она представляет собой адрес загрузки библиотеки в физическую память.

Если приведенная выше команда не возвращает никаких результатов, это означает, что двоичный файл, с которым она была запущена, не использует libc, и, следовательно, в этом случае в качестве формирователя полосы пропускания нельзя использовать Trickle.

Узнайте, как использовать Trickle в Linux

Самое простое использование струйки — в автономном режиме. При таком подходе для явного определения скорости загрузки и выгрузки данного приложения используется струйка. Как мы объясняли ранее, для краткости мы будем использовать одно и то же приложение для загрузки и выгрузки тестов.

Запуск Trickle в автономном режиме

Мы сравним скорости загрузки и выгрузки с использованием и без использования струйки. Параметр -d указывает скорость загрузки в КБ/с, а флаг -u указывает струйке ограничить скорость загрузки той же единицей. Кроме того, мы будем использовать флаг -s, который указывает, что струйка должна работать в автономном режиме.

Основной синтаксис для запуска струйки в автономном режиме следующий:

trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]

Чтобы выполнить следующие примеры самостоятельно, убедитесь, что на клиентском компьютере (192.168.0.17) установлены trickle и ncftp. случай).

Пример 1. Загрузка PDF-файла размером 2,8 МБ с функцией «струя» и без нее.

Для следующих тестов мы используем свободно распространяемый PDF-файл Linux Fundamentals (доступен здесь).

Первоначально вы можете загрузить этот файл в текущий рабочий каталог с помощью следующей команды:

wget http://linux-training.be/files/books/LinuxFun.pdf 

Синтаксис быстрой загрузки файла на наш FTP-сервер следующий:

ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename 

Где /remote_directory — это путь к каталогу загрузки относительно домашнего имени пользователя, а local-filename — это файл в вашем текущем рабочем каталоге.

В частности, без подкачки мы получаем пиковую скорость загрузки 52,02 МБ/с (обратите внимание, что это не реальная средняя скорость загрузки, а мгновенный начальный пик), и файл загружается практически мгновенно:

ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf 

Выход :

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

При использовании Trickle мы ограничим скорость передачи данных 5 КБ/с. Прежде чем загружать файл во второй раз, нам необходимо удалить его из каталога назначения; в противном случае ncftp сообщит нам, что в каталоге назначения находится тот же файл, который мы пытаемся загрузить, и не выполнит передачу:

rm /absolute/path/to/destination/directory/LinuxFun.pdf 

Затем :

trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf 

Выход :

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

В приведенном выше примере мы видим, что средняя скорость загрузки упала до ~5 КБ/с.

Пример 2. Загрузка одного и того же PDF-файла размером 2,8 МБ с «струйкой» и без нее.

Во-первых, не забудьте удалить PDF-файл из исходного каталога:

rm /absolute/path/to/source/directory/LinuxFun.pdf 

Обратите внимание, что в следующих случаях удаленный файл будет загружен в текущий каталог на клиентском компьютере. На этот факт указывает точка («.»), которая появляется после IP-адреса FTP-сервера.

Без струйки:

ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf 

Выход :

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

В режиме «trickle» скорость загрузки ограничивается 20 КБ/с:

trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf 

Выход :

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Запуск Trickle в контролируемом [неуправляемом] режиме

Trickle также может работать в неуправляемом режиме в соответствии с рядом параметров, определенных в /etc/trickled.conf. Этот файл определяет, как ведет себя «trickled» (демон) и управляет «trickle».

Кроме того, если мы хотим установить глобальные настройки, которые будут использоваться всеми приложениями в целом, нам нужно будет использовать команду «trickled». Эта команда запускает демон и позволяет нам определять ограничения на загрузку и выгрузку, которые будут использоваться всеми приложениями, работающими через поток, без необходимости каждый раз указывать ограничения.

Например, запуск:

trickled -d 50 -u 10

Приведёт к тому, что скорость загрузки и выгрузки любого приложения, проходящего через капельницу, будет ограничена значениями 30 КБ/с и 10 КБ/с соответственно.

Обратите внимание, что вы можете в любой момент проверить, запущен ли «trickled» и с какими аргументами:

ps -ef | grep trickled | grep -v grep

Выход :

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10
Пример 3: Загрузка файла mp4 размером 19 МБ на наш FTP-сервер с помощью и без струйки.

В этом примере мы будем использовать свободно распространяемое видео «He is the Gift», которое можно скачать по этой ссылке.

Первоначально мы загрузим этот файл в ваш текущий рабочий каталог с помощью следующей команды:

wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Прежде всего, мы запустим демон с помощью команды, указанной выше:

trickled -d 30 -u 10

Без струйки:

ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

Выход :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   36.31 MB/s

С струйкой:

trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

Выход :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB	9.51 kB/s

Как мы видим из приведенных выше результатов, скорость передачи данных упала до ~10 КБ/с.

Пример 4. Загрузка одного и того же видео со струйкой и без нее.

Как и в Примере 2, мы будем загружать файл в текущий рабочий каталог.

Без струйки:

ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Выход :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB  108.34 MB/s

С струйкой:

trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Выход :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   29.28 kB/s

Это соответствует установленному ранее лимиту загрузки (30 КБ/с).

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

Как мы упоминали ранее, можно дополнительно настроить формирование пропускной способности «trickle» через «trickled.conf». Типичный раздел этого файла состоит из следующего:

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

Где,

  1. [service] указывает имя приложения, использование полосы пропускания которого мы собираемся формировать.
  2. Приоритет позволяет нам указать, чтобы одна служба имела более высокий приоритет относительно другой, тем самым не позволяя одному приложению использовать всю полосу пропускания, которой управляет демон. Чем меньше число, тем больше пропускной способности назначено [услуге].
  3. Time-Smoothing [в секундах]: определяет, с какими интервалами времени приложение будет пытаться разрешить передачу и/или получение данных. Меньшие значения (что-то в диапазоне 0,1–1 с) идеально подходят для интерактивных приложений и обеспечивают более непрерывный (плавный) сеанс, тогда как немного большие значения (1–10 с) лучше подходят для приложений, которым требуется массовая передача. Если значение не указано, используется значение по умолчанию (5 с).
  4. Сглаживание длины [в КБ]: идея аналогична сглаживанию времени, но основана на длине операции ввода-вывода. Если значение не указано, используется значение по умолчанию (10 КБ).

Изменение значений сглаживания будет преобразовано в приложение, указанное в [service], с использованием скорости передачи в пределах интервала вместо фиксированного значения. К сожалению, не существует формулы для расчета нижней и верхней границ этого интервала, поскольку это во многом зависит от каждого конкретного случая.

Ниже приведен пример файла trickled.conf в клиенте CentOS 7 (192.168.0.17):

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

Используя эту настройку, tricled будет отдавать приоритет SSH-соединениям над FTP-передачами. Обратите внимание, что интерактивный процесс, такой как SSH, использует меньшие значения сглаживания времени, тогда как служба, выполняющая массовую передачу данных (FTP), использует большее значение.

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

Заключение

В этой статье мы рассмотрели, как ограничить пропускную способность, используемую приложениями, с помощью струйки в дистрибутивах на основе Fedora и Debian/производных. Другие возможные варианты использования включают, помимо прочего:

  • Ограничение скорости загрузки с помощью системной утилиты, такой как wget, или торрент-клиента, например.
  • Ограничение скорости обновления вашей системы с помощью yum (или aptitude, если вы используете систему на базе Debian), системы управления пакетами.
  • Если ваш сервер находится за прокси-сервером или брандмауэром (или сам является прокси-сервером или брандмауэром), вы можете использовать струйку, чтобы установить ограничения как на загрузку, так и на выгрузку или скорость связи с клиентами или внешними устройствами.

Вопросы и комментарии приветствуются. Не стесняйтесь использовать форму ниже, чтобы отправить их нам.