Recherche de site Web

Comment limiter la bande passante réseau utilisée par les applications dans un système Linux avec Trickle


Avez-vous déjà rencontré des situations où une application dominait toute la bande passante de votre réseau ? Si vous avez déjà été dans une situation où une application a consommé tout votre trafic, vous apprécierez alors le rôle de l'application de gestion de la bande passante.

Que vous soyez un administrateur système ou simplement un utilisateur Linux, vous devez apprendre à contrôler les vitesses de téléchargement et de téléchargement des applications pour vous assurer que la bande passante de votre réseau n'est pas brûlée. par une seule application.

Qu’est-ce que Trickle ?

Trickle est un outil de gestion de la bande passante réseau qui nous permet de gérer les vitesses de téléchargement et de téléchargement des applications afin d'empêcher qu'une seule d'entre elles monopolise la totalité (ou la majeure partie) de la bande passante disponible.

En quelques mots, trickle vous permet de contrôler le débit du trafic réseau par application, par opposition au contrôle par utilisateur, qui est l'exemple classique de mise en forme de la bande passante dans un environnement client-serveur, et est probablement la configuration que nous préférons. familier avec.

Comment fonctionne Trickle ?

De plus, un petit filet peut nous aider à définir des priorités pour chaque application, de sorte que lorsque des limites globales ont été fixées pour l'ensemble du système, les applications prioritaires bénéficieront toujours automatiquement de plus de bande passante.

Pour accomplir cette tâche, le trickle définit des limites de trafic sur la manière dont les données sont envoyées et reçues depuis les sockets utilisant des connexions TCP. Il faut noter que, hormis les taux de transfert de données, le trickle ne modifie en rien le comportement du processus qu'il façonne à un instant donné.

Qu'est-ce que Trickle ne peut pas faire ?

La seule limitation, pour ainsi dire, est que trickle ne fonctionnera pas avec des applications liées statiquement ou des binaires avec les bits SUID ou SGID définis car il utilise la liaison et le chargement dynamiques pour placer lui-même entre le processus façonné et sa prise réseau associée. Trickle agit alors comme un proxy entre ces deux composants logiciels.

Étant donné que trickle ne nécessite pas de privilèges de superutilisateur pour fonctionner, les utilisateurs peuvent définir leurs propres limites de trafic. Puisque cela n’est peut-être pas souhaitable, nous explorerons comment définir des limites globales que les utilisateurs du système ne peuvent pas dépasser. En d’autres termes, les utilisateurs pourront toujours gérer leurs taux de trafic, mais toujours dans les limites fixées par l’administrateur système.

Environnement de test

Dans cet article, nous expliquerons comment limiter au compte-goutte la bande passante réseau utilisée par les applications sur un serveur Linux.

Pour générer le trafic nécessaire, nous utiliserons ncftpput et ncftpget (les deux outils sont disponibles en installant ncftp) sur le client (CentOS serveur – dev1 : 192.168.0.17), et vsftpd sur le serveur (Debian – dev2 : 192.168.0.15 ) à des fins de démonstration. Les mêmes instructions fonctionnent également sur les systèmes basés sur RedHat, Fedora et Ubuntu.

Installation de ncftp et vsftpd sous Linux

1. Pour RHEL/CentOS 8/7, activez le référentiel EPEL. Extra Packages for Enterprise Linux (EPEL) est un référentiel de logiciels gratuits et open source de haute qualité maintenu par le projet Fedora et est 100 % compatible avec ses spin-offs, tels que Red Hat Enterprise. Linux et CentOS. trickle et ncftp sont tous deux disponibles à partir de ce référentiel.

2. Installez ncftp comme suit :

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

3. Configurez un serveur FTP sur un serveur distinct. Veuillez noter que bien que FTP soit intrinsèquement non sécurisé, il est encore largement utilisé dans les cas où la sécurité du téléchargement de fichiers n'est pas nécessaire.

Nous l'utilisons dans cet article pour illustrer les primes du trickle et parce qu'il montre les taux de transfert dans stdout sur le client, et nous laisserons la discussion sur la question de savoir s'il doit ou non être utilisé pour un autre date et l'heure.

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

Maintenant, éditez le fichier /etc/vsftpd/vsftpd.conf sur le serveur FTP comme suit :

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

Apportez les modifications suivantes :

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

Après cela, assurez-vous de démarrer vsftpd pour votre session en cours et de l'activer pour le démarrage automatique lors des prochains démarrages :

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

4. Si vous choisissez de configurer le serveur FTP dans un droplet CentOS/RHEL avec des clés SSH pour l'accès à distance, vous aurez besoin d'un compte utilisateur protégé par mot de passe avec le répertoire approprié et autorisations de fichier pour télécharger et télécharger le contenu souhaité EN DEHORS du répertoire personnel de la racine.

Vous pouvez ensuite accéder à votre répertoire personnel en saisissant l'URL suivante dans votre navigateur. Une fenêtre de connexion apparaîtra vous demandant un compte utilisateur et un mot de passe valides sur le serveur FTP.

ftp://192.168.0.15

