Como o tamanho do cluster, o tamanho do buffer e o tamanho do pacote estão relacionados ao desempenho?

1

Estou criando um servidor em um sistema embarcado. Eu tenho um sistema de arquivos FAT em um cartão SD que contém um arquivo, que deve ser enviado via HTTP para algum cliente através de wifi que se conecta ao sistema.

Primeiro, tentei ler o arquivo byte by byte, que era muito lento. Para melhorar a leitura do arquivo, introduzi um buffer. Eu leio do arquivo para o buffer e, em seguida, escrevo o conteúdo do buffer para o fluxo que é enviado para o cliente:

file -> buffer -> network
  • Aumentar o tamanho do buffer aumenta a taxa de transferência de dados. Eu suponho que isso é por causa do número reduzido de operações de leitura para o sistema de arquivos.

  • No entanto, um buffer grande arbitrário (digamos 5000 bytes) é contraproducente. Eu suspeito que isso é devido ao bufferbloat. O servidor gasta muito tempo preenchendo o buffer, o que confunde a rede.

Aparentemente, há algum tamanho de buffer ideal, em que a velocidade de leitura é aumentada sem causar lentidão devido ao aumento de buffer.

Eu gostaria de aumentar o desempenho geral em termos de taxa de transferência de dados. Atualmente fico com 3Mbi / s, o que é muito lento. Estou no controle do tamanho do buffer e do tamanho do cluster. Posso melhorar o desempenho do sistema fazendo boas escolhas para esses dois valores?

  1. O tamanho do buffer e o tamanho do cluster devem ser os mesmos? O tamanho do buffer deve ser algum múltiplo inteiro do tamanho do cluster em geral (possivelmente > 1)?
  2. Devo escolher os dois de alguma forma que eles também se alinhem com o tamanho da carga útil da rede? (Eu não sou muito experiente com redes e não sei se existe algo como um tamanho fixo de carga útil)

Como decido esses tamanhos para aumentar a taxa de transferência de dados?

    
por cross 01.11.2016 / 10:04

0 respostas