#performance
51 posts
2026 - março
1 post2025 - setembro
1 post2025 - maio
2 posts2025 - abril
3 posts2023 - dezembro
1 post2023 - setembro
1 post2023 - fevereiro
1 post2022 - dezembro
1 post2021 - dezembro
1 post2021 - fevereiro
1 post2019 - abril
1 post2019 - março
2 posts2019 - fevereiro
1 post2017 - setembro
1 post2017 - junho
2 posts2017 - janeiro
1 post2016 - julho
1 post2016 - junho
2 posts2016 - março
1 post2015 - dezembro
1 post2015 - novembro
1 post2015 - outubro
3 posts2015 - agosto
1 post2015 - junho
1 post2015 - maio
3 posts2015 - março
1 post2014 - outubro
1 post2014 - agosto
1 post2014 - julho
1 post2014 - janeiro
1 post2013 - dezembro
1 post2013 - maio
1 post2013 - abril
1 post2010 - novembro
1 post2010 - julho
1 post2010 - maio
1 post2008 - setembro
1 post2008 - julho
1 post2008 - junho
1 post2008 - abril
1 post2007 - dezembro
1 post2026 - março
1 postReview: Minisforum MS-S1 Max | AMD AI Max+ 395 com 96GB de VRAM
Nos meus testes, a RTX 5090 foi até 7 vezes mais rápida nos modelos que cabem em 32GB. O Minisforum, porém, rodou modelos de 50 a 81GB que a placa não comporta.
2025 - setembro
1 postCoisas que "Iniciantes" Ignoram sobre PCs
Expliquei como CPU, placa-mãe, RAM, GPU, armazenamento, USB, fonte e refrigeração afetam um PC. A recomendação final é aprender os componentes e comprar o melhor computador que seu orçamento permitir.
2025 - maio
2 postsSeu Windows pode estar Capado sem Você Saber. Cheque isto!!
Descobri que o Windows recém-instalado estava em Power Saver e limitava meu Core i7 a 0,5 GHz, causando travamentos. Ao mudar para Ultimate Performance, a CPU voltou a passar de 4 GHz.
Último Tentativa de Treinar uma LLM com LoRa. Tiro de canhão, mas errando a mosca.
Aluguei uma H100 para treinar Qwen3-32B com LoRA, mas o modelo consumiu quase toda a VRAM, ficou lento e, no fim, não conseguiu gerar código utilizável.
2025 - abril
3 postsAcessando seu NAS usando iSCSI em vez de SMB
Mover o Docker para NFS deixou os builds lentos por causa das chamadas RPC arquivo a arquivo. Com um disco iSCSI em bloco no Synology, os comandos caíram de centenas de segundos para menos de um.
Aumentando Resolução de Anime velho pra 4K com I.A.
Usei Video2X com Real-ESRGAN em Docker CUDA para levar anime antigo de DVD a 4K, a cerca de 13 fps. O modelo 6B foi quatro vezes mais lento sem melhorar claramente o resultado.
Configuração da BIOS do meu PC - X670E Aorus Xtreme
Registrei os ajustes da BIOS da minha X670E Aorus Xtreme com Ryzen 9 7950X3D: PBO 90 Level 2 estável, EXPO ativo, C-States desabilitados, kernel Zen e checagem semanal de BIOS.
2023 - dezembro
1 post[Akitando] #149 - Configurando Docker Compose, Postgres, com Testes de Carga - Parte Final da Rinha de Backend
Na parte final da Rinha de Backend, configuro Docker Compose, NGINX, Gatling e PostgreSQL. O network mode host reduziu quase todos os erros, e os testes não apontaram o Postgres como gargalo.
2023 - setembro
1 post[Akitando] #145 - 16 Linguagens em 16 Dias: Minha Saga da Rinha de Backend
Em 16 dias, explorei 16 linguagens e otimizei projetos da Rinha de Backend. Os resultados mostram que técnicas podem aproximar desempenhos, não que uma linguagem seja sempre superior.
2023 - fevereiro
1 post[Akitando] #137 - Games em Máquina Virtual com GPU Passthrough | Entendendo QEMU, KVM, Libvirt
Após meses de testes, Akita passa uma RTX 3090 para um Windows virtualizado com QEMU, KVM e Libvirt e roda games quase como nativos. Anti-cheat online ainda exige dual boot, e a configuração é trabalhosa.
2022 - dezembro
1 post[Akitando] #133 - Tornando sua App Web Mais Rápida! | 4 Técnicas de Otimização
Akita explica como NGINX, pools, cache, réplicas, filas, métricas e CDNs ajudam uma aplicação web a escalar. O caminho é medir gargalos e aliviar recursos, não trocar de stack.
2021 - dezembro
1 post[Akitando] #110 - Como fazer o Ingresso.com escalar? | Conceitos Intermediários de Web
A partir da instabilidade do Ingresso.com, Akita explica CDNs, cache e jobs assíncronos e propõe uma sala de espera para controlar o acesso à escolha de assentos e serviços externos.
2021 - fevereiro
1 post[Akitando] #92 - RANT de 200K! | Upgrade do meu PC
Akita mostra os bastidores do canal e um upgrade de PC que reduziu a renderização de cerca de 30 para 5 minutos. A RTX 3080, o i9 e 64 GB de RAM são luxo, não necessidade.
2019 - abril
1 post[Akitando] #46 - Gerenciamento de Memória (Parte 2) | Entendendo Back-end para Iniciantes (Parte 6)
Fabio explica como garbage collectors funcionam e compara reference counting, mark and sweep, gerações e compactação, mostrando o preço de cada escolha em memória, CPU e pausas.
2019 - março
2 posts[Akitando] #45 - Gerenciamento de Memória (Parte 1) | Entendendo Back-end para Iniciantes (Parte 5)
Fabio revisa memória binária, endereços virtuais, fragmentação, arenas e heaps, comparando ptmalloc2, tcmalloc, jemalloc e o alocador próprio do Go para revelar os custos do gerenciamento.
[Akitando] #43 - Concorrência e Paralelismo (Parte 1) | Entendendo Back-End para Iniciantes (Parte 3)
Akita explica como processos, threads, locks, schedulers e I/O assíncrono evoluíram até soluções como C10K, NGINX e Twisted. A escolha depende do problema.
2019 - fevereiro
1 post[Akitando] #40 - Entendendo Back-End para Iniciantes em Programação (Parte 1) | Série "Começando aos 40"
Akita apresenta os fundamentos do back-end, de Assembly e compiladores a processos, threads, JVM, JIT e .NET, e mostra os compromissos entre portabilidade, isolamento e desempenho.
2017 - setembro
1 postWindows Subsystem for Linux é Bom, Mas Ainda Não Suficiente
Testei o WSL com Rails, RSpec, PhantomJS e Ruby e comparei o resultado com Linux e VirtualBox. A emulação do filesystem foi pelo menos 4 vezes mais lenta, então fiquei com Linux virtualizado.
2017 - junho
2 postsEx Manga Downloadr - Parte 7: Lidando Corretamente com Grandes Coleções
Depois de o Flow levar mais de 3 minutos, troquei-o por Task.async_stream e recuperei os tempos anteriores. A solução simplifica o código, mas reduz o controle e deixa os downloads sem retry.
Ex Manga Downloadr - Parte 6: A Ascensão do FLOW
Troquei Poolboy e um GenServer customizado por Flow para simplificar o scraping paralelo. O código ficou mais legível, mas levou mais de 3 minutos, contra menos da metade na versão anterior.
2017 - janeiro
1 postOtimizando o Linux para Computadores Lentos
Akita melhora a responsividade do Linux em um Lenovo antigo ajustando swap, schedulers, Dropbox e Tracker. Os ganhos maiores continuam vindo de mais RAM e de um SSD rápido.
2016 - julho
1 postTentando igualar o Fast Blank em C usando Crystal
Reescrevendo a Fast Blank em Crystal e comparando-a com C e Ruby, o autor encontra um custo alto na cópia de strings. Para esse algoritmo trivial, a versão em C continua sendo a melhor escolha.
2016 - junho
2 posts[Manga-Downloadr] Melhorando o Crystal/Ruby de rajadas para fluxo de pool
Trocando rajadas de requisições por pools constantes de workers no Manga-Downloadr, o autor reduz os tempos para 27s no Ruby, 30s no JRuby e 21s no Crystal, mas Elixir termina em 15s.
Pequeno Experimento com Rails sobre JRuby 9.x no Heroku
Comparando a mesma aplicação Rails em MRI e JRuby 9.1 no Heroku, o autor encontra desempenho parecido, mas maior consumo de memória e boot instável no JRuby. Para esse caso, prefere continuar no MRI.
2016 - março
1 postMelhorando a Performance de Integração entre Microservices com Memcache e ETAGs
Usando ETAGs, If-None-Match e Memcached entre duas APIs Rails, o autor reduz respostas de 26ms para 12ms e de 62ms para 24ms. A técnica é simples e rende mais em dados que mudam pouco.
2015 - dezembro
1 postA Obrigatória "Flame War": Phoenix vs Node.js
Num benchmark assumidamente injusto com Siege, Node.js leva vantagem no aquecimento I/O, mas Phoenix suporta melhor as requisições que bloqueiam por um segundo conforme a concorrência aumenta.
2015 - novembro
1 postEx Manga Downloadr - Parte 2: Poolboy ao resgate!
Troquei lotes manuais de 80 requisições por um Worker GenServer com Poolboy e um Supervisor, usando um pool de 50 processos. O download de Akira, com cerca de 2.200 páginas, levou menos de 50 segundos, limitado pelo MangaReader.
2015 - outubro
3 postsPhoenix Experiment: Holding 2 Million Websocket clients!
Um benchmark de Chris McCord levou o Phoenix a 2 milhões de clientes WebSocket em uma máquina de 40 cores e 128 GB. Broadcasts para um tópico levavam de 1 a 3 segundos, com o limite em ulimit.
How Fast is Elixir/Phoenix?
Em um teste no Heroku gratuito, o Phoenix levou cerca de 17 a 25 ms para servir uma página simples, mas chegou a 15 segundos ao buscar 1.000 linhas sob carga. O gargalo estava no PostgreSQL.
[Heroku] ActiveRecord::ConnectionTimeoutError: Problemas de Max Pool Size, Sidekiq e Octopus
O ActiveRecord::ConnectionTimeoutError pode nascer de pools mal dimensionados, especialmente com Sidekiq e Octopus. O guia calcula as conexões e combina PgBouncer, followers read-only e pools separados para aliviar o PostgreSQL.
2015 - agosto
1 post[Small Bites] Adicionando um CDN ao seu site (a forma fácil!)
Com o Asset Pipeline, adicionar CloudFront a uma aplicação Rails exige criar a distribuição, apontar a origem e liberar o header Origin. Os fingerprints mantêm o cache dos assets correto e reduzem requisições ao app.
2015 - junho
1 post[Primeiros Passos] Brincando de Rust + Ruby/FFI
Um exercício compara Ruby e Rust lendo arquivos grandes e usando regex via FFI. A crate inicial deixou Rust mais lento, mas trocar por PCRE tornou a implementação 3,7 vezes mais rápida.
2015 - maio
3 postsDynamic Site as fast as a Static Generated One with Raptor
Uma aplicação Rails dinâmica chegou a quase 7.300 requests em 60 segundos, com média de 20 ms no Heroku usando Etags, Memcached e Passenger 5. Puma com Rack::Cache falhou no mesmo teste.
[Small Bites] Trocando de SASS para SASSC e colocando no Heroku
Trocar sass-rails por sassc-rails usa libsass para acelerar deployments Rails no Heroku com múltiplas buildpacks. A compatibilidade ainda não era total, então o resultado precisava ser testado.
[Small Bites] Brincando de Crawlers e algumas Dicas Úteis
Um crawler Ruby para apagar imagens do Slack combina Faraday, Typhoeus, Oj e Parallel. Threads ajudam em I/O. Para processamento pesado, processos separados aproveitam melhor o paralelismo.
2015 - março
1 post[Small Bites] Novidades no Garbage Collector do Ruby 2.2.1
O Ruby 2.2.1 passou a usar mais gerações e GC incremental, reduzindo pausas longas e tornando as respostas mais previsíveis. Nos testes descritos, isso custou cerca de 30% mais memória por processo.
2014 - outubro
1 postO Novo Garoto da Pesada para Servidores Ruby: Raptor!
Testei o beta do Raptor em benchmarks sintéticos com Rack e Rails 4.1.6: ele chegou a quase quatro vezes o throughput em alguns cenários, com proteção contra clientes lentos e suporte a JRuby e Nginx.
2014 - agosto
1 post[Small Bite] Palestra "Ruby & GC" - QConSP 2014 (Nova Gravação!)
Como a gravação original ficou difícil de acompanhar, o autor ressincroniza áudio, slides e animações de Ruby & GC, palestra sobre a evolução do Garbage Collector do Ruby e conceitos úteis em Java.
2014 - julho
1 post[Small Bites] Tirando Proveito de Threads em Ruby
Para buscar títulos de links do blog, o autor troca chamadas sequenciais por Threads Ruby e reduz o tempo de mais de 19 segundos para 1,6. O ganho vem da concorrência durante operações de I/O.
2014 - janeiro
1 post[Dica Rápida] Timeout no Heroku
No Heroku, configure o Rack Timeout abaixo do limite do Unicorn e dos 30 segundos do Router para receber um stacktrace antes do erro genérico. A informação revela o gargalo e orienta a correção.
2013 - dezembro
1 postSoluções para um Mundo Assíncrono/Concorrente
CPU-bound e I/O-bound são problemas conhecidos, não motivos automáticos para trocar Rails. O texto recomenda jobs em background, serviços prontos e migração de runtime apenas quando o caso realmente exigir.
2013 - maio
1 postIndo de Ruby 1.8 e Rails 2.3 para Ruby 2.0 e Rails 3.2
Uma aplicação Ruby 1.8 e Rails 2.3 foi atualizada passo a passo para Ruby 2.0 e Rails 3.2 em menos de três semanas, enquanto os testes passaram de zero a mais de 50% e as requisições caíram de 15 segundos para 400 ms.
2013 - abril
1 postRuby 1.9 e Tail Call Optimization
Testando Ruby 1.9.3, o autor mostra que o MRI já suporta Tail Call Optimization, embora desativada por padrão. Com ela ligada, a recursão calcula fact1(100_000) sem estourar a pilha.
2010 - novembro
1 post[Objective-C] Entendendo NSAutoreleasePool
Ao criar milhares de Strings dentro de um loop, o autor mostra como o NSAutoreleasePool principal ultrapassa 1 MB e reduz o pico para pouco mais de 100 KB ao liberar pools menores a cada mil iterações.
2010 - julho
1 postUsando ETAG e Memcached
ETAGs com Memcached reduziram requisições Rails de cerca de 50ms para 7ms a 1ms, mas exigiram invalidação após mudanças e chaves limitadas a 250 caracteres.
2010 - maio
1 postVocê já está usando ETAGs, certo?
ETAGs fizeram um teste Rails cair de 9ms para 5ms ao evitar a renderização repetida, mas o autor ressalta o custo de consultar o banco e relata um teste frustrante com ActiveResource.
2008 - setembro
1 postConversando com Joshua Peek
Joshua Peek conta como entrou no Rails Core após tornar o Rails 2.2 thread-safe no Google Summer of Code. A entrevista aborda os ganhos modestos no MRI, as melhorias no JRuby e os caches pré-carregados no boot.
2008 - julho
1 postTradução: Regras de Otimização
As regras de otimização são simples: escreva código claro, meça antes de mexer e concentre o esforço nos gargalos comprovados, preservando a manutenção do restante.
2008 - junho
1 postConversando com Blaine Cook (Twitter)
Blaine Cook separa performance de escalabilidade, explica a arquitetura assíncrona do Twitter e o custo do sharding. Para ele, problemas de escala raramente são culpa do Rails.
2008 - abril
1 postMOD_RAILS LANÇADO!!
O Phusion Passenger é lançado prometendo deploy Rails quase tão simples quanto mod_php, isolamento entre usuários no Apache e bloqueio de aplicações como root. A edição Enterprise alegava reduzir memória em até 33%.
2007 - dezembro
1 postclass Ruby; include Smalltalk; end
Um exercício de metaprogramação recria em Ruby a sintaxe de condicionais do Smalltalk, mas o teste mostra que o envio de métodos fica de 2 a 4 vezes mais lento.