Estrutura do soquete do kernel e TCP_DIAG

17

Estou trabalhando em um software que se conecta a um servidor de dados em tempo real (usando TCP) e tenho algumas conexões caindo. Meu palpite é que os clientes não lêem os dados vindos do servidor com rapidez suficiente. Portanto, gostaria de monitorar meus soquetes TCP. Para isso, encontrei a ferramenta "ss".

Esta ferramenta permite ver o estado de cada socket - aqui está uma linha de exemplo da saída do comando ss -inm 'src *:50000'

ESTAB      0      0             184.7.60.2:50000       184.92.35.104:1105
  mem:(r0,w0,f0,t0) sack rto:204 rtt:1.875/0.75 ato:40

Minha pergunta é: o que a parte da memória significa?   Olhando para o código-fonte da ferramenta, descobri que os dados são provenientes de uma estrutura de kernel ( sock in sock.h ). Mais precisamente, vem dos campos:

r = sk->sk_rmem_alloc
w = sk->sk_wmem_queued;
f = sk->sk_forward_alloc;
t = sk->sk_wmem_alloc;

Alguém sabe o que eles querem dizer? Meus palpites são:

  • rmem_alloc : tamanho do buffer de entrada
  • wmem_alloc : tamanho do buffer de saída
  • sk_forward_alloc : ???
  • sk->sk_wmem_queued : ???

Aqui estão os tamanhos dos meus buffers:

net.ipv4.tcp_rmem = 4096        87380   174760
net.ipv4.tcp_wmem = 4096        16384   131072
net.ipv4.tcp_mem = 786432       1048576 1572864
net.core.rmem_default = 110592
net.core.wmem_default = 110592
net.core.rmem_max = 1048576
net.core.wmem_max = 131071
    
por Twister 09.03.2012 / 15:17

1 resposta

7

sk_forward_alloc é a memória alocada para a frente, que é a memória total atualmente disponível na cota do soquete.

sk_wmem_queued é a quantidade de memória usada pelo buffer de envio do soquete enfileirado na fila de transmissão e ainda não foi enviado ou ainda não foi reconhecido.

Você pode saber mais sobre o Gerenciamento de Memória TCP no capítulo 9 de Arquitetura TCP / IP, Design e Implementação no Linux Por Sameer Seth, M. Ajaykumar Venkatesulu

    
por 28.12.2012 / 00:03