Com limitar l'amplada de banda de la xarxa utilitzada per les aplicacions en un sistema Linux amb Trickle


Heu trobat mai situacions en què una aplicació dominava l'amplada de banda de tota la vostra xarxa? Si alguna vegada us heu trobat en una situació en què una aplicació va consumir tot el vostre trànsit, valorareu el paper de l'aplicació de formador d'ample de banda de degoteig.

Si sou un administrador del sistema o només un usuari de Linux, heu d'aprendre a controlar les velocitats de càrrega i descàrrega de les aplicacions per assegurar-vos que l'ample de banda de la vostra xarxa no es grava per una sola aplicació.

[També us pot agradar: 16 eines útils de control de l'ample de banda per analitzar l'ús de la xarxa a Linux]

Què és Trickle?

Trickle és una eina de conformació de l'ample de banda de xarxa que ens permet gestionar les velocitats de càrrega i descàrrega de les aplicacions per tal d'evitar que cap d'elles agafi tot (o la major part) de l'ample de banda disponible.

En poques paraules, trickle us permet controlar la taxa de trànsit de xarxa per aplicació, a diferència del control per usuari, que és l'exemple clàssic de conformació d'ample de banda en un entorn client-servidor, i probablement és la configuració que som més. familiaritzat amb.

Com funciona Trickle?

A més, un degoteig ens pot ajudar a definir prioritats per aplicació, de manera que quan s'hagin establert límits generals per a tot el sistema, les aplicacions prioritàries encara obtindran més amplada de banda automàticament.

Per dur a terme aquesta tasca, el degoteig estableix límits de trànsit a la forma en què les dades s'envien i reben des dels endolls que utilitzen connexions TCP. Hem de tenir en compte que, a part de les taxes de transferència de dades, el trickle no modifica de cap manera el comportament del procés que està configurant en cada moment.

Què no pot fer Trickle?

L'única limitació, per dir-ho així, és que el trickle no funcionarà amb aplicacions enllaçades estàticament o binaris amb els bits SUID o SGID establerts, ja que utilitza l'enllaç i la càrrega dinàmiques per col·locar-se entre el procés modelat i el seu sòcol de xarxa associat. Trickle actua com a intermediari entre aquests dos components de programari.

Com que Trickle no requereix privilegis de superusuari per funcionar, els usuaris poden establir els seus propis límits de trànsit. Com que això pot no ser desitjable, explorarem com establir límits generals que els usuaris del sistema no poden superar. En altres paraules, els usuaris encara podran gestionar les seves taxes de trànsit, però sempre dins dels límits establerts per l'administrador del sistema.

En aquest article, explicarem com limitar l'amplada de banda de la xarxa utilitzada per les aplicacions en un servidor Linux amb un degoteig.

Per generar el trànsit necessari, utilitzarem ncftpput i ncftpget (ambdues eines estan disponibles instal·lant ncftp) al client (servidor CentOS – dev1: 192.168.0.17) i vsftpd al servidor (Debian – dev2: 192.168.0.15) per finalitats de demostració. Les mateixes instruccions també funcionen en sistemes basats en RedHat, Fedora i Ubuntu.

Instal·lació de ncftp i vsftpd a Linux

1. Per a RHEL/CentOS 8/7, activeu el repositori EPEL. Extra Packages for Enterprise Linux (EPEL) és un dipòsit de programari lliure i de codi obert d'alta qualitat mantingut pel projecte Fedora i és 100% compatible amb els seus derivats, com Red Hat Enterprise Linux i CentOS. Tant trickle com ncftp estan disponibles des d'aquest dipòsit.

2. Instal·leu ncftp de la següent manera:

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

3. Configureu un servidor FTP en un servidor independent. Tingueu en compte que, tot i que l'FTP és inherentment insegur, encara s'utilitza àmpliament en els casos en què la seguretat en la càrrega o la descàrrega de fitxers no és necessària.

L'estem utilitzant en aquest article per il·lustrar les avantatges del trickle i perquè mostra les taxes de transferència en stdout al client, i deixarem la discussió sobre si s'ha d'utilitzar o no per a una altra data i hora.

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

Ara, editeu el fitxer /etc/vsftpd/vsftpd.conf al servidor FTP de la següent manera:

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

Feu els canvis següents:

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

Després d'això, assegureu-vos d'iniciar vsftpd per a la vostra sessió actual i habilitar-lo per a l'inici automàtic en arrencades futures:

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

4. Si opteu per configurar el servidor FTP en un droplet CentOS/RHEL amb claus SSH per a l'accés remot, necessitareu un compte d'usuari protegit amb contrasenya amb el directori i els permisos de fitxer adequats per carregar i descarregar el contingut desitjat FORA de casa de root directori.

A continuació, podeu navegar al vostre directori d'inici introduint l'URL següent al vostre navegador. Apareixerà una finestra d'inici de sessió que us demanarà un compte d'usuari i una contrasenya vàlids al servidor FTP.

