Protocolo Bacula y BBR para Backups de Internet, Pérdidas de Paquetes, Desconexiones, etc.

Copias de seguridad a través de redes degradadas (por ejemplo, con pérdida de paquetes) e Internet, en las cuales la conexión pasa por varios NAT, firewalls y enrutadores, tienden a afectar significativamente el rendimiento y la resiliencia de las conexiones TCP. Errores como los que siguen pueden ocurrir en Bacula.

El uso del protocolo de congestión BBR en las máquinas de Director, Storage e File Daemons De bacula en Linux mejora significativamente la resiliencia a estos errores. También se mejoran el tiempo de respuesta y el rendimiento de la red, ya que las desconexiones y la pérdida de paquetes afectan mucho menos las tasas de transferencia.

¿Qué es BBR?

BBR es una sigla que significa «Bottleneck Bandwidth and RTT» (Ancho de Banda del Estrangulamiento y Tiempo de Respuesta). El control de congestión BBR calcula la tasa de envío basada en la tasa de entrega estimada a partir de los ACK.

BBR fue contribuido al kernel de Linux 4.9 en 2016 por Google.

BBR aumentó significativamente el rendimiento y redujo la latencia para las conexiones en las redes internas de Google, así como para los servidores web de google.com y YouTube.

BBR solo requiere cambios en el lado del remitente, sin necesidad de cambios en la red o en el lado del receptor. Por lo tanto, se puede implementar de manera incremental en Internet actual o en centros de datos.

¿Cómo activar BBR?

El siguiente script de Shell implementa BBR.

modprobe tcp_bbr
echo "tcp_bbr" > /etc/modules-load.d/bbr.conf
echo "net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq" >> /etc/sysctl.conf
sudo sysctl -p
sysctl net.ipv4.tcp_congestion_control

Si el último comando muestra el protocolo BBR en la pantalla, como se muestra a continuación.

root@hfaria-P65:~# sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

Si se muestra otro protocolo, reinicie el servidor.

¿Cómo probar el rendimiento de la red?

iperf3 es una utilidad para realizar pruebas de rendimiento de la red.

$ sudo apt-get install -y iperf3

iperf3 puede utilizar la opción -C (o –congestion) para elegir el algoritmo de control de congestión. En nuestras pruebas, podemos especificar BBR.

-C, --congestion algo
  Establecer el algoritmo de control de congestión (solo Linux y FreeBSD). Un sinónimo más antiguo, --linux-congestion, para esta bandera se acepta pero está obsoleto.

iperf -C bbr -c example.com  # reemplace example.com con su objetivo de prueba

Nota: BBR TCP solo está en el lado del remitente, por lo que no necesita preocuparse si el receptor admite BBR. Tenga en cuenta que BBR es mucho más efectivo cuando se utiliza FQ (fair queuing) para ajustar el ritmo de los paquetes a un máximo del 90% de la velocidad de la línea.

¿Cómo puedo monitorear las conexiones TCP BBR en Linux?

Puede utilizar el comando ‘ss’ (otra utilidad para investigar sockets) para monitorear las variables de estado de BBR, incluyendo la tasa de pacing, cwnd, estimación de ancho de banda, estimación de min_rtt, etc.

Ejemplo de salida de ‘ss -tin’:

$ ss -tin
State       Recv-Q       Send-Q              Dirección Local:Puerto                 Dirección del Par:Puerto        Proceso
ESTABLECIDO       0            36                      10.0.0.55:22                 123.23.12.98:61030
     bbr wscale:6,7 rto:292 rtt:91.891/20.196 ato:40 mss:1448 pmtu:9000 rcvmss:1448 advmss:8948 cwnd:48 bytes_sent:95301
   bytes_retrans:136 bytes_acked:95129 bytes_received:20641 segs_out:813 segs_in:1091 data_segs_out:792 data_segs_in:481
   bbr:(bw:1911880bps,mrtt:73.825,pacing_gain:2.88672,cwnd_gain:2.88672) send 6050995bps lastsnd:4 lastrcv:8 lastack:8
   pacing_rate 5463880bps delivery_rate 1911928bps delivered:791 app_limited busy:44124ms unacked:1 retrans:0/2
   dsack_dups:1 rcv_space:56576 rcv_ssthresh:56576 minrtt:73.825

A continuación, se enumeran los campos que pueden aparecer:

ts     show string "ts" if the timestamp option is set

sack   show string "sack" if the sack option is set

ecn    show string "ecn" if the explicit congestion notification option is set

