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?
Como decido esses tamanhos para aumentar a taxa de transferência de dados?