「仮想化」への邪推

 というわけで、予告通りITPro主催の「仮想化の全てが分かる一日」に行ってきました。
 「仮想化」というのは簡単に言い過ぎると「あるハードウェアをソフトウェアによって、あるハードウェアに見せかける技術」ということでしょうか。要するにハードウェアエミュレーターです。これを応用すると、複数のサーバーを一台のサーバーに見せかけて一つのOSを動かしたり、一つのサーバーを複数のサーバーに見せかけて複数のOSを動かしたりすることが出来ます。もちろんあるサーバーを同じ種類サーバーに見せかけることも出来ます。一見無駄なようですが、同じエミュレータが動く物理的には別のサーバーに、ポンと移すことが出来ることによるメリットもあるそうです。

 「セキュリティ水準が低いソフトを使い続けなければならない場合、せめて外部アタックの盾となる環境」として「仮想化」に期待できるといいなと思っていたが、実は全然期待していない。この種の新しいセールストークを聞く度に感じる違和感「前に見たことがあるぞ」というのを今回も感じたからだ。「仮想化」というのは、メインフレームの世界では当たり前のことである。物理的には1台のマシンを、2台に分けて本番用と開発用にしたり、OSを分けたり、あるいは物理的に1台のマシンを開発機に使いつつ、本番機ダウンの際には、中身を入れ替えて本番機に転用できる仕組みを作ったり、似たようなものは使われていた。
 あるいはスーパーコンピュータは複数のCPUをあたかも1台であるかのように使って高い計算能力を実現していた。
 まあ、メインフレームでは既存の技術だ、というのは講師に立った方々も言っていたからいいんだけど、しかし、ここでスポンサーの顔ぶれを見て思う。
Intel、IBM、HP、Dell、VMWare、富士通、Novell(Suse Linux)、日立、Microsoft、日本AMD。
 あたりまえのことであるが、ハードウェアないしソフトウェアで仮想化プラットフォームを供給している会社である。うちのアプリケーションは仮想化環境での動作を保証します、という奇特なビジネスソフト提供ベンダーが1,2社あってもよさそうなものだが、ない。まだまだハード/プラットフォームベンダーが騒いでいるレベルなんだろうな、と思いながらも、やはりつっこみを一つ。
 なぜ、世界でもっとも普及している(と思われる)仮想マシン供給元が参加していない。つまりJavaの本山サン=マイクロシステムズである。(VT100の普及数をそろそろ越えたよねえ、携帯電話があるから。)
 ということで今「仮想化」と言われているのは、Intel x86プラットフォームの仮想化のことなのね、と決めつけて、微妙に納得。

 そういえば、何人かの講師が言っていた「今はCPUがめちゃくちゃ速いですから」「使用率を上げて効率的に使わないと」。
 なるほど、ハードウェアとソフトウェアの進歩の速度の問題なのね、と納得。
 ハードウェアはムーアの法則とやらが正しいとすると、指数関数的に処理能力が増す。
 一方、ソフトウェアはコード行数が増えるほど複雑化し、指数関数的に生産性が落ちる。
(インテルの技術者は人間ができているなあ、18〜24ヶ月毎に集積度が倍になるのは、自分たちの努力の結果。それを経営トップに「法則」なんて自然現象のように言われると「おれたちの努力を分かっていない」とモチベーションが落ちるはずなのに、律儀にも「法則」を実現している。)

 従来は、ハードウェアの性能がソフトウェアの潜在力に比して圧倒的に低く、ハードに負荷をかけないようなソフトが書かれてきた、つまりインターフェースは貧弱で使いにくかった。仕方なくユーザーもそれに合わせていた。かくしてIntelの80286,386では実用的なウィンドウシステムを走らせるのは辛かったので、コマンドベースのアプリを使用していた。(ただし性能の低いハードに合わせてコードを書くのは大変。)
 ところが、ハードが速くなり、GUIが易々と実現できるようになった。インターネットというキラーアプリも普及した。これ以上のフレンドリーなインターフェースを持ったソフトは、開発する方も辛いが、ユーザーとしても特にほしいと思わなくなくなった。そうなると、これ以上のハードウェアは要らなくなる。
 むしろ満足度が高ければ、プラットフォームは変わらない方がよい。あたりまえだ、現用アプリを移植とまで大がかりなことは求められないとしても、動作確認は必要だし、デバイスの変更に伴うドライバを変えたりしないといけなくなる。
 こうなるとどうなるか、新しいハードウェアが売れなくなるのである。
 かくしてインテルの財務状況はこんな具合になる。
2006年第1四半期 2005年第1四半期との比較 2005年第4四半期との比較
売上高 89億ドル 5%減 12%減
営業利益 17億ドル 44%減 49%減
純利益 13億ドル 38%減 45%減
 こりゃなんとかせなならんわ、と思うのが当たり前だろう。
 というわけで引っ張り出してきたのが「x86プラットフォームの仮想化」なのだろう。(AT互換機、DOS/V機という名称は、今やx86プラットフォームになったらしい。)
 もちろん「x86仮想化が可能になりました、新しいCPUを買ってください」というセールストークに素直に従ってくれる普通の人などいないので、ユーザーのメリットをいろいろと考えることになる。
 で、「仮想化」はユーザーメリットをかなり見いだしやすい技術のようだ。(私は技術的に可能になったから、ユーザーは使うはずだ、という発想を毛嫌いしている。)

