0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【アーキテクチャの変遷 #4】仮想化とクラウドの誕生

0
Posted at

この記事で分かること

  • なぜ「仮想マシン」という仕組みが生まれたのか
  • なぜx86サーバーの仮想化(VMware)が必要とされたのか
  • なぜクラウド(Amazon EC2)が生まれたのか

「アーキテクチャの変遷」シリーズの4回目です。前回まではアプリケーション内部の構造(モノリス・MVC)や、複数システムをまたぐ統合(SOA・ESB)を扱いました。今回は、1台のハードウェアの中身そのものを分割する「仮想化」と、それを誰でもインターネット経由で借りられるようにした「クラウド」について、IBM Journal of Research and Developmentに掲載されたR. J. Creasy氏の論文、VMwareの技術者による学会論文、Computer History Museum、AWS公式ブログで確認できた事実に沿って整理します。

なぜ「仮想マシン」という仕組みが生まれたのか

IBM Journal of Research and DevelopmentにR. J. Creasy氏が執筆した論文「The Origin of the VM/370 Time-sharing System」によると、計算機が高速になり1回のプログラム実行時間が短くなるにつれて、人間がオペレーターとして機械を操作する際のオーバーヘッドが相対的に大きな問題になっていったと説明されています1。同論文は、汎用的なタイムシェアリング(複数の利用者が同時に対話的に計算機を使う仕組み)システムの先駆的な取り組みが、1960年代初頭にM.I.T.で行われたと述べています1。

この課題に対してIBMのCambridge Scientific Centerは、1966年にIBM System/360 Model 40を改造したハードウェア上でCP-40を稼働させました1。同論文は、CP-40が「オペレーティングシステムの研究、アプリケーション開発、レポート作成といった多様な活動を含む、Cambridgeセンターのすべての活動を支援するために設計された」と説明しています1。ほぼ同時期に、新たに発表されたSystem/360 Model 67のアドレス変換機能を使うCP-67も構築され、多くの実機に導入されました1。IBM System/370ファミリー向けのVM/370は、1972年に利用可能になりました1。

Creasy氏は、CP/CMSという設計の核心的な考え方について、「計算機資源の管理」と「利用者へのサポート」を分離することだったと述べています1。具体的には、System/360の命令セットそのものをタイムシェアリング制御プログラム(CP)のインターフェースとし、各利用者がSystem/360の完全な機能を持つ、という設計です1。同論文は、この結果として生まれた仮想マシンについて、「ある仮想マシンは、他の仮想マシンの動作によって侵害されることがない。それは、今日のパーソナルコンピュータのように、利用者ごとに独立し隔離された、プライベートで安全かつ信頼できる計算環境を提供する」と説明しています1。

CP/CMSの構造を整理すると、次のようになります。CPが物理ハードウェアの資源管理を担い、その上に作られた複数の仮想マシンそれぞれで、1利用者向けの小さなOSであるCMSが動くという構成です1。

出典から確認できる理由は、計算機の高速化によって人間の操作オーバーヘッドが相対的に重くなり、複数の利用者が対話的に使える環境が求められたこと、そしてIBMがその解決策として「資源管理」と「利用者向け環境」を分離し、各利用者に独立した仮想的なSystem/360を与える、という設計を選んだことです1。

なぜx86サーバーの仮想化(VMware)が必要とされたのか

Computer History Museumのブログ記事によると、Diane Greene氏は1998年にVMwareの共同創業者兼CEOになったと記されています(二次情報)2。同館の別の記事は、1990年代後半の課題として「コンピュータは1つのOSしか動かせなかった。場合によっては、1つの業務アプリケーションが1台のマシンの能力の20%未満しか使っていないにもかかわらず、そのマシン全体を占有していた」と説明しています(二次情報)3。同記事は、VMwareの創業技術者をMendel Rosenblum氏、Scott Devine氏、Ellen Wang氏、Edouard Bugnion氏とし、彼らが開発したx86仮想化プログラムによって「1台のマシンを、それぞれ独自のOSを持つ複数の仮想マシンに分割できるようになった」と説明しています(二次情報)3。

