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

10

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

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

O computador de destino (o servidor Windows) está executando um pool de armazenamento com paridade sobre 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. Está funcionando bom EXT4.

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

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

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

Eu fiz um rastreio do Wireshark por 35 segundos (presumivelmente longo o suficiente para ter certeza de que todos os ACKs eram para novos pacotes) e notei que havia algumas coisas que eu não esperava. (1) Não havia checksums para os ACKs (e alguns pacotes SMB) do Windows para o Ubuntu. No entanto, Wireshark alega que isso pode ser devido a "descarga de checksum IP". Ok, eu tenho um cartão muito legal lá. Eu suponho que é possível que a placa de rede possa fazer cálculos de soma de verificação. Bem. Seguindo em frente ... (2) "TCP ACKed unseen segment." Este eu tenho um problema com. O número ACK está dentro de um intervalo aceitável do que eu posso dizer, e muitas vezes há enormes blocos dessas mensagens. Talvez o Wireshark seja muito lento?

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

Adivinha : Meu palpite inicial é de que os cartões Rosewill mais baratos estão sendo inundados. Meu segundo palpite é que as coisas do tipo RAID de software em uma ponta ou outra estão sendo inundadas de coisas para fazer.

    
por Andy 20.08.2013 / 02:54

2 respostas

1

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

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

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

Além disso, não espere que uma única conexão TCP se beneficie de um link ligado, o tráfego quase sempre passa por um dos links; caso contrário, você acaba com 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 o "modo 4" (IEEE 802.3ad), existem basicamente dois modos de hash de transmissão, que determinam qual interface escravo enviar. Há hashing de camada 2 (padrão) e hashing de camada 3. Se enviar o volume de 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 em vez disso.

    
por 02.04.2014 / 12:24
0

Eu já tive duas placas Ethernet em um computador Ubuntu e, por algum motivo, não funcionou direito - ambos pareciam ter os mesmos pacotes, então às vezes eu recebia uma resposta às vezes, não, dependendo se a outra placa de rede pegou o embalado. Foi estranho. Eu devo tê-lo configurado de alguma forma, mas eu teria pensado que teria acabado de funcionar. Os cartões tinham endereços IP exclusivos, é claro.

De qualquer forma, seria simples para você experimentá-lo com apenas uma placa Ethernet na máquina conectada à rede apenas para descartar isso.

    
por 12.01.2014 / 11:02