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: Português (Portugués, Brasil)English (Inglés)Español