1 pontos por GN⁺ 2024-07-14 | Ainda não há comentários. | Compartilhar no WhatsApp

Otimização do servidor de Tablebase

Resolvendo a latência de cauda
  • O servidor de tablebase Syzygy de 7 peças teve dificuldade para processar requisições enquanto realizava a verificação de integridade do RAID
  • A nova abordagem mudou para usar dm-integrity com LVM, fazendo a verificação manual sempre que um bloco de dados é lido
  • Para migrar 17 TiB de tablebases sem downtime, foi configurado um segundo servidor para executar testes de benchmark
Nova configuração de hardware
  • 32 GiB de RAM
  • 2 x 201 GiB NVMe (o servidor anterior não tinha espaço em SSD)
  • 6 x 5.46 TiB HDD (o servidor anterior tinha apenas 5 discos)
  • Sistema operacional: Debian bookworm
A importância do monitoramento
  • Usando RAID 5, é possível se recuperar da falha de um único disco e distribuir leituras aleatórias entre todos os discos
  • Nos testes iniciais, o desempenho parecia bom, mas o monitoramento revelou que nem todos os discos estavam participando de forma equilibrada
Resultados do benchmark
  • O servidor recebe de 10 a 35 requisições por segundo
  • O teste de benchmark foi realizado registrando 1 milhão de requisições
  • O tempo médio de resposta é rápido, mas a latência de cauda é alta
  • pread apresentou desempenho melhor que mmap
Comparação entre mmap e pread
  • mmap: mapeia o arquivo na memória e lida com leituras de disco de forma transparente, mas dificulta o tratamento de erros
  • pread: reporta erros de leitura por meio do valor de retorno da chamada de sistema
  • pread tem desempenho melhor porque blocos de dados mapeados em memória podem causar duas leituras de disco ao atravessar limites de página
O efeito reverso de POSIX_FADV_RANDOM
  • Ao usar POSIX_FADV_RANDOM, o sistema operacional recebe a dica de que o acesso ao arquivo é aleatório para reduzir a pressão no page cache, mas na prática o efeito foi o oposto
  • O padrão de acesso à tablebase pode não ser aleatório
Aproveitando o espaço limitado em SSD
  • Para usar o espaço do SSD com eficiência, a lista de comprimentos de blocos esparsos e a lista de comprimentos de blocos foram armazenadas no SSD, garantindo no máximo 1 leitura lenta de disco
  • Foi usado RAID 0 em vez de RAID 1, abrindo mão da redundância para otimizar o desempenho
Paralelização de leitura
  • Para mostrar os valores DTZ de todos os lances na interface do usuário, uma requisição média gera 23 probes WDL e 70 probes DTZ
  • A paralelização do processamento das requisições reduz a latência de cauda
Desempenho em ambiente real
  • Foi confirmado que as otimizações do cenário de benchmark também ajudam em ambiente real

# Resumo do GN⁺

  • Este texto aborda o processo de otimização do servidor de tablebase do Lichess
  • Diversas abordagens para reduzir a latência de cauda foram testadas, e o desempenho foi validado com testes de benchmark
  • O texto trata de temas como a comparação entre mmap e pread, o efeito reverso de POSIX_FADV_RANDOM, o aproveitamento do espaço em SSD e a paralelização de leitura
  • O artigo pode ser útil para desenvolvedores interessados em otimização de servidores, e um projeto com funcionalidade semelhante é o Stockfish

Ainda não há comentários.

Ainda não há comentários.