Defina SO_TCP_NODELAY (desabilitando o algoritmo Nagle)

0

Como eu sei, temos uma opção de soquete SO_TCP_NODELAY para desativar o Nagle Algorithm, e descobri que ela é implementada na pilha TCP / IP em link . No entanto, eu não sei onde o código-fonte do Nagle Algorithm é implementado no kernel. Se você sabe, você poderia me ajudar?

    
por Naruto Nguyen 30.03.2018 / 13:00

1 resposta

1

Resposta curta: tcp_nagle_check () em net_ipv4_tcp_output.c

Você pode ver as condições para evitar Nagle no código:

/* Return false, if packet can be sent now without violation Nagle's rules:
 * 1. It is full sized. (provided by caller in %partial bool)
 * 2. Or it contains FIN. (already checked by caller)
 * 3. Or TCP_CORK is not set, and TCP_NODELAY is set.
 * 4. Or TCP_CORK is not set, and all sent packets are ACKed.
 *    With Minshall's modification: all sent small packets are ACKed.
 */
static bool tcp_nagle_check(bool partial, const struct tcp_sock *tp,
                            int nonagle)
{
        return partial &&
                ((nonagle & TCP_NAGLE_CORK) ||
                 (!nonagle && tp->packets_out && tcp_minshall_check(tp)));
}

Uma possível pilha de chamadas para esta função pode ser tcp_sendmsg_locked () - > tcp_push () - > __ tcp_push_pending_frames () - > tcp_write_xmit () - > tcp_nagle_test () - > tcp_nagle_check () tcp_sendmsg_locked () (em net / ipv4 / tcp.c) é a principal função para enviar dados. Em cada chamada para a função, obtém um segmento de dados de um soquete e o prepara para a transmissão. O algoritmo Nagle é uma otimização para agregar os dados que chegam através do soquete para otimizar o fluxo de transmissão. Talvez você também queira conferir TCP corking e auto-corking , como eles funcionam de forma semelhante ao Nagle, mas pode ter prioridade sobre a opção NO_DELAY. Para garantir que seus pacotes sejam enviados sem atraso, capture-os (com tcpdump) e verifique se o tamanho do pacote enviado é um pouco maior que o tamanho dos dados enviados pelo seu aplicativo (devido aos cabeçalhos adicionados).

    
por 03.04.2018 / 07:31