VMwareのエンジニアであるKeith Adams氏とOle Agesen氏が2006年のASPLOSで発表した論文「A Comparison of Software and Hardware Techniques for x86 Virtualization」は、x86アーキテクチャについて「最近まで、x86アーキテクチャは古典的なトラップ・アンド・エミュレート方式による仮想化を許していなかった」と述べています4。トラップ・アンド・エミュレートとは、特権命令の実行をCPUがトラップし、それをソフトウェアがエミュレートする仮想化の方式です4。同論文によると、ゲストOSがコードセグメントセレクタを読むことで自分が非特権状態にあることを観察できてしまう点や、popfのような命令がユーザーレベルで実行された際にトラップを発生させずに特権フラグの変更を単に無視してしまう点が、その理由として挙げられています4。このため、VMware WorkstationやVirtual PCといったx86向けのVMM(仮想マシンモニタ)は、古典的なトラップ・アンド・エミュレート方式ではなく、バイナリトランスレーション(ゲストのコードを実行時に書き換える技術)に頼る必要があったと説明されています4。

同論文は、こうしたソフトウェアVMMによって「x86仮想マシンの広範な利用が可能になり、サーバー統合、障害の分離、セキュリティ、リソース管理が実現した」と述べています4。

出典から確認できる理由は、1990年代後半、1台のコンピュータでは1つのOSしか動かせず、能力の20%未満しか使わないアプリケーションのためにマシン1台を占有してしまうという課題があり、それを解決する技術としてx86仮想化が開発された、という点です3。ただし、x86アーキテクチャはIBM System/360/370のように仮想化を前提とした命令セットではなかったため、トラップ・アンド・エミュレートという古典的な方式が使えず、バイナリトランスレーションという別の技術が必要になりました4。IBMのメインフレームでは命令セット自体を仮想マシンのインターフェースにできたのに対し、x86のパソコン・サーバー向けアーキテクチャでは同じ前提が成り立たなかった、と考えられます。これは筆者の解釈です。Creasy氏の論文はSystem/360の命令セットがそのまま仮想マシンのインターフェースになったと述べており1、Adams氏らの論文はx86では命令レベルでの透過的な仮想化ができなかったと述べているため4、両者を対比するとそのように読めますが、x86とSystem/360を直接比較した記述は、いずれの出典にもありません。

項目 IBM VM/370 VMware(x86)
登場年 1972年1 1998年(創業)2
仮想化の単位 System/370の命令セットそのもの1 x86マシンをソフトウェアで仮想マシンに分割3
実現方式 命令セットを仮想マシンのインターフェースに利用1 バイナリトランスレーション4

なぜクラウド(Amazon EC2)が生まれたのか

AWS公式ブログに掲載されたJeff Barr氏による2006年8月25日の記事によると、Amazon EC2はこの日からベータテストとして公開されました5。同記事によると、ベータ版の仕様は「1.7 GHz Xeonプロセッサ相当の性能、1.75GBのメモリ、160GBのローカルディスク、250Mbpsのネットワーク帯域」を持つ仮想サーバーを、1時間10セントで利用できるというものでした5。利用できる仮想サーバーの数は、ベータ期間中は1アカウントあたり最大20台(特別な取り決めがあればそれ以上)とされていました5。同記事は、利用例として「数週間ごとに数時間だけ15〜20台のマシンが必要になる機能的MRI分析」や「営業時間中だけ利用すればコストを50%削減できる、バックオフィスの在庫管理アプリケーション」を挙げています5。

AWS公式ブログに掲載された、EC2の15周年を振り返るJeff Barr氏自身の記事によると、同氏は「以前のキャリアで、さまざまなコロケーション施設(他社のデータセンターの一部を借りて自社のサーバーを置く形態)でいくつものプロジェクトを構築・運用した経験があり、長期契約の柔軟性のなさと、オンデマンドでスケールする難しさを痛感していた」と述べています6。同記事はまた、「Andy JassyがAWSグループを立ち上げてその構想を文書化する際、Amazon Execution Serviceと呼ばれる仕組みの構築を提案する文書を見せてくれた」とも記しています6。同記事によると、ベータ時点のEC2には「m1.small」と後に呼ばれるようになるインスタンスタイプが1種類だけ存在し、リージョンも米国東部(北バージニア)の1つのみで、ストレージはインスタンスと同じ寿命しかもたない一時的なものだったとされています6。

