2 Luglio 2019

BBR TCP: la formula magica per le prestazioni della rete.

Come velocizzare il download di un sito web per connessioni lente come quella 3G ?

Migliorare prestazioni di rete con TCP BBR

A detta di molti, Internet di oggi non sposta i dati come dovrebbe. La maggior parte degli utenti di telefoni cellulari del mondo presenta ritardi da secondi a minuti; il Wi-Fi pubblico negli aeroporti e nei luoghi di conferenza è spesso peggiore.

I ricercatori scientifici universitari di dipartimenti di fisica o climatologia hanno bisogno ad esempio di scambiare petabyte di dati al giorno con collaboratori globali ma trovano che la loro infrastruttura multi-Gbps accuratamente progettata spesso fornisce solo pochi Mbps su distanze intercontinentali.

Questi problemi derivano da una scelta progettuale fatta quando il controllo della congestione TCP è stato creato nell’ nterpretazione degli anni ’80 della perdita di pacchetti come “congestione”.

Questa equivalenza era vera al momento, ma era a causa dei limiti tecnologici, non dei primi principi. Poiché i NIC (controller di interfaccia di rete) si sono evoluti da Mbps a Gbps e chip di memoria da KB a GB, la relazione tra perdita di pacchetti e congestione è diventata più tenue.

Oggi il controllo della congestione basato sulla perdita di TCP, anche con l’attuale best of breed, CUBIC11, è la causa principale di questi problemi.

Quando i buffer del collo di bottiglia sono grandi, il controllo della congestione basato sulla perdita li mantiene pieni, causando il bufferbloat.

Quando i buffer del collo di bottiglia sono piccoli, il controllo della congestione basato sulla perdita interpreta erroneamente la perdita come segnale di congestione, portando a un basso throughput. La risoluzione di questi problemi richiede un’alternativa al controllo della congestione basato sulla perdita.

Trovare questa alternativa richiede una comprensione di dove e come ha origine la congestione della rete.

È qui che entra in gioco TCP BBR. È un algoritmo di controllo della congestione TCP creato per la congestione di Internet moderna.

TCP: la condivisione della banda è importante.

TCP cerca di bilanciare la necessità di essere veloci (trasmissione rapida dei dati) e bilanciati (condividere la banda per più utenti), con molto più peso sull’essere bilanciati.

La maggior parte delle implementazioni TCP utilizza un algoritmo di backoff che porta a ottenere circa ½ larghezza di banda.

Se insomma hai una banda in uscita di 1 gigabit per secondo sul tuo server, stai abbastanza certo che il traffico in uscita per il tuo server Web che gira su TCP difficilmente supererà i 500 o 600 megabit al secondo.

Questo è il problema principale con TCP, il suo utilizzo porta a sprecare (o meglio inutilizzare) banda.

BBR TCP: i concetti importanti

Puoi leggere il documento per ulteriori dettagli, ma il succo del discorso è che BBR è una tecnologia di controllo della congestione che:

È progettato per rispondere alla congestione effettiva, piuttosto che alla perdita di pacchetti. Il team di BBR ha progettato l’algoritmo con il desiderio di avere qualcosa che risponda alla congestione effettiva, piuttosto che alla perdita di pacchetti. BBR modella la rete per inviare alla velocità della larghezza di banda disponibile ed è 2700 volte più veloce dei precedenti TCP su un collegamento da 10 Gb, 100 ms con perdita dell’1%

Incentrato sul miglioramento delle prestazioni della rete quando la rete non è molto buona. TCP BBR bilancia più accuratamente equità e utilizzo, con conseguente migliore velocità di download sulla stessa rete. È più evidente in situazioni in cui la rete è danneggiata (tuttavia, non ti fa male se sei su una rete pulita e cigolante)

Non richiede al cliente di implementare BBR . Questa è la vera ricetta magica. Algoritmi precedenti come QUIC richiedevano che client e server avessero entrambi implementato l’algoritmo. BBR non richiede che il client utilizzi anche BBR. Ciò è particolarmente rilevante nei paesi in via di sviluppo che utilizzano piattaforme mobili meno recenti e hanno una larghezza di banda limitata, o aree in cui siti e servizi non hanno ancora effettuato il passaggio. Insomma se il tuo browser non supporta QUIC non c’era modo di migliorare nulla.

Vediamo meglio BBR da vicino su strada.

Tutto ciò suona bene, ma vediamo quanto è buona questa tecnologia nella pratica e non solo nella teoria. Per testare le cose, ho impostato due VM in due regioni diverse e ho eseguito un rapido test Iperf per verificare le loro prestazioni:

[4] 0.0-10.0 sec 9.97 GBytes 8.55 Gbits / sec

Per simulare le condizioni ideali in cui BBR è utile (perdita di pacchetti elevata) eseguiamo il seguente comando tc, che simula la perdita di pacchetti ad una certa percentuale.

sudo tc qdisc add dev eth0 root netem loss 1.5%

Quando le macchine virtuali esistenti si connettono, vediamo un calo significativo delle prestazioni (che ci aspetteremmo):

[3] 0.0-10.3 sec 1.10 GByte 921 Mbits / sec

Quindi, abbiamo attivato BBR, sul lato server solo utilizzando il seguente comando (disponibile solo su Kernel Linux Maggiore al 4.10):

sysctl -w net.ipv4.tcp_congestion_control = bbr

Abbiamo eseguito lo stesso test Iperf e

[3] 0.0-10.0 sec 2.90 GBytes 2.49 Gbits / sec

Vediamo quasi 2 volte un utilizzo della larghezza di banda della connessione raw solo dopo aver impostato  un semplice flag nel server.

 

Dove usare TCP BBR? Dappertutto.

Di base non esiste un reale motivo per non usare una tecnologia come TCP BBR e ragionare dove andrebbe usata e dove no sarebbe tempo sprecato e forse anche stupido.

Certamente, la maggior parte del vantaggio si vedrà sugli endpoint client in aree con cattive condizioni di traffico . Quindi, se lo cambi tra le VM, non allarmarti se le cose non sono significativamente migliori. Detto questo, non c’è nessun svantaggio nell’usarlo, anche nelle aree di buona connessione.

Va detto che tra i suoi usi non standard che ad esempio l’implementazione di BBR può aiutare a gestire un attacco DDOS di tipo volumetrico basato su TCP o effetti di Slashdotting in cui un sito Web viene raggiunto da centinaia di migliaia di visitatori al minuto.

In fondo si tratta solo di abilitare un Kernel Linux maggiore del 4.10 e abilitare un flag, con un semplice comando da riga di comando.

Perchè non farlo ?

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Facebook, Inc. detiene i diritti su Facebook®; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Questo sito non è affiliato, sponsorizzato, o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello Europeo da MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italia.

Torna in alto