ftp://192.168.0.15

Si l'autenticació té èxit, veureu el contingut del vostre directori d'inici. Més endavant en aquest tutorial, podreu actualitzar aquesta pàgina per mostrar els fitxers que s'han penjat durant els passos anteriors.

Com instal·lar Trickle a Linux

Ara instal·leu trickle mitjançant yum o apt.

Per garantir una instal·lació correcta, es considera una bona pràctica assegurar-se que els paquets instal·lats actualment estiguin actualitzats (utilitzant l'actualització yum) abans d'instal·lar l'eina.

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

Verifiqueu si trickle funcionarà amb el binari desitjat. Com hem explicat anteriorment, el trickle només funcionarà amb binaris que utilitzen biblioteques dinàmiques o compartides. Per verificar si podem utilitzar aquesta eina amb una aplicació determinada, podem utilitzar la coneguda utilitat ldd, on ldd significa llista de dependències dinàmiques.

Concretament, buscarem la presència de glibc (la biblioteca GNU C) a la llista de dependències dinàmiques de qualsevol programa donat perquè és precisament aquesta biblioteca la que defineix les trucades al sistema implicades en la comunicació a través de sockets.

Executeu l'ordre següent contra un binari determinat per veure si es pot utilitzar trickle per donar forma al seu ample de banda:

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

Per exemple,

# ldd $(which ncftp) | grep libc.so

la sortida del qual és:

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

La cadena entre claudàtors a la sortida pot canviar d'un sistema a un altre i fins i tot entre execucions posteriors de la mateixa ordre, ja que representa l'adreça de càrrega de la biblioteca a la memòria física.

Si l'ordre anterior no retorna cap resultat, vol dir que el binari amb el qual s'ha executat no utilitza libc i, per tant, trickle no es pot utilitzar com a modelador d'ample de banda en aquest cas.

Apreneu a utilitzar Trickle a Linux

L'ús més bàsic de trickle és en mode autònom. Amb aquest enfocament, el trickle s'utilitza per definir explícitament les velocitats de descàrrega i càrrega d'una aplicació determinada. Com hem explicat anteriorment, per motius de brevetat, utilitzarem la mateixa aplicació per a les proves de baixada i càrrega.

Compararem les velocitats de descàrrega i càrrega amb i sense utilitzar trickle. L'opció -d indica la velocitat de descàrrega en KB/s, mentre que la marca -u indica a Trickle que limiti la velocitat de pujada a la mateixa unitat. A més, utilitzarem el senyalador -s, que especifica que el trickle s'ha d'executar en mode autònom.

La sintaxi bàsica per executar trickle en mode autònom és la següent:

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

Per tal de realitzar els exemples següents pel vostre compte, assegureu-vos de tenir instal·lats Trickle i ncftp a la màquina client (192.168.0.17 en el meu cas).

Estem utilitzant el fitxer PDF de Linux Fundamentals de distribució lliure (disponible des d'aquí) per a les proves següents.

Inicialment podeu descarregar aquest fitxer al vostre directori de treball actual amb l'ordre següent:

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

La sintaxi per carregar un fitxer al nostre servidor FTP sense degoteig és la següent:

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

On /directori_remot és el camí del directori de càrrega en relació a la casa del nom d'usuari, i nom-fitxer local és un fitxer del vostre directori de treball actual.

Concretament, sense degoteig obtenim una velocitat màxima de pujada de 52,02 MB/s (tingueu en compte que aquesta no és la velocitat de pujada mitjana real, sinó un pic inicial instantani) i el fitxer es puja gairebé a l'instant:

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

Sortida:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Amb trickle, limitarem la velocitat de transferència de càrrega a 5 KB/s. Abans de pujar el fitxer per segona vegada, hem d'esborrar-lo del directori de destinació; en cas contrari, ncftp ens informarà que el fitxer al directori de destinació és el mateix que estem intentant carregar i no realitzarà la transferència:

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

Llavors:

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

Sortida:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

A l'exemple anterior, podem veure que la velocitat mitjana de pujada va baixar a ~5 KB/s.

Primer, recordeu suprimir el PDF del directori d'origen original:

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

Tingueu en compte que els casos següents baixaran el fitxer remot al directori actual de la màquina client. Aquest fet s'indica amb el punt (‘.‘) que apareix després de l'adreça IP del servidor FTP.

Sense degoteig:

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

Sortida:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Amb degoteig, limitant la velocitat de descàrrega a 20 KB/s:

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

Sortida:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Execució de Trickle en mode supervisat [no gestionat].

Trickle també es pot executar en mode no gestionat, seguint una sèrie de paràmetres definits a /etc/trickled.conf. Aquest fitxer defineix com es comporta trickled (el dimoni) i gestiona el trickle.

A més, si volem establir paràmetres globals per ser utilitzats, en general, per totes les aplicacions, haurem d'utilitzar l'ordre trickled. Aquesta ordre executa el dimoni i ens permet definir límits de descàrrega i càrrega que seran compartits per totes les aplicacions executades mitjançant trickle sense que hàgim d'especificar límits cada vegada.

Per exemple, executant:

# trickled -d 50 -u 10

Farà que les velocitats de descàrrega i pujada de qualsevol aplicació que s'executen mitjançant trickle es limitin a 30 KB/s i 10 KB/s, respectivament.

Tingueu en compte que podeu comprovar en qualsevol moment si trickled s'està executant i amb quins arguments:

# ps -ef | grep trickled | grep -v grep

Sortida:

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10

En aquest exemple farem servir el vídeo de distribució lliure Ell és el regal, disponible per descarregar-lo des d'aquest enllaç.

Inicialment descarregarem aquest fitxer al vostre directori de treball actual amb l'ordre següent:

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

En primer lloc, iniciarem el dimoni degotat amb l'ordre que s'indica a dalt:

# trickled -d 30 -u 10

Sense degoteig:

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

Sortida:

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

Amb degoteig:

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

Sortida:

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

Com podem veure a la sortida anterior, la velocitat de transferència de càrrega va baixar a ~10 KB/s.

Com a l'exemple 2, baixarem el fitxer al directori de treball actual.

Sense degoteig:

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

Sortida:

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

Amb degoteig:

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

Sortida:

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

D'acord amb el límit de descàrrega establert anteriorment (30 KB/s).

Nota: un cop s'ha iniciat el dimoni, no cal establir límits individuals per a cada aplicació que utilitzi trickle.

Com hem esmentat anteriorment, es pot personalitzar encara més la configuració de l'ample de banda de trickle mitjançant trickled.conf. Una secció típica d'aquest fitxer consta del següent:

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

On,

  1. [servei] indica el nom de l'aplicació l'ús de l'amplada de banda de la qual volem donar forma.
  2. Prioritat ens permet especificar que un servei tingui una prioritat més alta respecte a un altre, per tant, no permet que una sola aplicació acabi tot l'ample de banda que gestiona el dimoni. Com més baix sigui el nombre, més amplada de banda s'assignarà a [servei].
  3. Time-Smoothing [en segons]: defineix amb quins intervals de temps s'intentarà que l'aplicació transfereixi i/o rebi dades. Els valors més petits (alguna cosa entre el rang de 0,1 a 1 s) són ideals per a aplicacions interactives i donaran lloc a una sessió més contínua (suau), mentre que valors lleugerament més grans (1 a 10 s) són millors per a aplicacions que necessiten transferència massiva. Si no s'especifica cap valor, s'utilitza el valor predeterminat (5 s).
  4. Length-Smoothing [en KB]: la idea és la mateixa que a Time-Smoothing, però es basa en la durada d'una operació d'E/S. Si no s'especifica cap valor, s'utilitza el valor predeterminat (10 KB).

Canviar els valors de suavització es traduirà en l'aplicació especificada per [servei] utilitzant taxes de transferència dins d'un interval en lloc d'un valor fix. Malauradament, no hi ha una fórmula per calcular els límits inferior i superior d'aquest interval, ja que depèn principalment de cada cas concret.

El següent és un fitxer de mostra trickled.conf al client 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

Amb aquesta configuració, trickled prioritzarà les connexions SSH sobre les transferències FTP. Tingueu en compte que un procés interactiu, com ara SSH, utilitza valors de suavització de temps més petits, mentre que un servei que realitza transferències de dades massives (FTP) utilitza un valor més gran.

Els valors de suavització són els responsables de que les velocitats de descàrrega i pujada del nostre exemple anterior no coincideixin amb el valor exacte especificat pel dimoni derrapat però que es moguin en un interval proper.

[ També us pot agradar: Com protegir i endurir el servidor OpenSSH ]

Conclusió

En aquest article hem explorat com limitar l'ample de banda utilitzat per les aplicacions que utilitzen trickle en distribucions basades en Fedora i Debian/derivats. Altres casos d'ús possibles inclouen, però no es limiten a:

  • Limitar la velocitat de descàrrega mitjançant una utilitat del sistema, com ara un client torrent, per exemple.
  • Limitar la velocitat a la qual es pot actualitzar el vostre sistema mitjançant \\aptitude\\, si esteu en un sistema basat en Debian), el sistema de gestió de paquets.
  • Si el vostre servidor està darrere d'un servidor intermediari o tallafoc (o és el servidor intermediari o el tallafoc en si mateix), podeu utilitzar Trickle per establir límits tant a la velocitat de descàrrega com de càrrega o de comunicació amb els clients o amb l'exterior.

Les preguntes i comentaris són benvinguts. No dubteu a utilitzar el formulari següent per enviar-los a la nostra manera.