Kako omejiti omrežno pasovno širino, ki jo uporabljajo aplikacije v sistemu Linux s Trickle


Ste že kdaj naleteli na situacije, ko je ena aplikacija prevladovala v vaši pasovni širini celotnega omrežja? Če ste se kdaj znašli v situaciji, ko je ena aplikacija požrla ves vaš promet, boste cenili vlogo aplikacije za oblikovanje pasovne širine.

Ne glede na to, ali ste skrbnik sistema ali samo uporabnik Linuxa, se morate naučiti nadzorovati hitrosti nalaganja in prenosa za aplikacije, da zagotovite, da pasovne širine vašega omrežja ne požge ena aplikacija.

[ Morda vam bo všeč tudi: 16 uporabnih orodij za spremljanje pasovne širine za analizo uporabe omrežja v Linuxu ]

Kaj je Trickle?

Trickle je orodje za oblikovanje pasovne širine omrežja, ki nam omogoča upravljanje hitrosti nalaganja in prenosa aplikacij, da preprečimo, da bi katera koli od njih prevzela vso (ali večino) razpoložljive pasovne širine.

Z nekaj besedami, trickle vam omogoča nadzor nad hitrostjo omrežnega prometa na podlagi posamezne aplikacije, v nasprotju z nadzorom na uporabnika, ki je klasičen primer oblikovanja pasovne širine v okolju odjemalec-strežnik in je verjetno nastavitev, ki smo jo bolj seznanjen z.

Kako deluje Trickle?

Poleg tega nam lahko kapljica pomaga določiti prioritete za vsako aplikacijo, tako da bodo prednostne aplikacije samodejno dobile večjo pasovno širino, ko so nastavljene splošne omejitve za celoten sistem.

Da bi izpolnili to nalogo, trickle nastavi omejitve prometa glede načina, na katerega se podatki pošiljajo in prejemajo v vtičnice, ki uporabljajo povezave TCP. Upoštevati moramo, da razen hitrosti prenosa podatkov trickle na noben način ne spremeni obnašanja procesa, ki ga oblikuje v danem trenutku.

Česa Trickle ne more storiti?

Edina omejitev, tako rekoč, je, da trickle ne bo deloval s statično povezanimi aplikacijami ali binarnimi datotekami z nastavljenimi biti SUID ali SGID, saj uporablja dinamično povezovanje in nalaganje, da se postavi med oblikovan proces in z njim povezano omrežno vtičnico. Trickle nato deluje kot posrednik med tema dvema komponentama programske opreme.

Ker trickle za zagon ne zahteva privilegijev superuporabnika, lahko uporabniki nastavijo svoje omejitve prometa. Ker to morda ni zaželeno, bomo raziskali, kako nastaviti splošne omejitve, ki jih uporabniki sistema ne smejo preseči. Z drugimi besedami, uporabniki bodo še vedno lahko upravljali svoje stopnje prometa, vendar vedno v mejah, ki jih določi skrbnik sistema.

V tem članku bomo razložili, kako s kapljanjem omejiti omrežno pasovno širino, ki jo uporabljajo aplikacije v strežniku Linux.

Za ustvarjanje potrebnega prometa bomo uporabili ncftpput in ncftpget (obe orodji sta na voljo z namestitvijo ncftp) na odjemalcu (strežnik CentOS – dev1: 192.168.0.17) in vsftpd na strežniku (Debian – dev2: 192.168.0.15) za demonstracijske namene. Ista navodila delujejo tudi na sistemih, ki temeljijo na RedHat, Fedora in Ubuntu.

Namestitev ncftp in vsftpd v Linux

1. Za RHEL/CentOS 8/7 omogočite repozitorij EPEL. Dodatni paketi za Enterprise Linux (EPEL) je repozitorij visokokakovostne brezplačne in odprtokodne programske opreme, ki jo vzdržuje projekt Fedora in je 100 % združljiv z njegovimi deli, kot sta Red Hat Enterprise Linux in CentOS. Tako trickle kot ncftp sta na voljo v tem skladišču.

