GNU/Linux >> Tutoriales Linux >  >> Linux

Establecer TCP_QUICKACK y TCP_NODELAY

Utilice TCP_QUICKACK, no TCP_NODELAY

Activar TCP_NODELAY tiene efectos similares, pero puede empeorar el rendimiento para escrituras pequeñas. Si escribe un ciclo que envía solo unos pocos bytes (en el peor de los casos, un byte) a un socket con "escribir()", y el algoritmo Nagle está deshabilitado con TCP_NODELAY, cada escritura se convierte en un paquete IP. Esto aumenta el tráfico por un factor de 40, con encabezados IP y TCP para cada carga útil. La prevención de Tinygram no le permitirá enviar un segundo paquete si tiene uno en vuelo, a menos que tenga suficientes datos para llenar el paquete de tamaño máximo. Acumula bytes por un tiempo de ida y vuelta, luego envía todo en la cola. Eso es casi siempre lo que quieres. Si tiene configurado TCP_NODELAY, debe ser mucho más consciente de los problemas de almacenamiento en búfer y vaciado. Nada de esto importa para las transferencias unidireccionales masivas, que en la actualidad son la mayoría de HTTP. (Nunca he mirado el impacto de esto en el protocolo de enlace SSL, donde podría importar). Versión corta:establecer TCP_QUICKACK. Si encuentra un caso en el que eso empeore las cosas, hágamelo saber. Juan Nagle

https://noticias.ycombinator.com/item?id=10608356


No hay una relación directa entre esas dos opciones, solo tienen propósitos diferentes.

TCP_NODELAY está destinado a deshabilitar/habilitar el almacenamiento en búfer de segmentos para que los datos puedan enviarse a pares lo más rápido posible, por lo que generalmente se usa para mejorar la utilización de la red. TCP_QUICKACK se utiliza para enviar acuses de recibo lo antes posible en lugar de demorarse en algún intercambio de nivel de protocolo, y no es estable/permanente, las transacciones TCP posteriores (que pueden ocurrir bajo el capó) pueden ignorar esta opción según el procesamiento de nivel de protocolo real o cualquier desacuerdo real entre la configuración del usuario y el comportamiento de la pila.

NOTA TCP_NODELAY es portátil mientras TCP_QUICKACK no lo es (solo funciona bajo Linux 2.4.4+).


TCP_QUICKACK y TCP_NODELAY afectar diferentes operaciones en TCP. El tcp(7) La página de manual describe qué opciones de socket para TCP interfieren entre sí, p. TCP_CORK y TCP_NODELAY .


Respuesta corta

  • Para deshabilitar el algoritmo de almacenamiento en búfer de Nagle, use la opción de socket TCP_NODELAY.
  • Para deshabilitar los ACK retrasados, use la opción de socket TCP_QUICKACK.

Detalles

  • Algoritmo de Nagle

    • El algoritmo de Nagle, llamado así por su creador John Nagle, es un mecanismo para mejorar la eficiencia de TCP al reducir la cantidad de paquetes pequeños enviados a través de la red.
    • El objetivo era evitar que un nodo transmitiera muchos paquetes pequeños si la aplicación entrega los datos al socket con bastante lentitud.
    • Si un proceso hace que se transmitan muchos paquetes pequeños, es posible que esté creando una congestión de red indebida. Esto es especialmente cierto si la carga útil de un paquete es más pequeña que los datos del encabezado TCP.
  • ACK retrasado

    • El acuse de recibo retrasado de TCP o ACK retrasado es otra técnica utilizada por algunas implementaciones de TCP en un esfuerzo por mejorar el rendimiento de la red y reducir la congestión.
    • El ACK retrasado se inventó para reducir la cantidad de ACK necesarios para reconocer los segmentos y reducir la sobrecarga del protocolo.
    • El ACK retrasado significa que TCP no reconoce de inmediato cada uno de los segmentos TCP recibidos. Se pueden combinar varias respuestas ACK en una sola respuesta, lo que reduce la sobrecarga del protocolo.
  • El algoritmo de Nagle y el ACK retrasado no funcionan bien juntos en una red TCP/IP

    • El ACK retrasado intenta enviar más datos por segmento si puede. Pero parte del algoritmo de Nagle depende de un ACK para enviar datos.
    • El algoritmo de Nagle y los ACK retrasados ​​juntos crean un problema porque los ACK retrasados ​​están esperando para enviar el ACK mientras que el de Nagle está esperando para recibir el ACK
  • ¿Cómo puedo resolver los problemas causados ​​por el algoritmo de Nagle y los ACK retrasados?

    • Habilite TCP_NODELAY para deshabilitar el algoritmo de Nagle a través de opciones de socket globales en los servidores
    • Realice ajustes de perfil en servidores proxy y Load Balancers:esto es especialmente relevante si está ejecutando aplicaciones o entornos que solo a veces tienen protocolos de conversación y tráfico altamente interactivo. Al activar y desactivar dinámicamente el algoritmo de Nagle y TCP_NODELAY en el nivel del balanceador de carga, puede mantener el funcionamiento óptimo incluso de mezclas de tráfico altamente heterogéneas.
    • Reduzca el temporizador de ACK retrasado en sus servidores y balanceadores de carga. A veces, este tipo de optimización se maneja en el software, en el nivel de la aplicación, pero cuando ese no es el caso, aún puede administrar dinámicamente el temporizador ACK en el nivel del servidor o del balanceador de carga.
    • Mientras realiza estos cambios, vigile atentamente el tráfico de su red y vea cómo cada modificación afecta la congestión.

Para obtener más detalles, consulte este


Linux
  1. Automatice la respuesta usando Expect y Autoexpect en Linux

  2. Instale python-openstackclient en Linux y Mac OS

  3. Configure un vhost de Apache en Ubuntu 20.04 y Debian 10

  4. Configurar y usar SQL Server Management Studio (SSMS)

  5. Cómo configurar correctamente zram y swap

Cómo instalar y configurar SeedDMS

Cómo configurar la clave pública y privada SSH en Linux

Cómo configurar la fecha, la hora y la zona horaria en RHEL 8

Cómo configurar la fecha y la hora en Linux

Cómo configurar y desactivar variables de entorno en Linux

Cómo instalar y configurar WordPress con Ansible