インフラ・DevOps
Spriteネットワークオペレーティングシステムの簡単な回顧録
A Brief Retrospective on the Sprite Network Operating System (github.com)
要約
Spriteは、1984年から8年間開発された研究用オペレーティングシステムで、ローカルエリアネットワークへの注力を目指しました。ネットワークファイルシステム、プロセス移行、シングルシステムイメージ、ログ構造ファイルシステムといった4つの主要な技術的成果を上げ、多数のユーザーコミュニティに長期間利用されました。このプロジェクトは、小規模なチームで大規模なOS開発を成功させた事例として、Multicsと比較されています。
全文翻訳
Spriteネットワークオペレーティングシステムの簡単な回顧録
------------------------------------------------------------
John Ousterhout
カリフォルニア大学バークレー校
EECS学部コンピュータサイエンス部門
Spriteは、私が過去8年間にわたり開発を主導してきた研究用オペレーティングシステムです。1984年の秋に、当時のオペレーティングシステムがローカルエリアネットワークに十分な注意を払っていないと感じたため、4人の大学院生と共にこのプロジェクトを開始しました。ネットワークサポートは、スタンドアロンで動作するように設計されたシステムに、場当たり的に追加されているように思えました。その結果、ネットワーク化されたワークステーションはうまく連携しませんでした。Spriteの開発を開始した当時、優れたネットワークファイルシステムは存在せず(NFSさえまだ存在しませんでした)、ワークステーションのネットワークを管理するのは悪夢でした。Spriteの目標は、オペレーティングシステムカーネルをゼロから構築し、ネットワークサポートを最初からシステムに組み込むことで、「ネットワーキングを正しく行う」ことでした。私たちは、ネットワーク化されたワークステーションの集合が、ストレージと処理能力の両方がワークステーション間で均一に共有される単一のシステムのように動作することを期待していました。ユーザーは、従来のタイムシェアリングシステムの単純な動作と管理の容易さを維持しながら、ネットワーク全体のパワーを活用できるようになることを望んでいました。私たちはこれらの目標を達成できたと考えています。
私の記憶に残る4つの技術的成果があります。まず最も重要なのは、Spriteのネットワークファイルシステムです。これは、ネットワークファイルシステムがパフォーマンスを犠牲にすることなく、便利なユーザーモデルを提供できることを実証しました。Spriteのファイルシステムは、ネットワークを完全に隠蔽しながらファイル共有を可能にします。これは、ユーザーが従来のタイムシェアリングシステムで見るであろう動作を、ワークステーション間で提供します。I/Oデバイスでさえネットワーク全体で均一にアクセスでき、ユーザープロセスは疑似デバイスや疑似ファイルシステムを使用してI/Oおよび命名プロトコルを実装することでファイルシステムを拡張できます。同時に、Spriteは積極的なファイルキャッシングを使用して高いパフォーマンスを実現しています。構築から5年後、Spriteは依然として存在する中で最も高速なネットワークファイルシステムを持っています。
Spriteの2番目の主要な成果は、プロセス移行メカニズムです。これにより、プロセスはいつでも透過的にワークステーション間で移動できます。プロセス移行により、単一のユーザーは複数のワークステーションのパワーを同時に活用し、再コンパイルなどの一般的なシステムタスクで4倍以上の速度向上を達成できます。移行メカニズムは、アイドル状態のマシンを追跡し、それらを移行に使用し、ワークステーションの所有者が戻ってきたときに移行されたプロセスを追い出します。これにより、移行はアクティブなユーザーの応答時間に影響を与えません。追い出されたプロセスは、別のアイドルマシンに再移行されるか、ホームマシンで実行されます。Spriteは、大規模なユーザーコミュニティによって日常的にプロセス移行が使用されている数少ないシステムの一つです。
Spriteの3番目の主要な成果は、シングルシステムイメージです。ファイルシステムとプロセス移行は、ストレージと処理能力がワークステーション間で共有可能になるため、シングルシステムイメージの最も明白な証拠を提供します。しかし、他の多くの方法でもSpriteは単一のシステムのように見え、感じられます。ルートパーティションは1つ、パスワードファイルは1つ、スワップ領域(ネットワークファイルシステム内)は1つ、ログインデータベースは1つなどです。「finger」コマンドは、コマンドが呼び出されたワークステーションだけでなく、Spriteクラスタ内のすべてのワークステーションのすべてのユーザーに関する情報を提供します。システム管理は、ネットワーク上の50台のマシンがあっても、10台のマシンがある場合よりも難しくなく、新しいマシンを追加することは、新しいユーザーアカウントを追加することよりも難しくありません。Spriteのシングルシステムイメージは、同じクラスタ内で異なるマシンアーキテクチャもサポートします。アーキテクチャに依存しない情報とアーキテクチャ固有の情報を分離するためのフレームワークを開発しました。すべてのアーキテクチャの情報は常に表示されるため、クロス開発が簡素化されますが、各マシンは必要に応じて適切なアーキテクチャ固有の情報を使用します。
Spriteの4番目の主要な成果は、ログ構造ファイルシステム(LFS)です。これは、ファイルシステム設計における根本的に新しいアプローチを示しています。LFSはディスクをテープのように扱い、情報を大きな連続したブロックで書き込むことで、非常に効率的です。ディスク上の大きな空き領域を継続的に確保するための新しいガベージコレクションメカニズムを開発しました。その結果、小さなファイルをディスクに書き込む速度は、他の既存のファイルシステムよりも1桁速くなりました。同時に、読み取りや大きな書き込みなどの他の操作は、他のシステムと同等以上に処理されます。ログ構造ファイルシステムには、高速なクラッシュリカバリ、ディスク上の情報を圧縮形式で保存できる機能、ファイルごとにブロックサイズを変更できる機能など、他にも多くの利点があります。
上記の結果に加えて、リカバリ機能の強化、複数のサーバーにファイルをストライピングするZebraという新しいファイルシステム、ディスクアレイを使用した高帯域幅ファイルサービスなど、いくつかの有望なプロジェクトが現在進行中です。Spriteプロジェクトが終了する前に、これらの各プロジェクトからも大きな成果が得られると予想しています。
Spriteプロジェクト全体を通じて、システムの動作を特徴づけ、その情報を使用して将来の開発を導くように努めてきました。最も重要な成果の一部は、私たちが測定したことです。プロジェクトの設立は、1984年と1985年に行われたタイムシェアリングシステムでのファイルシステム測定に部分的に基づいていました。1991年にはSpriteの使用状況の追加測定を行い、パターンの変化を確認し、ネットワークシステムにおける不揮発性メモリの潜在的な応用を分析しました。
おそらく最も重要な成果は、私たち自身のためだけでなく、プロジェクトのピーク時には80人以上に達したユーザーコミュニティをサポートするために、システムを機能させることができたことです。これらのユーザーの多くは、メールや印刷など、日常のコンピューティングニーズすべてにSpriteに依存していました。数年間の間、Sprite開発者はわずか半ダース程度しかいないにもかかわらず、同時に25〜35のログインが見られるのは一般的でした。私が知る限り、ゼロから新しいオペレーティングシステムカーネルを開発し、それをこれほど大規模なユーザーコミュニティにこれほど長くサポートするために使用した大学プロジェクトは、1960年代後半にMITで行われたMulticsプロジェクト以外にはありません。さらに、Sprite(合計で200,000行以上の新しいコード)を、平均約4人の大学院生と1〜2人のスタッフまたは学部アシスタントという小規模なチームで構築しました。プロジェクト会議が開催できるほどの規模になることはありませんでした。