Rinha de Backend - 2024/Q1 - LMDB

Posted on in c++, docker, web, rinha

Hoje foi divulgado o resultado da Rinha de Backend - 2024/Q1. Não houve um ranking final dos projetos, mas os logs individuais dos testes de cada projeto foram disponibilizados. Que comece a Rinha de Análise de Dados :).

Resolvi fazer um script que agregasse todos esses dados e gerei essa planilha.

Me surpreendi com meu projeto com LMDB ter sido o único com p75 = 0ms, já que algumas pessoas fizeram sistemas específicos de persistência que poderiam ser muito rápidos.

Meu entendimento, baseado em algumas análises de performance que tinha feito, é que no limite do stress test, isto é, a otimização final, se trata de chamadas ao kernel (syscalls), que incluia a comunicação TCP/IP e leitura e gravação dos dados.

Quase todos desligaram proteções usadas em sistemas de produção, como fsync de arquivos e logs de transações, mas mesmo assim, chamadas síncronas ao kernel ainda eram feitas.

E aqui entra o detalhe do LMDB. Ele mapeia o arquivo em páginas de memória compartilhadas entre os processos, evitando syscalls síncronas para gravação dos dados.