Incroyablement Lent : Un Benchmark Simple de Sockets Montrant le Retard de Linux par Rapport à OpenBSD

2025-08-16

Un simple programme C créant des threads et ouvrant 256 sockets révèle une disparité de performance surprenante entre Linux et OpenBSD. Sous Linux, les temps d’exécution fluctuent entre 17 et 26 millisecondes ; sous OpenBSD, ils ne sont que de 2 à 6 millisecondes. Plus intriguant encore, OpenBSD a initialement renvoyé une erreur « trop de fichiers ouverts », suggérant des différences de gestion des ressources. L’auteur note que la différence n’est pas liée au code réseau et met les lecteurs au défi de trouver un système Linux surpassant OpenBSD dans ce benchmark.

Lire plus

La limite de 500 miles pour les e-mails : une expérience curieuse

2025-07-09

Une histoire amusante sur un recteur d’université incapable d’envoyer des e-mails au-delà de 500 miles a déclenché une expérience sur la connectivité réseau et la distance de transmission des e-mails. En écrivant un code simple de connexion réseau et en testant des serveurs dans plusieurs universités, l’auteur a découvert que la distance de connexion réelle est limitée par l’emplacement du serveur et l’infrastructure réseau, et non par la distance physique. L’expérience a finalement révélé l’impact du cloud computing et de la distribution géographique des serveurs de messagerie sur la transmission des e-mails, faisant de la limite de 500 miles plus une coïncidence qu’une loi physique.

Lire plus

Échelle DPI X11 : Déconstruire le mythe

2025-06-25

L'auteur conteste l'idée reçue que X11 ne prend pas en charge l'échelle DPI en dessinant avec succès un cercle de deux pouces sur plusieurs écrans de tailles et de résolutions différentes. En utilisant OpenGL et les événements de configuration du serveur X, l'auteur ajuste dynamiquement le rayon du cercle en fonction des dimensions physiques de l'écran obtenues auprès du serveur X. Malgré de légères imprécisions, comme une différence dans la taille indiquée du téléviseur, l'expérience prouve que l'échelle DPI dans X11 est possible. Le processus souligne l'importance d'ignorer les limites imposées par les autres et de poursuivre des tâches apparemment impossibles.

Lire plus
Développement échelle DPI

Les pièges du Pipelining : Leçons de SMTP

2025-06-20

Cet article explore les pièges du pipelining dans les protocoles réseau. Dans les protocoles textuels comme SMTP, les clients peuvent envoyer plusieurs requêtes sans attendre de réponses. Cependant, une implémentation incorrecte côté serveur peut entraîner des problèmes. Un serveur peut s'appuyer sur une machine à états implicite, causant de la confusion lors du traitement de plusieurs requêtes concurrentes, menant à l'acceptation ou au rejet incorrect d'e-mails. L'article analyse la cause racine de ce problème potentiel et fait référence à la discussion sur les blocages du pipelining dans le RFC 2920, rappelant aux développeurs de gérer soigneusement le pipelining pour éviter les erreurs dues à une gestion d'état inadéquate ou à des problèmes de tampon.

Lire plus
Développement Protocoles Réseau

Efficacité de io.Reader en Go : une bataille avec l'indirection et les assertions de type

2025-05-19

De nombreuses fonctions en Go utilisent io.Reader comme entrée, permettant la diffusion en continu et évitant de charger tout en mémoire. Cependant, lorsque vous avez déjà les octets, les utiliser directement est plus efficace. Cet article décrit l'expérience de l'auteur en décodant des images avec libavif et libheif. Par souci de simplicité, les interfaces mémoire simples ont été utilisées, mais la fonction image.Decode de Go vérifie s'il existe une fonction Peek sur io.Reader, l'enveloppant avec bufio.Reader si elle n'est pas trouvée, ce qui empêche l'utilisation directe de bytes.Reader. L'auteur utilise des assertions de type et unsafe.Pointer pour contourner bufio.Reader et bytes.Reader, réalisant une copie nulle. Cependant, l'article souligne des problèmes dans la vérification de type et la conception d'interface de Go, y compris les « API shadow » qui en résultent.

Lire plus
Développement

Écrire un pilote ASUS ACPI WMI pour le contrôle du ventilateur sous OpenBSD

2025-05-11

L'auteur détaille son expérience en écrivant un pilote ASUS ACPI WMI pour OpenBSD afin de contrôler la vitesse du ventilateur de son ordinateur portable. Le processus a impliqué de surmonter les défis liés à l'ordre des octets ACPI et WMI, en utilisant acpidump et iasl pour analyser le code ACPI du système, et finalement en réussissant à contrôler la vitesse du ventilateur. L'auteur compare les approches de développement de pilotes sous Linux et FreeBSD, soulignant l'organisation pratique du code d'OpenBSD.

Lire plus
Développement Développement de Pilotes

Plongeon en profondeur : suivi de l’appel système `write()` dans OpenBSD

2025-03-29

Cet article explore en détail l’implémentation de bas niveau de l’appel système `write()` dans OpenBSD. En partant de l’appel `write()` dans l’espace utilisateur, il suit le parcours des données dans le noyau, détaillant le chemin complet de l’appel système jusqu’à l’écriture des données sur un disque dur NVMe. L’article révèle une chaîne d’appels de fonctions du noyau, notamment `mi_syscall`, `sys_write`, `dofilewritev`, `vn_write`, `ffs_write`, `uiomove`, `bdwrite`, `syncer`, `bwrite`, `ufs_strategy`, `spec_strategy`, `sdstrategy` et enfin le pilote NVMe. Il illustre la transformation et la transmission des données à travers différents niveaux d’abstraction, en soulignant des détails techniques clés tels que les mécanismes de mise en cache et les transferts DMA.

Lire plus
Développement Appel système