Fase 4: Tuning de Performance
-2026-02-15
-Uma rede P2P que atravessa NATs mas engasga com seu proprio I/O nao serve de -muito. A Fase 4 continua com tuning de performance: centralizacao da -configuracao do banco de dados, cache de blobs de fragmentos em memoria, -gerenciamento de ciclo de vida de conexoes QUIC e eliminacao de leituras -desnecessarias de disco no hot path de atestacao.
-O principio orientador foi o mesmo do resto do Tesseras: fazer a coisa mais
-simples que realmente funciona. Sem alocadores customizados, sem estruturas de
-dados lock-free, sem complexidade prematura. Um StorageConfig centralizado, um
-cache LRU, um reaper de conexoes e uma correcao pontual para evitar reler blobs
-que ja tinham checksum calculado.
O que foi construido
-Configuracao SQLite centralizada (tesseras-storage/src/database.rs) — Um
-novo struct StorageConfig e funcoes open_database() / open_in_memory() que
-aplicam todos os pragmas SQLite em um unico lugar: journal mode WAL, foreign
-keys, modo synchronous (NORMAL por padrao, FULL para hardware instavel como
-RPi + cartao SD), busy timeout, tamanho do cache de paginas e intervalo de
-autocheckpoint WAL. Anteriormente, cada ponto de chamada abria uma conexao e
-aplicava pragmas ad hoc. Agora o daemon, CLI e testes passam todos pelo mesmo
-caminho. 7 testes cobrindo foreign keys, busy timeout, journal mode, migracoes,
-modos synchronous e criacao de arquivos WAL em disco.
Cache LRU de fragmentos (tesseras-storage/src/cache.rs) — Um
-CachedFragmentStore que envolve qualquer FragmentStore com um cache LRU
-ciente de bytes. Blobs de fragmentos sao cacheados na leitura e invalidados na
-escrita ou exclusao. Quando o cache excede seu limite de bytes configurado, as
-entradas menos recentemente usadas sao removidas. O cache e transparente: ele
-proprio implementa FragmentStore, entao o resto da pilha nao sabe que esta la.
-Metricas Prometheus opcionais rastreiam hits, misses e uso atual de bytes. 3
-testes: hit no cache evita leitura interna, store invalida cache, remocao quando
-excede bytes maximos.
Metricas Prometheus de storage (tesseras-storage/src/metrics.rs) — Um
-struct StorageMetrics com tres contadores/gauges: fragment_cache_hits,
-fragment_cache_misses e fragment_cache_bytes. Registrado no registry
-Prometheus e conectado ao cache de fragmentos via with_metrics().
Correcao do hot path de atestacao (tesseras-replication/src/service.rs) —
-O fluxo de atestacao anteriormente lia cada blob de fragmento do disco e
-recalculava seu checksum BLAKE3. Como list_fragments() ja retorna FragmentId
-com um checksum armazenado, a correcao e trivial: usar frag.checksum ao inves
-de blake3::hash(&data). Isso elimina uma leitura de disco por fragmento
-durante atestacao — para uma tessera com 100 fragmentos, sao 100 leituras a
-menos. Um teste com expect_read_fragment().never() verifica que nenhuma
-leitura de blob acontece durante atestacao.
Ciclo de vida do pool de conexoes QUIC
-(tesseras-net/src/quinn_transport.rs) — Um struct PoolConfig controlando
-maximo de conexoes, timeout de inatividade e intervalo do reaper.
-PooledConnection envolve cada quinn::Connection com um timestamp
-last_used. Quando o pool atinge capacidade maxima, a conexao inativa mais
-antiga e removida antes de abrir uma nova. Uma tarefa reaper em background
-(Tokio spawn) periodicamente fecha conexoes que ficaram inativas alem do
-timeout. 4 novas metricas de pool: tesseras_conn_pool_size, pool_hits_total,
-pool_misses_total, pool_evictions_total.
Integracao no daemon (tesd/src/config.rs, main.rs) — Uma nova secao
-[performance] na configuracao TOML com campos para tamanho de cache SQLite,
-modo synchronous, busy timeout, tamanho de cache de fragmentos, maximo de
-conexoes, timeout de inatividade e intervalo do reaper. O main() do daemon
-agora chama open_database() com o StorageConfig configurado, envolve
-FsFragmentStore com CachedFragmentStore e vincula QUIC com o PoolConfig
-configurado. A dependencia direta de rusqlite foi removida do crate do daemon.
Migracao do CLI (tesseras-cli/src/commands/init.rs, create.rs) — Ambos
-os comandos init e create agora usam tesseras_storage::open_database() com
-o StorageConfig padrao ao inves de abrir conexoes rusqlite diretamente. A
-dependencia de rusqlite foi removida do crate do CLI.
Decisoes de arquitetura
--
-
- Padrao decorator para cache:
CachedFragmentStoreenvolve -Box<dyn FragmentStore>e implementaFragmentStoreele proprio. Isso -significa que cache e opt-in, composavel e invisivel para consumidores. O -daemon habilita; testes podem pular.
- - Remocao ciente de bytes: o cache LRU rastreia bytes totais, nao contagem -de entradas. Blobs de fragmentos variam muito em tamanho (um fragmento de -texto de 4KB vs um shard de foto de 2MB), entao contar entradas daria uma -visao enganosa do uso de memoria. -
- Sem crate de pool de conexoes: ao inves de trazer uma biblioteca generica
-de pool, o pool de conexoes e um wrapper fino sobre
-
DashMap<SocketAddr, PooledConnection>com um reaper Tokio. Conexoes QUIC sao -multiplexadas, entao o "pool" e realmente sobre gerenciamento de ciclo de vida -(limpeza de inativos, maximo de conexoes) e nao sobre emprestar/devolver.
- - Checksums armazenados ao inves de releituras: a correcao de atestacao e
-intencionalmente minima — uma linha alterada, uma leitura de disco removida
-por fragmento. Os checksums ja estavam armazenados no SQLite por
-
store_fragment(), apenas nao estavam sendo usados.
- - Configuracao centralizada de pragmas: um unico struct
StorageConfig-substitui chamadasPRAGMAespalhadas. O flagsqlite_synchronous_full-existe especificamente para implantacoes em Raspberry Pi onde o kernel pode -crashar e perder transacoes WAL nao checkpointadas.
-
O que vem a seguir
--
-
- Fase 4 continuacao — Shamir's Secret Sharing para herdeiros, tesseras -seladas (criptografia time-lock), auditorias de seguranca, onboarding de nos -institucionais, deduplicacao de storage, empacotamento para OS -
- Fase 5: Exploracao e Cultura — navegador publico de tesseras por -era/localizacao/tema/idioma, curadoria institucional, integracao genealogica, -exportacao para midia fisica (M-DISC, microfilme, papel livre de acido com QR) -
Com tuning de performance implementado, Tesseras lida com o caso comum de forma -eficiente: leituras de fragmentos acertam o cache LRU, atestacao pula I/O de -disco, conexoes QUIC inativas sao removidas automaticamente e o SQLite e -configurado consistentemente em toda a pilha. Os proximos passos focam em -funcionalidades criptograficas (Shamir, time-lock) e hardening para implantacao -em producao.
- -