Repository navigation
HashPilot v0.5.6 — menos processos, menos disco e interface mais leve
Pre-releaseUse 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
- 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.
- Capacidades fixas (VBIOS, serial, PCI, limites, clocks suportados) em cache por UUID/PCI/nome por até 10 min, no painel e no serviço.
- Com o serviço ativo, o painel usa o
latest.jsonpor GPU com até 5 s, sem nova consulta ao driver nem novo parsing do log; sem ele, consulta diretamente. - PIDs do SRBMiner pelo Toolhelp32 do Windows (
ctypes);tasklistfica só como reserva. - 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.
- 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.
- Cauda do log lida de forma incremental: só os bytes acrescentados, conferindo a emenda; log reescrito é lido de novo.
- Expressões regulares compiladas uma vez e conversão de horário com cache.
- 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.
- Linhas de log gravadas em lote (
executemany) num único commit, em vez de um commit por linha. - 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. gpu_telemetrydeixa de copiarrecent_logserate_pointsa cada amostra; as linhas brutas continuam arquivadas uma vez emevents.- Snapshots reescritos a cada ciclo em JSON compacto; o
latest.jsondo painel passa a ser gravado de forma atômica. settings.jsonlido de novo apenas quando muda (mtime e tamanho), no painel e no serviço.- Busca de logs (
mining-*.log) refeita só quando o diretório muda; com o log informado pelo serviço, não há busca. - Gráficos recriam título, grade e rótulos só quando tamanho ou fonte mudam; a cada amostra, só a série é redesenhada.
- Gráficos em abas ocultas ou com o painel na bandeja não são desenhados; ficam marcados e são atualizados ao aparecer.
- A aba de rendimentos é recalculada quando chegam dados da pool e, por telemetria, no máximo a cada 10 s.
- Laço da interface a cada 250 ms com a janela visível e a cada 1 s na bandeja;
ui-request.jsonsó é lido quando muda;flush()do histórico espera por condição, sem laço de 10 ms. - Hook
.githooks/pre-pushcom testes (e os 5 mais lentos), verificação da documentação, sintaxe dos.ps1versionados (tools/check_powershell.ps1) e gitleaks.
Validação
- Suíte local: 427 testes, incluindo
test_optimizations.pypara 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) etest_windowing.py --run --native-dpi. - Os novos módulos
file_cache.pyeprocess_list.pyfazem 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.