Por que estou vendo um rendimento de transferência SMB tão baixo?

Por que estou vendo um rendimento de transferência SMB tão baixo?

Ok, há um pouco mais nesta história do que o título sugere.

Antecedentes e Ambiente: Estou copiando vários TB de um servidor Ubuntu mais antigo para um servidor Windows 2012 mais recente por SMB. (Tecnicamente, é hardware comum, mas são servidores por aqui.) Todo mundo está em uma LAN gigabit, e a caixa Ubuntu mais antiga tem uma interface vinculada. Acredito que o servidor Ubuntu tenha duas placas Ethernet Rosewill PCI-e 1x e o servidor Windows tenha uma placa Ethernet PCI Intel razoavelmente boa.

O computador de destino (o servidor Windows) está executando um pool de armazenamento com paridade em 4 unidades de 2 TB. Ele está executando o novo ReFS da Microsoft. O computador de origem (o servidor Ubuntu) está executando um espelho RAID de software. Ele está funcionando bem, EXT4.

Os dois servidores estão funcionando através de um único switch gigabit. Eu experimentei quebrar a ligação no computador de origem (Ubuntu) sem qualquer melhoria.

Problema: Não tenho problemas para transferir em velocidades razoáveis ​​de outros computadores para o servidor Windows. Outros computadores podem suportar 50-80 MB/s sem muita dificuldade, mas a transferência desse servidor Ubuntu não ultrapassa os 20 MB/s. 4+ TB a 20 MB/s leva muito tempo (algo como 2,3 dias) e estou me perguntando o que posso fazer para descobrir onde está o gargalo.

Sintomas: a CPU em ambos os computadores é mínima e certamente não está excessivamente ocupada. Os discos rígidos em ambos os computadores estão ativos, mas não sobrecarregados, e o CPU IOwait é quase 0% pelo menos no servidor Ubuntu.

Fiz um rastreamento do Wireshark por 35 segundos (presumivelmente tempo suficiente para garantir que todos os ACKs fossem para novos pacotes) e percebi que havia algumas coisas que eu não esperava. (1) Não houve somas de verificação para os ACKs (e ALGUNS pacotes SMB) do Windows para o Ubuntu. No entanto, Wireshark afirma que isso pode ser devido ao “descarregamento da soma de verificação de IP”. Ok, eu tenho um cartão muito legal aí. Suponho que seja possível que a placa de rede faça cálculos de soma de verificação. Multar. Continuando... (2) "Segmento invisível TCP ACKed." Este eu tenho um problema. O número ACK está dentro de um intervalo aceitável pelo que posso dizer, e muitas vezes há enormes blocos dessas mensagens. Talvez o Wireshark seja muito lento?

Resumo: A velocidade de transferência é uma droga (20 MB/s em Ethernet gigabit) e não sei por quê. Wireshark afirma que o Windows está reconhecendo coisas que nunca foram enviadas pelo Ubuntu.

Suposições: Meu palpite inicial é que os cartões Rosewill mais baratos estão ficando sobrecarregados. Meu segundo palpite é que as coisas do tipo RAID de software em uma extremidade ou outra estão sendo inundadas com coisas para fazer.

Responder1

Sua lacuna de desempenho corresponde a uma experiência comum quando o Samba (não tenho certeza se esse ainda é o padrão; foi por muito tempo) é configurado com o tamanho padrão do buffer de soquete de leitura e gravação de 1024 bytes.

Eu costumava ver isso frequentemente em máquinas Linux e Mac. Esperemos que ainda não seja esse o caso.

Existe um argumento de opção de soquete no arquivo de configuração do samba onde você pode definir o tamanho do buffer de leitura e gravação do soquete. Sugiro que você defina ambos para 8.192 bytes (8 KiB). 4 ou 8 KB geralmente é semelhante, mas não testei isso em um link de gigabit.

Além disso, não espere que uma única conexão TCP se beneficie de um link vinculado; o tráfego quase sempre passará por um dos links; caso contrário, você acabará tendo muitos pacotes fora de ordem para lidar; portanto, espere apenas um benefício de balanceamento de carga ao atender vários clientes. Mesmo assim, você deve procurar os diferentes modos de ligação e saber que, pelo menos para a ligação "modo 4" (IEEE 802.3ad), existem basicamente dois modos de hash de transmissão, que determinam em qual interface escrava enviar. Há hash de camada 2 (padrão) e hash de camada 3. Se enviar a maior parte dos seus dados via gateway, o hash da camada 2 não será bem distribuído, pois o endereço MAC do gateway será o mesmo. Considere usar a camada 3.

Responder2

Certa vez, tive duas placas Ethernet em um computador Ubuntu e, por algum motivo, não funcionou corretamente - ambas competiam pelos mesmos pacotes, parecia, então às vezes eu recebia uma resposta, às vezes não, dependendo se a outra placa de rede pegasse o embalado. Foi estranho. Devo tê-lo configurado incorretamente de alguma forma, mas pensei que simplesmente funcionaria. Os cartões tinham endereços IP exclusivos, é claro.

De qualquer forma, seria simples você experimentar com apenas UMA placa Ethernet na máquina conectada à rede só para descartar isso.

informação relacionada