2. Namestite ncftp, kot sledi:

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

3. Nastavite strežnik FTP v ločenem strežniku. Upoštevajte, da čeprav je FTP sam po sebi nevaren, se še vedno pogosto uporablja v primerih, ko varnost pri nalaganju ali prenosu datotek ni potrebna.

V tem članku ga uporabljamo za ponazoritev prednosti trickle in ker prikazuje hitrosti prenosa v standardnem izpisu na odjemalcu, razpravo o tem, ali naj se uporablja ali ne, pa bomo pustili za drug datum in čas.

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

Zdaj uredite datoteko /etc/vsftpd/vsftpd.conf na strežniku FTP, kot sledi:

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

Izvedite naslednje spremembe:

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

Po tem se prepričajte, da ste zagnali vsftpd za svojo trenutno sejo in ga omogočili za samodejni zagon pri prihodnjih zagonih:

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

4. Če ste se odločili nastaviti strežnik FTP v kapljici CentOS/RHEL s ključi SSH za oddaljeni dostop, boste potrebovali uporabniški račun, zaščiten z geslom z ustreznimi dovoljenji imenika in datoteke za nalaganje in prenos želene vsebine ZUNAJ korenskega doma imenik.

Nato lahko brskate do domačega imenika tako, da v brskalnik vnesete naslednji URL. Pojavilo se bo okno za prijavo, v katerem boste morali vnesti veljaven uporabniški račun in geslo na strežniku FTP.

ftp://192.168.0.15

Če je avtentikacija uspešna, boste videli vsebino domačega imenika. Kasneje v tej vadnici boste lahko osvežili to stran, da prikažete datoteke, ki so bile naložene med prejšnjimi koraki.

Kako namestiti Trickle v Linux

Zdaj namestite trickle prek yum ali apt.

Za zagotovitev uspešne namestitve se šteje za dobro prakso, da se pred namestitvijo orodja prepričate, da so trenutno nameščeni paketi posodobljeni (z uporabo posodobitve yum).

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

Preverite, ali bo trickle deloval z želeno binarno datoteko. Kot smo že pojasnili, bo tok deloval samo z binarnimi datotekami, ki uporabljajo dinamične ali skupne knjižnice. Za preverjanje, ali lahko to orodje uporabljamo z določeno aplikacijo, lahko uporabimo dobro znani pripomoček ldd, kjer ldd pomeni dinamične odvisnosti seznama.

Natančneje, iskali bomo prisotnost glibc (knjižnica GNU C) na seznamu dinamičnih odvisnosti katerega koli programa, ker je ravno ta knjižnica tista, ki definira sistemske klice, ki sodelujejo pri komunikaciji prek vtičnic.

Zaženite naslednji ukaz za dano dvojiško datoteko, da vidite, ali je mogoče trickle uporabiti za oblikovanje njegove pasovne širine:

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

na primer

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

katerega izhod je:

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

Niz med oklepaji v izhodu se lahko spreminja od sistema do sistema in celo med naslednjimi izvajanji istega ukaza, saj predstavlja naslov za nalaganje knjižnice v fizičnem pomnilniku.

Če zgornji ukaz ne vrne nobenih rezultatov, to pomeni, da binarni sistem, proti kateremu je bil zagnan, ne uporablja libc, zato trickle v tem primeru ni mogoče uporabiti kot oblikovalnik pasovne širine.

Naučite se uporabljati Trickle v Linuxu

Najosnovnejša uporaba trickle je v samostojnem načinu. S tem pristopom se trickle uporablja za izrecno določanje hitrosti prenosa in nalaganja določene aplikacije. Kot smo že pojasnili, bomo zaradi kratkosti uporabili isto aplikacijo za teste prenosa in nalaganja.

