意外な遅さ:シンプルなソケットベンチマークがLinuxのOpenBSDに対する遅れを示す

2025-08-16

スレッドを作成し、256個のソケットを開く単純なCプログラムが、LinuxとOpenBSDの間で驚くべきパフォーマンスの違いを示しました。Linuxでは、実行時間は17〜26ミリ秒の間で変動しますが、OpenBSDではわずか2〜6ミリ秒です。さらに興味深いことに、OpenBSDは最初に「開いているファイルが多すぎる」というエラーを返しましたが、これはリソース管理の違いを示唆しています。著者は、この違いはネットワークコードとは関係ないと述べており、このベンチマークでOpenBSDを凌駕するLinuxシステムを見つけるよう読者に挑戦しています。

続きを読む

500マイルメール制限:奇妙な実験

2025-07-09

大学の学長が500マイル以上離れた場所にメールを送信できないというユーモラスな物語が、ネットワーク接続とメール送信距離に関する実験を促しました。簡単なネットワーク接続コードを作成し、さまざまな大学のサーバーをテストすることで、著者は実際の接続距離がサーバーの場所とネットワークインフラストラクチャによって制限されており、物理的な距離ではないことを発見しました。この実験は最終的に、クラウドコンピューティングとメールサーバーの地理的分布がメール送信に及ぼす影響を明らかにし、500マイルの制限は物理法則というよりも偶然の一致であることを示しました。

続きを読む
開発

X11のDPIスケーリング:神話を覆す

2025-06-25

著者は、X11がDPIスケーリングをサポートしていないという一般的な誤解に挑戦し、さまざまなサイズと解像度の複数のスクリーンで、直径2インチの円を正常に描画しました。OpenGLとXサーバーの構成イベントを使用して、著者はXサーバーから取得した物理的なスクリーン寸法に基づいて、円の半径を動的に調整します。テレビの報告されたサイズに食い違いがあるなど、小さな不正確さはありましたが、この実験は、X11でのDPIスケーリングが可能であることを証明しています。このプロセスは、他者によって課せられた制限を無視し、一見不可能なタスクに挑戦することの重要性を強調しています。

続きを読む

パイプラインの落とし穴:SMTPからの教訓

2025-06-20

この記事では、ネットワークプロトコルにおけるパイプライン化の落とし穴について探ります。SMTPのようなテキストベースのプロトコルでは、クライアントは複数のリクエストを送信し、レスポンスを待つ必要がありません。しかし、サーバー側の実装が不適切だと問題が発生する可能性があります。サーバーは暗黙的なステートマシンに依存している可能性があり、複数の同時リクエストを処理する際に混乱が生じ、メールを誤って承認または拒否することがあります。この記事では、この潜在的な問題の根本原因を分析し、RFC 2920におけるパイプラインデッドロックに関する議論を参照し、状態管理の不備やバッファの問題によるエラーを避けるために、開発者はパイプラインを注意深く扱う必要があることを思い出させます。

続きを読む
開発

Goのio.Readerの効率性:間接参照と型アサーションとの戦い

2025-05-19

Goの多くの関数はio.Readerインターフェースを入力として受け取ります。これにより、ストリーミングが可能になり、すべてをメモリにロードする必要がなくなります。しかし、既にバイトデータを持っている場合、それらを直接使用した方が効率的です。この記事では、著者がlibavifとlibheifを使用して画像をデコードした際の経験について説明しています。簡潔にするため、単純なメモリインターフェースを使用しましたが、Goのimage.Decode関数はio.ReaderでPeek関数の有無をチェックし、見つからない場合はbufio.Readerでラップするため、bytes.Readerのバイトを直接使用することができません。著者は型アサーションとunsafe.Pointerを使用してbufio.Readerとbytes.Readerを回避し、ゼロコピーを実現しています。しかし、この記事では、Goの型チェックとインターフェース設計における問題点、および結果として生じる「シャドーAPI」についても指摘しています。

続きを読む
開発

OpenBSDにおけるASUS ACPI WMIドライバ開発記:ファン制御編

2025-05-11

筆者は、ASUSノートパソコンのファン速度を制御するために、OpenBSDでASUS ACPI WMIドライバを作成した過程を詳細に記述しています。ACPIとWMIのバイトオーダーの問題、acpidumpとiaslを使ったシステムACPIコードの解析、そして最終的なファン速度制御の実現までの道のりを綴っています。LinuxとFreeBSDのドライバ開発手法との比較も行い、OpenBSDの簡潔なコード構成を高く評価しています。

続きを読む

深掘り:OpenBSDにおける`write()`システムコールの追跡

2025-03-29

この記事では、OpenBSDにおける`write()`システムコールの低レベル実装を深く掘り下げます。ユーザー空間の`write()`コールから始まり、カーネル内でのデータの経路をたどり、システムコールからNVMeハードドライブへのデータ書き込みまでの完全なパスを詳細に説明します。この記事では、`mi_syscall`、`sys_write`、`dofilewritev`、`vn_write`、`ffs_write`、`uiomove`、`bdwrite`、`syncer`、`bwrite`、`ufs_strategy`、`spec_strategy`、`sdstrategy`、そして最終的にNVMeドライバなど、カーネル関数の呼び出しチェーンを明らかにします。様々な抽象化レイヤーにおけるデータ変換と転送、キャッシングメカニズムやDMA転送などの重要な技術的詳細を示しています。

続きを読む
開発