出典から確認できる理由は、コロケーション施設を使う場合に生じる「長期契約の柔軟性のなさ」と「オンデマンドでスケールする難しさ」という課題があり、それを解決するために、事前にハードウェアを購入せずに時間単位で仮想サーバーを借りられる仕組みが構想された、という点です6。

現在のAWS公式ドキュメントでは、仮想サーバーを1台起動するAWS CLIのコマンド例として、次が示されています7。

aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type t2.micro \
    --key-name MyKeyPair

2006年当時はベータ登録と専用のツールが必要でしたが、仮想サーバーをコマンド一つで借りられるという発想自体は、EC2のベータ発表の時点から変わっていません5。

まとめ

  • IBMは1966年、Cambridge Scientific CenterでCP-40を稼働させ、1972年にはSystem/370向けにVM/370を利用可能にしました。計算機の高速化で人間の操作オーバーヘッドが相対的に重くなったことが課題で、資源管理とユーザー支援を分離し、各利用者に独立した仮想System/360を与えることで解決しました(IBM Journal論文)。
  • VMwareは1998年に設立されました。1990年代後半、1台のコンピュータが1つのOSしか動かせず、能力の20%未満しか使わないアプリケーションのために占有されるという課題があり、x86アーキテクチャが古典的なトラップ・アンド・エミュレート方式を許さなかったため、バイナリトランスレーションという技術でx86サーバーの仮想化を実現しました(Computer History Museum・VMware技術者によるASPLOS論文)。
  • Amazon EC2は2006年8月25日にベータとして公開されました。コロケーション施設の長期契約の柔軟性のなさとオンデマンドでスケールする難しさが課題とされ、事前購入なしで仮想サーバーを時間単位で借りられる仕組みとして構想されました(AWS公式ブログ)。

シリーズの他の記事

用語解説

  • タイムシェアリング: 複数の利用者が1台の計算機を対話的に同時利用できるようにする仕組みのこと1。
  • コントロールプログラム(CP): IBMのCP/CMSにおいて、計算機資源の管理を担い、仮想マシンを作り出す部分のこと1。
  • トラップ・アンド・エミュレート: ゲスト(仮想マシン内のソフトウェア)が特権命令を実行しようとした際にCPUがトラップ(割り込み)を発生させ、それをVMMがエミュレートする、仮想化の古典的な方式のこと4。
  • バイナリトランスレーション: ゲストのコードを実行時に書き換えることで、トラップが発生しない命令でも仮想化できるようにする技術のこと4。
  • コロケーション: 自社のサーバー機器を、他社が運用するデータセンターの施設内に設置して運用する形態のこと6。

出典

この記事はAIの支援で下書きを作成し、公開前に人が確認しています。

  1. R. J. Creasy, "The Origin of the VM/370 Time-sharing System," IBM Journal of Research and Development ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17

  2. From Sailboats to Startups: Diane Greene's Silicon Valley | Computer History Museum(二次情報) ↩ ↩2

  3. Turtles, Blocks, and Memories | Computer History Museum(二次情報) ↩ ↩2 ↩3 ↩4

  4. Keith Adams and Ole Agesen, "A Comparison of Software and Hardware Techniques for x86 Virtualization," ASPLOS XII, 2006 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  5. Amazon EC2 Beta | AWS Blog ↩ ↩2 ↩3 ↩4 ↩5

  6. Happy 15th Birthday Amazon EC2 | AWS Blog ↩ ↩2 ↩3 ↩4 ↩5

  7. Use RunInstances with an AWS SDK or CLI | Amazon EC2 Documentation ↩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?