Inesperadamente Lento: Um Simples Benchmark de Sockets Mostra o Linux Atrasado em Relação ao OpenBSD

2025-08-16

Um simples programa em C que cria threads e abre 256 sockets revela uma surpreendente disparidade de desempenho entre Linux e OpenBSD. No Linux, os tempos de execução fluctuam entre 17 e 26 milissegundos; no OpenBSD, são apenas 2 a 6 milissegundos. Para aumentar o mistério, o OpenBSD inicialmente lançou um erro de "muitos arquivos abertos", sugerindo diferenças na gestão de recursos. O autor observa que a discrepância não está relacionada com o código de rede e desafia os leitores a encontrar um sistema Linux que supere o OpenBSD neste benchmark.

Leia mais
Desenvolvimento Desempenho do SO

O Limite de E-mail de 500 Milhas: Um Experimento Curioso

2025-07-09

Uma história engraçada sobre um reitor de universidade incapaz de enviar e-mails além de 500 milhas desencadeou um experimento sobre conectividade de rede e distância de transmissão de e-mail. Ao escrever um código simples de conexão de rede e testar servidores em várias universidades, o autor descobriu que a distância de conexão real é limitada pela localização do servidor e pela infraestrutura de rede, não pela distância física. O experimento revelou, por fim, o impacto da computação em nuvem e da distribuição geográfica dos servidores de e-mail na transmissão de e-mail, tornando o limite de 500 milhas mais uma coincidência do que uma lei física.

Leia mais

Escalonamento DPI do X11: Desmascarando o Mito

2025-06-25

O autor desafia a crença comum de que o X11 não suporta escalonamento DPI, desenhando com sucesso um círculo de duas polegadas em várias telas com tamanhos e resoluções diferentes. Usando OpenGL e eventos de configuração do servidor X, o autor ajusta dinamicamente o raio do círculo com base nas dimensões físicas da tela obtidas do servidor X. Apesar de encontrar pequenas imprecisões, como uma discrepância no tamanho relatado da TV, o experimento prova que o escalonamento DPI no X11 é possível. O processo destaca a importância de ignorar as limitações impostas por outros e perseguir tarefas aparentemente impossíveis.

Leia mais
Desenvolvimento escalonamento DPI

Armadilhas do Pipelining: Lições do SMTP

2025-06-20

Este artigo explora as armadilhas do pipelining em protocolos de rede. Em protocolos baseados em texto como o SMTP, os clientes podem enviar vários pedidos sem esperar por respostas. No entanto, uma implementação inadequada no lado do servidor pode levar a problemas. Um servidor pode depender de uma máquina de estado implícita, causando confusão ao lidar com vários pedidos concorrentes, levando à aceitação ou rejeição incorreta de e-mails. O artigo analisa a causa raiz desse problema potencial e faz referência à discussão sobre deadlocks de pipelining no RFC 2920, lembrando os desenvolvedores a lidar cuidadosamente com o pipelining para evitar erros devido à gestão de estado inadequada ou problemas de buffer.

Leia mais
Desenvolvimento Protocolos de Rede

Eficiência do io.Reader em Go: Uma Batalha com Indireção e Asserções de Tipo

2025-05-19

Muitas funções em Go utilizam io.Reader como entrada, permitindo streaming e evitando carregar tudo na memória. No entanto, quando você já possui os bytes, usá-los diretamente é mais eficiente. Este artigo descreve a experiência do autor decodificando imagens com libavif e libheif. Por simplicidade, foram usadas as interfaces de memória simples, mas a função image.Decode do Go verifica se há uma função Peek no io.Reader, encapsulando com bufio.Reader se não encontrada, impedindo o uso direto de bytes.Reader. O autor usa asserções de tipo e unsafe.Pointer para contornar bufio.Reader e bytes.Reader, alcançando cópia zero. No entanto, o artigo destaca problemas na verificação de tipo e no design de interface do Go, incluindo as 'APIs shadow' resultantes.

Leia mais
Desenvolvimento

Desenvolvimento de um driver ASUS ACPI WMI para controle de ventoinha em OpenBSD

2025-05-11

O autor descreve sua jornada na criação de um driver ASUS ACPI WMI para OpenBSD, com o objetivo de controlar a velocidade da ventoinha do seu laptop. O processo envolveu superar desafios com a ordem de bytes ACPI e WMI, utilizando acpidump e iasl para analisar o código ACPI do sistema e, finalmente, alcançar o controle da velocidade da ventoinha. O autor compara as abordagens de desenvolvimento de drivers no Linux e FreeBSD, destacando a organização conveniente do código do OpenBSD.

Leia mais
Desenvolvimento Desenvolvimento de Drivers

Imersão Profunda: Rastreamento da Chamada de Sistema `write()` no OpenBSD

2025-03-29

Este artigo mergulha na implementação de baixo nível da chamada de sistema `write()` no OpenBSD. Começando com a chamada `write()` no espaço do usuário, ele rastreia a jornada dos dados pelo kernel, detalhando o caminho completo da chamada de sistema até os dados escritos em um disco rígido NVMe. O artigo revela uma cadeia de chamadas de funções do kernel, incluindo `mi_syscall`, `sys_write`, `dofilewritev`, `vn_write`, `ffs_write`, `uiomove`, `bdwrite`, `syncer`, `bwrite`, `ufs_strategy`, `spec_strategy`, `sdstrategy` e, finalmente, o driver NVMe. Ele ilustra a transformação e transmissão de dados em diferentes níveis de abstração, destacando detalhes técnicos importantes, como mecanismos de cache e transferências DMA.

Leia mais
Desenvolvimento Chamada de Sistema