メリットのカテゴリ分けはVMWareの提唱するものが、一番分かりやすかったので、それを使用する。解説は当然私が適当に揶揄しながら書いている。

1.サーバの統合と抑制
 CPUがオーバースペックになってきた。一方物理的なサーバーの数は増えてコストがかかるようになった。そこで、速いCPUを積んだ比較的少数のサーバーを、論理的に分割することによって、以下のメリットを得る。
 購入コストの低減・・・サーバの数少
 運用コストの低減・・・管理工数、スペース、電気代
 CPU使用効率の向上・・・1台のサーバを複数のOSで使用
 セキュリティ・・・物理的な情報漏洩の蛇口が少なくなります。
2.アプリケーションライフサイクルの分離
 古いシステムが動いていたハードウェアが老朽化・サポート停止となっても、新しいハードウェアで古いデバイスをシミュレートする機能を提供すれば、古いシステムが動作する。
3.テストおよび開発
 開発マシン上で本番マシンをシミュレートすることによって、本番環境と変わらない開発環境を提供する。また、こうして作った開発環境は他のハードウェアにコピーを作りやすいので、ぽこぽこクローンが作れる。
4.プロビジョニング
 既にあるサーバーの上に仮想サーバを構築できる。購入/設置の手間が省けるor先送りできる。
 保有資源(CPU,Disc,Memory)をまとめて各OSに必要な分量を動的に割り当てる。(処理ピーク時には資源を優先的に割り当てることができる。)
5.ビジネス継続性
 稼働している仮想マシンを他の機器にそのまま移行できる。ダウンタイムゼロも可能!(ただし計画停止。これって、オフサイトバックアップからの切り戻しに使うとめちゃくちゃ便利ちゃうか?)
6.企業のデスクトップ
・個人用環境と業務用環境の併存
 個人用には、RichClientを使いたい。業務用にはThinClientの方が(セキュリティ/管理の面から)都合がいい。というわけで一台のパソコン上に2つのOSをインストールし、家庭用環境と業務用環境を立ち上げる。家庭用環境でWinnyを使っても業務用環境のデータが流出することはない。
・クライアント管理
 同じPCを論理的に2台に分け業務環境と管理環境を立ち上げる。
 物理的には同一筐体内の業務環境に対して、情報漏洩管理/パッチ/ウィルス監視/ネットワーク自動遮断を行う。
・ブレードサーバー1台を10台程度のクライアントとして使用可。
 ホントに動けば便利そうだ。というわけでパネルディスカッションまでいてしまった。
 3社の人間が出てきたが、いずれも使用はVMWare。
 適用分野は、いろいろあったが、レンタルサーバというのが一番感心。顧客は気が付いていないかもしれない。せこいと感じつつもうまい。詰め込みすぎて性能が問題になったそうだ。そりゃそうだろう。
 別の会社、ウィルスのパターンファイルのアップデートとWindowsUpdateの自動起動をデフォルトの時刻にしたところ、パンクした。そりゃそうだろうなあ。これは仮想化を使わなくてもありうること。
 システムコールを伴うアプリ、ちょっとおそくなる。そうだろうなあ。
 運用管理はVMWare製で結構うまくゆくそうな。(仮想化の設定と資源の利用状況が分かる程度のような気がするが。)
 アプリケーションベンダーが積極的にコミットしていないので、システムサイドのメリットはあるが、エンドユーザーのメリットはまだないらしい。そうだろうなあ。
 トラブルがおこると仮想化してるからじゃないかと疑われる。そりゃそうだろうなあ。無実の罪を晴らすために比較対照の環境として古いサーバーを置いているところもあるそうだ。あきれるほどの努力だなあ。ThinClientにして、ハードをマシンルームに置いておいた場合、ユーザーがシャットダウン処理をついやってしまって、すると管理者がマシンルームに行って機器を立ち上げないといけないらしい。仮想化でなくても起こりそうなことだが、ぼくならスタートメニューからシャットダウンができないようにプログラム一本書くだろうなあ。そういうことを思いつかない人でも使えるんだから、VMWareってすごいんだなあ。
 「そりゃそうだろうなあ」という感想が出たということは、どうやら使える技術ではあるらしい。

 結構意識的にハードウェア本体がサポートする仮想化というのを避けてきたが、これには理由がある。CPU設計の段階で、仮想化をサポートするという発表もあったが、眉唾だと思っているからだ。ほんの2年前に「ハイパースレッディングテクノロジー」として1つのCPUを2個あるかのように分けて使える技術を開発して、売り出したのだが、最新型のCoreDuoにおいて、この機能は無くなっている。不要だったのか、あるいは失敗したのだ。だからIntelがハードウェアで仮想化をサポート、と言ってもすぐに納得するわけにはいかない。AMDの言うCPUで仮想化をサポートは「OSが出すCPUへの特権命令をFetchする」という分かりやすい機能なので個人的には納得できる。一方Intelの仮想化サポートは特権命令を全て失敗させて、一度値を戻させるというアクロバティックなものなので、直感的に警戒してしまう、というところもある。

コンピュータネタ、目次
ホーム