Primerjali bomo hitrosti prenosa in nalaganja z in brez uporabe trickle. Možnost -d označuje hitrost prenosa v KB/s, medtem ko zastavica -u pove trickle, da omeji hitrost nalaganja z isto enoto. Poleg tega bomo uporabili zastavo -s, ki določa, da naj se trickle izvaja v samostojnem načinu.

Osnovna sintaksa za zagon trickle v samostojnem načinu je naslednja:

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

Če želite naslednje primere izvesti sami, poskrbite, da sta na odjemalskem računalniku nameščena trickle in ncftp (v mojem primeru 192.168.0.17).

Za naslednje teste uporabljamo prosto distribuirano datoteko Linux Fundamentals PDF (na voljo tukaj).

To datoteko lahko najprej prenesete v svoj trenutni delovni imenik z naslednjim ukazom:

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

Sintaksa za nalaganje datoteke na naš FTP strežnik brez pretoka je naslednja:

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

Kjer je /remote_directory pot imenika za nalaganje glede na domači uporabniški imenik, local-filename pa je datoteka v vašem trenutnem delovnem imeniku.

Natančneje, brez kapljanja dobimo najvišjo hitrost nalaganja 52,02 MB/s (upoštevajte, da to ni dejanska povprečna hitrost nalaganja, ampak trenutni začetni vrh), datoteka pa se naloži skoraj takoj:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

S trickle bomo omejili hitrost prenosa na 5 KB/s. Preden datoteko naložimo drugič, jo moramo izbrisati iz ciljnega imenika; sicer nas bo ncftp obvestil, da je datoteka v ciljnem imeniku ista, kot jo poskušamo naložiti, in ne bo izvedel prenosa:

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

Nato:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

V zgornjem primeru lahko vidimo, da je povprečna hitrost nalaganja padla na ~5 KB/s.

Najprej ne pozabite izbrisati PDF iz izvirnega izvornega imenika:

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

Upoštevajte, da bodo v naslednjih primerih oddaljeno datoteko prenesli v trenutni imenik na odjemalskem računalniku. To dejstvo je označeno s piko (‘.‘), ki se pojavi za naslovom IP strežnika FTP.

Brez curka:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

S trickle, ki omeji hitrost prenosa na 20 KB/s:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Zagon Trickle v nadzorovanem [neupravljanem] načinu

Trickle se lahko izvaja tudi v neupravljanem načinu po nizu parametrov, definiranih v /etc/trickled.conf. Ta datoteka opredeljuje, kako se trickled (demon) obnaša in upravlja trickle.

Poleg tega, če želimo nastaviti globalne nastavitve, ki jih bodo na splošno uporabljale vse aplikacije, bomo morali uporabiti ukaz trickled. Ta ukaz zažene demona in nam omogoča, da definiramo omejitve prenosa in nalaganja, ki si jih bodo delile vse aplikacije, ki se izvajajo skozi curek, ne da bi nam bilo treba vsakič določiti omejitve.

Na primer, tek:

# trickled -d 50 -u 10

To bo povzročilo, da bo hitrost prenosa in nalaganja katere koli aplikacije, ki teče skozi tok, omejena na 30 KB/s oziroma 10 KB/s.

Upoštevajte, da lahko kadar koli preverite, ali se trickled izvaja in s kakšnimi argumenti:

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

Izhod:

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

V tem primeru bomo uporabili videoposnetek »On je darilo«, ki ga je mogoče brezplačno distribuirati, na voljo za prenos s te povezave.

To datoteko bomo najprej prenesli v vaš trenutni delovni imenik z naslednjim ukazom:

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

Najprej bomo zagnali demona trickled z ukazom, navedenim zgoraj:

# trickled -d 30 -u 10

Brez curka:

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

Izhod:

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

S curkom:

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

Izhod:

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

Kot lahko vidimo v zgornjem izhodu, je hitrost prenosa nalaganja padla na ~10 KB/s.