Si l'authentification réussit, vous verrez le contenu de votre répertoire personnel. Plus loin dans ce didacticiel, vous pourrez actualiser cette page pour afficher les fichiers qui ont été téléchargés lors des étapes précédentes.

Comment installer Trickle sous Linux

Installez maintenant trickle via yum ou apt.

Pour garantir une installation réussie, il est considéré comme une bonne pratique de s'assurer que les packages actuellement installés sont à jour (à l'aide de yum update) avant d'installer l'outil lui-même.

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

Vérifiez si trickle fonctionnera avec le binaire souhaité. Comme nous l'avons expliqué précédemment, le trickle ne fonctionnera qu'avec les binaires utilisant des bibliothèques dynamiques ou partagées. Pour vérifier si nous pouvons utiliser cet outil avec une certaine application, nous pouvons utiliser l'utilitaire bien connu ldd, où ldd signifie liste de dépendances dynamiques.

Plus précisément, nous rechercherons la présence de la glibc (la bibliothèque GNU C) dans la liste des dépendances dynamiques d'un programme donné car c'est précisément cette bibliothèque qui définit les appels système impliqués dans la communication via les sockets.

Exécutez la commande suivante sur un binaire donné pour voir si trickle peut être utilisé pour façonner sa bande passante :

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

Par exemple,

ldd $(which ncftp) | grep libc.so

dont la sortie est :

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

La chaîne entre parenthèses dans la sortie peut changer d'un système à l'autre et même entre les exécutions ultérieures de la même commande, car elle représente l'adresse de chargement de la bibliothèque dans la mémoire physique.

Si la commande ci-dessus ne renvoie aucun résultat, cela signifie que le binaire sur lequel elle a été exécutée n'utilise pas libc et que trickle ne peut donc pas être utilisé comme façonneur de bande passante dans ce cas.

Apprenez à utiliser Trickle sous Linux

L'utilisation la plus basique de trickle est en mode autonome. En utilisant cette approche, trickle est utilisé pour définir explicitement les vitesses de téléchargement et de téléchargement d'une application donnée. Comme nous l'avons expliqué précédemment, par souci de concision, nous utiliserons la même application pour les tests de téléchargement et d'upload.

Exécuter Trickle en mode autonome

Nous comparerons les vitesses de téléchargement et de téléchargement avec et sans filet. L'option -d indique la vitesse de téléchargement en Ko/s, tandis que l'indicateur -u indique à trickle de limiter la vitesse de téléchargement de la même unité. De plus, nous utiliserons l'indicateur -s, qui spécifie que trickle doit s'exécuter en mode autonome.

La syntaxe de base pour exécuter trickle en mode autonome est la suivante :

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

Afin d'exécuter vous-même les exemples suivants, assurez-vous que trickle et ncftp sont installés sur la machine client (192.168.0.17 dans mon cas).

Exemple 1 : Téléchargement d'un fichier PDF de 2,8 Mo avec et sans filet.

Nous utilisons le fichier PDF Linux Fundamentals librement distribuable (disponible ici) pour les tests suivants.

Vous pouvez initialement télécharger ce fichier dans votre répertoire de travail actuel avec la commande suivante :

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

La syntaxe pour télécharger un fichier sur notre serveur FTP sans problème est la suivante :

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

/remote_directory est le chemin du répertoire de téléchargement par rapport au nom d'utilisateur et local-filename est un fichier dans votre répertoire de travail actuel.

