ネットワークスイッチを殺した犯人は? 「Hubrisバグ」の話
(cliffle.com)Hubrisバグの話: ネットワークスイッチを殺したのは誰か?
-
Hubrisとは何か?
- Hubrisは深く組み込まれたシステム向けのオペレーティングシステムで、キーボード内部のような、コンピュータとして認識されないコンピュータのために設計されている。
- Oxide Rackで大型プロセッサを起動するために必要なあらゆる処理を担うために開発された。
- Hubrisはかなり独特であり、この話に関係する部分は以下で説明される。
-
犯行現場
- Oxideのネットワークスイッチファームウェアを担当する同僚のArjen Roodselaarが、電源シーケンスとクロック構成に関する変更をテストしていた。
- 小さな変更の後、突然スイッチが起動しなくなった。
- ファームウェアの一部は応答していたが、電源供給シーケンスを担当する重要な部分は停止していた。
-
限られたRAMからさらに多くを引き出す
- Hubrisを使う低価格マイクロコントローラは、RAMとフラッシュが非常に限られている。
- Hubrisはタスクと呼ばれる別個にコンパイルされた多数のプログラムで構成されており、他のオペレーティングシステムよりやや高いリソース要求を持つ。
- 同僚のMatt Keeterは最近、システムをより賢くして、複数の2のべき乗領域を使い、できるだけタスクを詰め込もうと試みた。
-
動かぬ証拠
- ArjenはHumilityというHubrisデバッガを使って、故障したネットワークスイッチを調査した。
humility tasksコマンドを使って、プロセッサ上で実行中のタスク一覧と状態情報を出力した。- 電源シーケンスを担当するタスクが、メモリ障害により115回再起動していたことを発見した。
-
Hubris IPCでRustの借用をタスク間へ拡張する
- HubrisのタスクはIPCを通じて互いにメッセージをやり取りできる。
- メッセージは関数呼び出しと非常によく似た見た目と振る舞いを持つ。
- タスクが別のタスクにメモリを貸し出すとき、実際には所有していないメモリを貸し出そうとしてはならない。
-
機能が襲いかかるとき
- 2つの機能が組み合わさることでバグになることがある。
- タスクのパッキングはビルドシステム内で日和見的に動作する。
- タスクAのサイズが少し変わると、無関係なタスクBのMPU領域境界の位置が移動する可能性がある。
-
内線からの電話!
- メモリ保護アルゴリズムを変更する必要があった。
- 貸し出されたメモリがMPU領域をまたぐことを許可しなければならなかった。
-
Hubrisで失敗する
- システムが失敗したときに起こらなかったことがいくつもあった。
- 壊れたネットワークスイッチを3時間で修理できた。
- 障害の分離、安全側への失敗、安全な共有メモリ、カーネルとデバッガの共同設計、設計と実装の単純さ、チームの緊密で非階層的な統合などが役立った。
GN⁺の見解
- この記事は、Hubrisというオペレーティングシステムで発生したバグを発見し、解決する過程を通じて、複雑なシステムでも堅牢なソフトウェア設計が重要であることを示している。
- バグの発見と解決の過程は、ソフトウェアエンジニアリングの複雑な問題を解くうえで、チームワークと効率的なデバッグツールの重要性を強調している。
- Hubrisのようなシステムを使う際に、システムの分離と障害管理機能がいかに重要かを示している。これはシステムの安定性と保守性を大きく向上させうる。
- この記事はまた、安全なプログラミング言語であるRustを用いてメモリ安全性を保証し、バグを最小化する方法も示している。Rustを使うシステムではこの種のバグはまれであり、これはRustのメモリ安全性保証が実際にどれほど有効かを裏付けている。
- 類似の機能を持つ他のプロジェクトや製品としては、seL4、FreeRTOS、Zephyrなどがあり、これらはそれぞれ異なる目的と特性を持つ組み込みシステム向けオペレーティングシステムである。
- Hubrisのようなシステムを導入する際には、メモリ制約、タスク管理、IPCメカニズムの設計といった要素を考慮する必要がある。このようなシステムを選ぶことで得られる利点は、堅牢なシステム設計と安全なメモリ管理にあり、欠点はシステムの複雑さと学習曲線になりうる。
1件のコメント
Hacker Newsのコメント
Hubris カーネルコードのレビュー
求人広告への称賛
コードレビューと提案
TaskDesc::regionsのドキュメント文字列に追加するとよい。デバッグ過程への評価
Oxide チームの文化への関心
関連情報へのリンク
デバッグ時に起こる問題への共感
ハードウェア処理への提案
Oxide の仕事への称賛
OS 名への反応