Kot v primeru 2, bomo datoteko prenesli v trenutni delovni imenik.

Brez curka:

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

Izhod:

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

S curkom:

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

Izhod:

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

Kar je v skladu s prej nastavljeno omejitvijo prenosa (30 KB/s).

Opomba: Ko je demon zagnan, ni treba nastaviti posameznih omejitev za vsako aplikacijo, ki uporablja trickle.

Kot smo že omenili, lahko dodatno prilagodite oblikovanje pasovne širine trickle s pomočjo trickled.conf. Tipičen razdelek v tej datoteki je sestavljen iz naslednjega:

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

Kje,

  1. [storitev] označuje ime aplikacije, katere porabo pasovne širine nameravamo oblikovati.
  2. Prioriteta nam omogoča, da določimo, da ima storitev višjo prioriteto glede na drugo, s čimer ne dovolimo, da bi ena sama aplikacija prevzela vso pasovno širino, ki jo upravlja demon. Nižja kot je številka, več pasovne širine je dodeljena [storitev].
  3. Časovno glajenje [v sekundah]: določa, s kakšnimi časovnimi intervali bo poskušala aplikacija prenesti in/ali prejeti podatke. Manjše vrednosti (nekaj med razponom 0,1 – 1 s) so idealne za interaktivne aplikacije in bodo povzročile bolj neprekinjeno (gladko) sejo, medtem ko so nekoliko večje vrednosti (1 – 10 s) boljše za aplikacije, ki potrebujejo množični prenos. Če vrednost ni podana, se uporabi privzeta vrednost (5 s).
  4. Length-Smoothing [v KB]: ideja je enaka kot pri Time-Smoothing, vendar temelji na dolžini operacije V/I. Če vrednost ni podana, se uporabi privzeta vrednost (10 KB).

Sprememba vrednosti glajenja se bo prevedla v aplikacijo, ki jo je določil [storitev] s hitrostmi prenosa znotraj intervala namesto fiksne vrednosti. Žal ni formule za izračun spodnje in zgornje meje tega intervala, saj je odvisno predvsem od posameznega primera scenarija.

Sledi vzorčna datoteka trickled.conf v odjemalcu 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

S to nastavitvijo bo trickled dal prednost povezavam SSH pred prenosi FTP. Upoštevajte, da interaktivni proces, kot je SSH, uporablja manjše vrednosti za glajenje časa, medtem ko storitev, ki izvaja množične prenose podatkov (FTP), uporablja večjo vrednost.

Vrednosti glajenja so odgovorne za hitrosti prenosa in nalaganja v našem prejšnjem primeru, ki se ne ujemajo z natančno vrednostjo, ki jo je navedel demon trickled, ampak se premikajo v intervalu, ki je blizu nje.

[ Morda vam bo všeč tudi: Kako zaščititi in utrditi strežnik OpenSSH ]

Zaključek

V tem članku smo raziskali, kako omejiti pasovno širino, ki jo uporabljajo aplikacije, ki uporabljajo trickle na distribucijah, ki temeljijo na Fedori, in Debianu/izpeljankah. Drugi možni primeri uporabe vključujejo, vendar niso omejeni na:

  • Omejevanje hitrosti prenosa prek sistemskega pripomočka, kot je na primer odjemalec torrentov.
  • Omejitev hitrosti, s katero je mogoče posodobiti vaš sistem prek \\aptitude\\, če ste v sistemu, ki temelji na Debianu), sistema za upravljanje paketov.
  • Če vaš strežnik stoji za proxyjem ali požarnim zidom (ali je proxy ali požarni zid sam), lahko uporabite trickle, da nastavite omejitve tako pri prenosu kot nalaganju ali hitrosti komunikacije z odjemalci ali zunanjo stranjo.

Vprašanja in komentarji so zelo dobrodošli. Uporabite spodnji obrazec, da jih pošljete po naši poti.