Questão Ferramentas de linha de comando do Linux para analisar a latência do sistema operacional + NIC TCP


Eu estou esperando encontrar uma ferramenta Linux existente para medir a latência:

Estou tentando diagnosticar quanta latência meu sistema operacional e placa NIC estão adicionando à latência do TCP no Linux. Eu olhei para as seguintes ferramentas, mas todas (pelo menos no nível da superfície) mediram a largura de banda (Mbps / seg) em vez da latência (nanossegundos para a transmissão de 1 pacote de tamanho x).

nttcp nuttcp netperf iperf

Se eu fosse escrever um teste personalizado, provavelmente faria o seguinte:

Cliente:

  1. Crie uma mensagem falsa do comprimento especificado com algum preenchimento para um identificador incremental. Abra uma conexão TCP (com o direito
    parâmetros como TCP_NODELAY, etc)
  2. Faça um loop e envie mensagens contendo um identificador incremental. Armazene a hora atual do sistema (em nanos) associada ao identificador.
  3. Ouça as respostas, registre a hora atual e registre a latência desse identificador de forma assíncrona

Servidor

  1. Ouça uma conexão
  2. Repetir qualquer mensagem recebida

Supondo que ambas as caixas tinham a mesma configuração (configurações, placas, SO, CPU, etc), estão relativamente próximas umas das outras na rede, e uma pessoa conhece aproximadamente a contribuição de latência da rede, pode obter uma estimativa aproximada da contribuição do NOS e comece a testar várias configurações.

Também é possível obter uma imagem mais precisa da latência usando um sniffer de rede e espionando as linhas entre os dois hosts, calculando a latência entre os dois lados para um ID e, em seguida, subtraindo-o da latência medida internamente.

Então, alguém conhece uma ferramenta ou até mesmo algum código clichê para testar esse tipo de coisa?


3


origem


@obrok Eu queria que fosse tão fácil. Ping usa ICMP, em vez de TCP, então eu não estaria testando a eficácia da pilha inteira. Além disso, haveria uma latência significativa na caixa do servidor manipulando cada pacote, já que normalmente o inetd está executando os processos de escuta e bifurcação para manipular os pacotes ICMP. Em termos práticos, espero ver latências em torno de 2 a 10 microssegundos, mas vejo o ping consumindo mais de 25 microssegundos. Então, para esclarecer, ele precisa testar o TCP e otimizar a introdução de switches / forks / etc extras de contexto, além daquelas partes do handoff TCP padrão.


Respostas:


Existe uma ferramenta chamada qperf que pode fornecer essas estatísticas. No entanto, é obrigado a pacotes OFED / RDMA.

# qperf -v xx.xx.xx.xx tcp_lat udp_lat
tcp_lat:
    latency        =  29.2 us
    msg_rate       =  34.2 K/sec
    loc_cpus_used  =    41 % cpus
    rem_cpus_used  =  11.5 % cpus
udp_lat:
    latency        =  24.8 us
    msg_rate       =  40.4 K/sec
    loc_cpus_used  =    34 % cpus
    rem_cpus_used  =     4 % cpus

2





Você estava procurando por ping por acaso?


1



e traceroute/tracert ? Boa sorte a todos! - shellter


Dê uma olhada na ferramenta de desempenho do kernel (ferramentas / perf). Pode pelo menos fornecer alguns dados na parte NIC.

Há também a suíte LTTng com algum suporte de rastreamento net e syscall. O que você precisa no lado do software é o tempo entre a entrada do sys_write () e a saída da função no final da cadeia de chamada start_xmit (), então você pode ter que inserir o seu próprio pontos de traço.


0





Acabei de encontrar quase exatamente o que estou procurando (menos o seqüenciamento que eu posso cruzar a referência com um sniffer, mas tudo bem): http://linux.die.net/man/1/netpipe


0