Skip to content

HashPilot v0.5.6 — menos processos, menos disco e interface mais leve

Pre-release
Pre-release

Choose a tag to compare

@renanlocatizfernandes renanlocatizfernandes released this 03 Nov 02:30
· 92 commits to main since this release

Use a v0.5.7. Ela corrige um defeito anterior a esta versão: Atualizar serviço (UAC) com o painel aberto pelo atalho (pythonw.exe) encerrava o serviço e não o iniciava de novo, deixando a mineração parada.

v0.5.6 — menos processos, menos disco e interface mais leve

Versão de eficiência: o painel e o serviço do rig fazem o mesmo trabalho com menos processos externos, menos leitura de disco e um banco que cresce bem menos. Nenhuma regra de mineração, carteira, contribuição, limite térmico ou identidade de GPU mudou.

Medições nesta máquina

RTX 3070 física, Windows 11, serviço v0.5.5 minerando. Medidas com a mesma GPU e o mesmo log, comparando o commit da v0.5.5 com esta versão:

O quê v0.5.5 v0.5.6
Ciclo de coleta do painel (15 ciclos) 152 ms e 2 processos por ciclo (tasklist + nvidia-smi) 8 ms e 0 processos, usando o snapshot recém-gravado pelo serviço
Detecção de GPU (a cada 30 s, no painel e no serviço) 15 chamadas nvidia-smi, 712 ms 3 chamadas, 148 ms; 1 chamada, 43 ms, com capacidades em cache
Listar o processo do minerador tasklist: 73 ms Toolhelp32: 7 ms
gpu_telemetry.miner_json por amostra cerca de 2,6 KB (incluía 35 linhas de log) cerca de 0,3 KB

A identidade detectada (driver, PCI, VBIOS, limites, clocks suportados, catálogo) foi comparada campo a campo e é idêntica nas duas versões. Com seis placas, a detecção antiga faria cerca de 90 chamadas a cada 30 s em cada processo; o cenário de seis GPUs continua simulado nos testes. A economia de banco é uma estimativa: cerca de 95 MB por dia e por GPU a menos com amostras a cada 2 s. Linhas já gravadas não são alteradas nem apagadas.

As 20 melhorias

  1. Detecção NVIDIA com uma consulta de capacidades por placa; se o driver não aceitar um campo, volta ao modo campo a campo anterior.
  2. Capacidades fixas (VBIOS, serial, PCI, limites, clocks suportados) em cache por UUID/PCI/nome por até 10 min, no painel e no serviço.
  3. Com o serviço ativo, o painel usa o latest.json por GPU com até 5 s, sem nova consulta ao driver nem novo parsing do log; sem ele, consulta diretamente.
  4. PIDs do SRBMiner pelo Toolhelp32 do Windows (ctypes); tasklist fica só como reserva.
  5. Linha de comando de um processo consultada ao PowerShell uma vez por identidade (PID, horário de criação e executável); PID reutilizado continua sendo outro processo.
  6. Parsing do log reaproveitado quando o texto é idêntico; a janela de 900 s dos pontos é reaplicada e linhas com horário futuro passam a valer no tempo certo.
  7. Cauda do log lida de forma incremental: só os bytes acrescentados, conferindo a emenda; log reescrito é lido de novo.
  8. Expressões regulares compiladas uma vez e conversão de horário com cache.
  9. Posição de arquivamento de cada log persistida depois do commit; reabrir o painel não relê logs inteiros. A chave SHA-256 das linhas foi mantida para continuar deduplicando o histórico existente.
  10. Linhas de log gravadas em lote (executemany) num único commit, em vez de um commit por linha.
  11. SQLite em WAL com synchronous=NORMAL: commits sobrevivem ao encerramento forçado do processo; numa queda de energia, os últimos commits podem ser perdidos, sem corrupção.
  12. gpu_telemetry deixa de copiar recent_logs e rate_points a cada amostra; as linhas brutas continuam arquivadas uma vez em events.
  13. Snapshots reescritos a cada ciclo em JSON compacto; o latest.json do painel passa a ser gravado de forma atômica.
  14. settings.json lido de novo apenas quando muda (mtime e tamanho), no painel e no serviço.
  15. Busca de logs (mining-*.log) refeita só quando o diretório muda; com o log informado pelo serviço, não há busca.
  16. Gráficos recriam título, grade e rótulos só quando tamanho ou fonte mudam; a cada amostra, só a série é redesenhada.
  17. Gráficos em abas ocultas ou com o painel na bandeja não são desenhados; ficam marcados e são atualizados ao aparecer.
  18. A aba de rendimentos é recalculada quando chegam dados da pool e, por telemetria, no máximo a cada 10 s.
  19. Laço da interface a cada 250 ms com a janela visível e a cada 1 s na bandeja; ui-request.json só é lido quando muda; flush() do histórico espera por condição, sem laço de 10 ms.
  20. Hook .githooks/pre-push com testes (e os 5 mais lentos), verificação da documentação, sintaxe dos .ps1 versionados (tools/check_powershell.ps1) e gitleaks.

Validação

  • Suíte local: 427 testes, incluindo test_optimizations.py para cada cache (invalidação, cópias isoladas, retomada após reinício, fallback de campos não suportados).
  • QA opt-in de interface: test_responsive_ui.py --run --native-dpi (12 casos, sem erros ou overflow) e test_windowing.py --run --native-dpi.
  • Os novos módulos file_cache.py e process_list.py fazem parte do inventário do runtime instalado (data/rig-runtime.json).

Para o serviço do rig usar as otimizações dele (2, 5 e 14), é preciso atualizá-lo em Configurar → Central de operação → Atualizar serviço (UAC), o que interrompe a mineração por alguns segundos e pede aprovação do administrador. Atualizar só o painel já traz as melhorias do painel.