Plus précisément, sans ruissellement, nous obtenons une vitesse de téléchargement maximale de 52,02 Mo/s (veuillez noter qu'il ne s'agit pas de la vitesse de téléchargement moyenne réelle, mais d'un pic de démarrage instantané), et le fichier est téléchargé presque instantanément :

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

Sortir :

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Avec le trickle, nous limiterons le taux de transfert de téléchargement à 5 Ko/s. Avant de télécharger le fichier pour la deuxième fois, nous devons le supprimer du répertoire de destination ; sinon, ncftp nous informera que le fichier dans le répertoire de destination est le même que celui que nous essayons de télécharger et n'effectuera pas le transfert :

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

Alors :

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

Sortir :

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

Dans l'exemple ci-dessus, nous pouvons voir que la vitesse de téléchargement moyenne est tombée à ~5 Ko/s.

Exemple 2 : Téléchargement du même fichier PDF de 2,8 Mo avec et sans filet

Tout d’abord, n’oubliez pas de supprimer le PDF du répertoire source d’origine :

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

Veuillez noter que les cas suivants téléchargeront le fichier distant dans le répertoire actuel de la machine client. Ce fait est indiqué par le point (« . ») qui apparaît après l'adresse IP du serveur FTP.

Sans filet :

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

Sortir :

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Avec trickle, limitation de la vitesse de téléchargement à 20 Ko/s :

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

Sortir :

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Exécution de Trickle en mode supervisé [non géré]

Trickle peut également fonctionner en mode non géré, en suivant une série de paramètres définis dans /etc/trickled.conf. Ce fichier définit comment trickled (le démon) se comporte et gère trickled.

De plus, si nous voulons définir des paramètres globaux qui seront utilisés globalement par toutes les applications, nous devrons utiliser la commande trickled. Cette commande exécute le démon et nous permet de définir des limites de téléchargement et de téléchargement qui seront partagées par toutes les applications exécutées via Trickle sans que nous ayons besoin de spécifier des limites à chaque fois.

Par exemple, en exécutant :

trickled -d 50 -u 10

Cela fera que les vitesses de téléchargement et de téléchargement de toute application exécutée via le goutte-à-goutte seront limitées à 30 Ko/s et 10 Ko/s, respectivement.

Veuillez noter que vous pouvez vérifier à tout moment si trickled est en cours d'exécution et avec quels arguments :

ps -ef | grep trickled | grep -v grep

Sortir :

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10
Exemple 3 : Téléchargement d'un fichier mp4 de 19 Mo sur notre serveur FTP en utilisant avec et sans filet.

Dans cet exemple, nous utiliserons la vidéo « Il est le cadeau » distribuable gratuitement, disponible en téléchargement à partir de ce lien.

Nous allons dans un premier temps télécharger ce fichier dans votre répertoire de travail actuel avec la commande suivante :

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

Tout d’abord, nous allons démarrer le démon trickled avec la commande répertoriée ci-dessus :

trickled -d 30 -u 10

Sans filet :

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

Sortir :

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

Avec filet :

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

Sortir :

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

Comme nous pouvons le voir dans le résultat ci-dessus, le taux de transfert de téléchargement est tombé à ~10 Ko/s.

Exemple 4 : Téléchargement de la même vidéo avec et sans filet

Comme dans l'Exemple 2, nous allons télécharger le fichier dans le répertoire de travail actuel.

Sans filet :

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

Sortir :

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

Avec filet :

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

Sortir :

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

Ce qui est conforme à la limite de téléchargement définie précédemment (30 Ko/s).

Remarque : Une fois le démon démarré, il n'est pas nécessaire de définir des limites individuelles pour chaque application qui utilise trickle.

Comme nous l'avons mentionné précédemment, il est possible de personnaliser davantage la configuration de la bande passante de trickled via trickled.conf. Une section typique de ce fichier se compose des éléments suivants :

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

Où,

  1. [service] indique le nom de l'application dont nous avons l'intention de façonner l'utilisation de la bande passante.
  2. Priorité nous permet de spécifier qu'un service ait une priorité plus élevée par rapport à un autre, évitant ainsi qu'une seule application monopolise toute la bande passante gérée par le démon. Plus le nombre est bas, plus la bande passante attribuée au [service] est importante.
  3. Time-Smoothing [en secondes] : définit avec quels intervalles de temps le flux tentera de laisser l'application transférer et/ou recevoir des données. Des valeurs plus petites (quelque chose entre 0,1 et 1 s) sont idéales pour les applications interactives et donneront lieu à une session plus continue (fluide), tandis que des valeurs légèrement plus grandes (1 à 10 s) sont meilleures pour les applications nécessitant un transfert de masse. Si aucune valeur n'est spécifiée, la valeur par défaut (5 s) est utilisée.
  4. Length-Smoothing [en Ko] : l'idée est la même que dans Time-Smoothing, mais basée sur la durée d'une opération d'E/S. Si aucune valeur n'est spécifiée, la valeur par défaut (10 Ko) est utilisée.

La modification des valeurs de lissage se traduira par l'application spécifiée par [service] en utilisant des taux de transfert dans un intervalle au lieu d'une valeur fixe. Malheureusement, il n'existe pas de formule pour calculer les limites inférieure et supérieure de cet intervalle car cela dépend principalement de chaque scénario spécifique.

Ce qui suit est un exemple de fichier trickled.conf dans le 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

En utilisant cette configuration, trickled donnera la priorité aux connexions SSH par rapport aux transferts FTP. Notez qu'un processus interactif, tel que SSH, utilise des valeurs de lissage temporel plus petites, alors qu'un service qui effectue des transferts de données en masse (FTP) utilise une valeur plus élevée.

Les valeurs de lissage sont responsables du fait que les vitesses de téléchargement et de téléchargement dans notre exemple précédent ne correspondent pas à la valeur exacte spécifiée par le démon trickled mais se déplacent dans un intervalle proche de celle-ci.

Conclusion

Dans cet article, nous avons exploré comment limiter la bande passante utilisée par les applications utilisant le trickle sur les distributions basées sur Fedora et Debian/dérivés. D'autres cas d'utilisation possibles incluent, sans s'y limiter :

  • Limiter la vitesse de téléchargement via un utilitaire système tel que wget, ou un client torrent par exemple.
  • Limiter la vitesse à laquelle votre système peut être mis à jour via « yum » (ou « aptitude », si vous êtes dans un système basé sur Debian), le système de gestion des paquets.
  • Si votre serveur se trouve derrière un proxy ou un pare-feu (ou s'il s'agit du proxy ou du pare-feu lui-même), vous pouvez utiliser Trickle pour définir des limites à la fois sur la vitesse de téléchargement et de téléchargement ou sur la vitesse de communication avec les clients ou l'extérieur.

Les questions et commentaires sont les bienvenus. N'hésitez pas à utiliser le formulaire ci-dessous pour nous les envoyer.