ecnseen
        show string "ecnseen" if the saw ecn flag is found in received packets

fastopen
        show string "fastopen" if the fastopen option is set

cong_alg
        the congestion algorithm name, the default congestion algorithm is "cubic"

wscale:<snd_wscale>:<rcv_wscale>
        if window scale option is used, this field shows the send scale factor and receive scale factor

rto:<icsk_rto>
        tcp re-transmission timeout value, the unit is millisecond

backoff:<icsk_backoff>
        used for exponential backoff re-transmission,  the  actual  re-transmission  timeout  value  is
        icsk_rto << icsk_backoff

rtt:<rtt>/<rttvar>
        rtt  is  the average round trip time, rttvar is the mean deviation of rtt, their units are mil‐
        lisecond

ato:<ato>
        ack timeout, unit is millisecond, used for delay ack mode

mss:<mss>
        max segment size

cwnd:<cwnd>
        congestion window size

pmtu:<pmtu>
        path MTU value

ssthresh:<ssthresh>
        tcp congestion window slow start threshold

bytes_acked:<bytes_acked>
        bytes acked

bytes_received:<bytes_received>
        bytes received

segs_out:<segs_out>
        segments sent out

segs_in:<segs_in>
        segments received

send <send_bps>bps
        egress bps

lastsnd:<lastsnd>
        how long time since the last packet sent, the unit is millisecond

lastrcv:<lastrcv>
        how long time since the last packet received, the unit is millisecond

lastack:<lastack>
        how long time since the last ack received, the unit is millisecond

pacing_rate <pacing_rate>bps/<max_pacing_rate>bps
        the pacing rate and max pacing rate

rcv_space:<rcv_space>
        a helper variable for TCP internal auto tuning socket receive buffer

Ejemplos de Mejora del Rendimiento de TCP

De Google

La Búsqueda de Google y YouTube implementaron BBR y experimentaron mejoras en el rendimiento de TCP.

Aquí hay ejemplos de resultados de rendimiento para ilustrar la diferencia entre BBR y CUBIC:

  • Resistencia a la pérdida aleatoria (por ejemplo, debido a búferes bajos): Considere una prueba TCP_STREAM de netperf con una duración de 30 segundos en una ruta emulada con un cuello de botella de 10 Gbps, RTT de 100 ms y una tasa de pérdida de paquetes del 1%. CUBIC obtiene 3.27 Mbps, mientras que BBR alcanza 9150 Mbps (2798 veces más alto).
  • Baja latencia con búferes inflados comunes en los enlaces de la última milla hoy en día: Considere una prueba TCP_STREAM de netperf con una duración de 120 segundos en una ruta emulada con un cuello de botella de 10 Mbps, RTT de 40 ms y un búfer de cuello de botella de 1000 paquetes. Ambos utilizan completamente el ancho de banda del cuello de botella, pero BBR puede hacerlo con un RTT promedio 25 veces menor (43 ms en lugar de 1.09 segundos).

De AWS CloudFront

Durante marzo y abril de 2019, AWS CloudFront implementó BBR. Según el blog de AWS: ‘Control de Congestión TCP BBR con Amazon CloudFront

El uso de BBR en CloudFront ha sido globalmente favorable, con mejoras en el rendimiento de hasta un 22% en el throughput agregado en diversas redes y regiones.

De Shadowsocks

Tengo un servidor Shadowsocks ejecutándose en una Raspberry Pi. Sin BBR, la velocidad de descarga del cliente es de aproximadamente 450 KB/s. Con BBR, la velocidad de descarga del cliente mejora a 3.6 MB/s, lo que es 8 veces más rápido que el estándar.

BBR v2

Hay un trabajo en curso para BBR v2, que aún está en fase alfa.

Resolución de Problemas

sysctl: setting key ‘net.core.default_qdisc’: No such file or directory

sysctl: setting key "net.core.default_qdisc": No such file or directory

La razón es que el módulo del kernel tcp_bbr aún no se ha cargado. Para cargar tcp_bbr, ejecute el siguiente comando:

sudo modprobe tcp_bbr

Para verificar si tcp_bbr está cargado, use lsmod. Por ejemplo, con el siguiente comando, debería ver la línea tcp_bbr:

$ lsmod | grep tcp_bbr
tcp_bbr                20480  3

«Si el comando sudo modprobe tcp_bbr no funciona, reinicie el sistema.

Referencia

Disponível em: pt-brPortuguês (Portugués, Brasil)enEnglish (Inglés)esEspañol

Deja una respuesta