Alguém está ciente das referências / medições de taxa de transferência para usar um soquete unix local para comunicação entre processos?
Quero ilustrar o benefício de desempenho de ter uma instância de banco de dados local no mesmo servidor que o software que está solicitando os dados do banco de dados vs. ter que se comunicar por um link de rede, especialmente um como Ethernet de gigabit, que espero ser bastante lento relativamente falando.
Ao pesquisar on-line, encontrei alguns parâmetros que mostram o número de operações por segundo, mas não a taxa de transferência por segundo (ou seja, 12 GB / s).
Entendo que o desempenho variará devido a coisas como talvez a taxa de transferência de memória em um determinado sistema ou outras características de hardware, mas apenas uma idéia aproximada é necessária.
Isso não se refere ao desempenho local do TCP ou uma comparação com isso.
fonte
Respostas:
Você pode usar o socat para um teste simples de velocidade do soquete UNIX.
Abaixo estão os resultados que recebo no meu laptop:
Memória em disco (SSD), através do soquete UNIX
Memória para memória, através do soquete UNIX
Memória para / dev / null (descarte), através do soquete UNIX
/ dev / zero a / dev / null, através do soquete UNIX
Como você pode ver, a taxa de transferência de teste de "memória para disco" é de 545 MB / s (ou seja, ~ 4360MiB / s), muito acima da taxa de transferência teórica máxima para a conexão Ethernet de 1 GB (que é ~ 1000/8 = 125 MB / s, nem mesmo considerando qualquer sobrecarga de protocolo).
PS
Observe que este é apenas um teste simples, usando algumas ferramentas simples, e não uma referência real e adequada .
fonte
Eu tive que ajudar as pessoas a entender o impacto das pilhas de aplicativos de várias camadas.
Para o aspecto das comunicações TCP, uso diferenças no RTT (tempo de ida e volta).
Para camada única, você pode comparar o endereço IP local (em uma NIC) com lo0 (loopback).
Para multicamadas, você compara / computa os endereços "mais distantes"; por exemplo, multicamada pode ser duas VM no mesmo host ou diferentes hosts no mesmo datacenter ou em diferentes datacenters. (talvez apenas a 500 metros de distância, mas ainda diferente).
FYI: para muitos aplicativos, as diferenças de RTT são desprezíveis, mas para aplicativos que fazem de 10 a 100 de milhares de pequenas mensagens para o tempo de RTT do aplicativo podem se tornar um gargalo.
(Vi situações em que o lote "demorou quase 6 horas a mais em várias camadas quando o RTT era 0,25 milissegundo a mais, em comparação com a camada única)
Então, cama de teste simples:
o
E meu programa de monitoramento é o tcpdump - com a opção -ttt
Então, em duas janelas diferentes eu tenho o tcpdump em execução:
Para os horários "locais": porta 80 tcpdump -i lo0 -n -ttt E para a porta 80 "tcpdump -I en1 -n -ttt" remota "
Nos dados abaixo - o objetivo não é fazer nenhuma análise, mas mostrar como você pode identificar 'diferenças' no tempo necessário para a conclusão das transações. Quando uma taxa de transferência de aplicativo é uma transação serial - a taxa de transferência por "s | min | hora" é afetada pelo tempo total necessário para "respostas". Achei isso mais fácil de explicar usando o conceito de RTT - tempo de ida e volta.
Para uma análise real, há coisas adicionais a serem observadas. Portanto, as únicas linhas que mostrarei são o handshake TCP inicial e o primeiro pacote de saída e o ACK de retorno. Para a comparação, compare os tempos delta de quanto tempo antes da "resposta" voltar.
127.0.0.1
192.168.129.63
observe o 01.XXXXXX - por um segundo de suspensão na interface "lo0"
192.168.129.72
máquina virtual no mesmo host - observe que o horário começa em 00.000000 - primeiro pacote exibido (e 01.XXXXXX nos outros dois endereços abaixo)
192.168.129.254
meu roteador - fora do host, não uma máquina virtual.
192.168.129.71
mesma conexão que 192.168.129.72, mas está 'ocupado' enquanto '72' está ocioso. Eu espero que os apertos de mão iniciais sejam quase idênticos
saltos múltiplos
este é o mesmo host, o mesmo resultado apache, mas agora via interface externa (6 saltos de IP, em vez de direto) - agora você pode ter o efeito de RTT de longa distância. (ps, modifiquei um pouco o endereço IP). Mais importante - observe que existem dois pacotes de saída após o handshake inicial antes do primeiro ACK após o retorno de um handshake.
Portanto, em vez do RTT de 25 ms, pense que o RTT é de 250 microssegundos, comparado a 25 microssegundos - e você tem transações de 500 mil (isso representa apenas 120 a 125 segundos a mais em comparação com o local, e o rendimento é, na verdade, comparável). Com transações de 50 milhões (como na situação real), você ganha 12500 segundos adicionais - o que adiciona cerca de 3,5 horas adicionais para "literalmente" o mesmo trabalho. (E parte da solução nesse caso era aumentar os pacotes - o o tamanho médio era originalmente de 400 a 450 bytes).
Outra coisa que eu "gosto" de usar o tcpdump é que é um programa geralmente disponível. Nada extra precisa ser instalado.
fonte