どのハイパーバイザーが優れているかについての最近の議論の後、特定の名前を参照せずに現代の仮想化システムの機能を書き出すというアイデアが生まれました。 これは「誰が優れているか」の比較ではなく、「仮想化で何ができるか」という質問に対する答えです。産業用仮想化の可能性の一般的な概要です。
コード実行
ハイパーバイザーは仮想マシンを完全に制御するため、マシンのプロセスを具体的に制御できます。
さまざまな仮想化システムは、コードを実行するためのいくつかの方法を提供します(完全なエミュレーションは産業用仮想化では使用されないため、リストには含まれていません)。
- バイナリ書き換え。 このアプローチでは、ハードウェア仮想化なしのホスト仮想化にVMWareとConnectix Virtual PC(Microsoftが購入)を使用します。 ハイパーバイザー(バーチャライザー)は実行可能コードを調べ、ブレークポイントで「仮想化」を必要とする命令をマークし、そのような命令のみをエミュレート(仮想化)します。
- ハードウェアの仮想化。 AlphaおよびSystem / 360のアンティークテクノロジー、amd64 / i386の比較的新しいテクノロジー。 リング-1の外観を導入します。これは、一連の仮想化命令を通じてマシンを制御するハイパーバイザーを実行します。 IntelとAMDのテクノロジーはわずかに異なります。AMDはメモリコントローラー(プロセッサ上)をプログラムして仮想化(ネストページ)の計算負荷を軽減する機能を提供します。Intelはこれを個別のEPTテクノロジーとして実装しました。 製品で積極的に使用され、VMWare、Xen HVM、KVM、HyperVで「エイリアンシステム」を実行します。
- 準仮想化。 この場合、ゲストシステムのカーネルはコンパイル段階で「仮想化」されます。 ユーザースペースは実質的に変わりません。 ゲストシステムはハイパーバイザーと連携し、ハイパーバイザーを介してすべての特権呼び出しを行います。 ゲストシステム自体のコアはring0ではなくring1で動作するため、反抗したゲストはハイパーバイザーに干渉できません。 xen(PVモード)およびopenvz(openvzは何らかの意味でユニークです。単にゲストカーネルが存在しないため、仮想化よりも刑務所に近いため、ある程度の隔離がありますが、オープンソースシステムの仮想化に使用されます。提供)。
- コンテナ仮想化。 「コンテナ」上の多くのプロセスを分離できます。各プロセスは、コンテナからのプロセスのみにアクセスできます。 これは、仮想化、bsd刑務所、およびOS内のプロセスを相互に分離するための適切に作成されたシステムの間の微妙な境界線上にあります。 使用される共有メモリマネージャ、同じカーネル
実際には、準仮想化ドライバーはHVMとバイナリ書き換え(ゲストツールと呼ばれることが多い)の両方で使用されます。 準仮想化がパフォーマンスにおいて他のすべての方法よりも大幅に優れているのは、I / O操作です。
例外なく、すべてのハイパーバイザーは仮想マシンでサスペンド/一時停止操作を実行できます。 このモードでは、ディスクのメモリデータの保存と「回復」(再開)後の作業の継続により、マシンの動作が中断されます。
一般的な機能は、
移行の概念です。つまり、あるコンピューターから別のコンピューターへの仮想マシンの転送です。 シャットダウンせずにオフライン(1台のコンピューターでオフ、2台目のコンピューターでオン)およびオンライン(通常、ライブと呼ばれる、「ライブマイグレーション」)が発生します。 実際には、あるマシンでサスペンドし、データ転送プロセスを最適化して別のマシンで再開することを使用して実装されます(最初にデータが転送され、次にマシンがサスペンドされ、移行が開始された時点から変更されたデータが転送され、その後、新しいマシンが新しいホストで開始されます)。
また、xenaでは、2台以上のホスト(Remus)で1台のマシンを並列実行する技術が約束されています(そして、ほとんど製品に導入されているようです)。これにより、サーバーの1つに障害が発生しても、中断/再起動せずに仮想マシンを継続できます。
メモリ管理
従来の仮想化モデルでは、ゲストマシンに一定量のメモリを割り当てることを想定しており、変更はオフになった後にのみ可能です。
最新のシステムでは、ゲストシステムのRAM容量を手動または自動で変更する機能を実装できます。
次のメモリ管理方法を使用できます。
- バルーニング。 一般に受け入れられているメカニズム(少なくとも、VMWareのようなxenとhyperv)アイデアの本質は単純です。ゲストシステムの特別なモジュールがゲストシステムにメモリを要求し、それをハイパーバイザーに渡します。 適切なタイミングで、彼はハイパーバイザーからメモリを取得し、ゲストシステムに提供します。 主な機能は、仮想マシンのアイドルメモリを戻す機能です。
- メモリのホットプラグ。 外出先でメモリを追加します。 Windows Serverの将来のsp(このリリースにはまだリリースはありません)、xen 4.1(linux 2.6.32)のhyper-vでサポートされています。 これは、ハードウェアホットプラグに似たメモリの追加です。 再起動することなく、移動中のサーバーに移動中にメモリを追加できます。 この方法の代わりに、ハイパーバイザーが既に「ゼロではない」ボールでマシンを起動するときに、必要に応じて「吹き飛ばす」ことができる事前膨張ボールがあります。 現在のところ、メモリのホットアンプラグはLinuxでのみ可能です(動作するかどうかはまだ言えません)。 ほとんどの場合、近い将来、MSはプラグを抜くためにWindowsを終了します。
- 共通メモリ。 特にopenvzの場合、メモリは共通プールから取得されます。仮想マシンは、外出中に変更できる数値の形式の人為的な制限によってのみ制限されます。 ただし、最も柔軟なメカニズムはopenvzに固有のものであり、不快なメモリ効果がいくつかあります。
- メモリ圧縮。 ゲストのメモリは(圧縮アルゴリズムによって)「圧縮」され、場合によっては追加のボリュームが得られます。 ペナルティ:読み取りおよび書き込みの遅延、ハイパーバイザー側からのプロセッサーの負荷。
- ページ重複排除。 メモリページが一致する場合、それらは2回保存されず、そのうちの1つが別のリンクになります。 複数の仮想マシンが同じソフトウェアパッケージ(および同じバージョン)で同時に起動された場合、うまく機能します。 コードセクションは一致して重複排除されます。 データの非効率性のために、画像はディスクキャッシュによって破損されます。ディスクキャッシュは、各マシンが独自に所有している(そしてすべての空きメモリを占有しようとしています)。 もちろん、重複のチェック(メモリページのハッシュの計算)は無料の操作ではありません。
- NUMA-サーバー上にあるボリュームよりも大きいボリュームで仮想マシンのメモリを拡張する機能。 このテクノロジーは未加工であり、主流ではありません(深く掘り下げたわけではないので、これ以上は説明しません)
- メモリオーバーコミットメント/メモリオーバーセル-仮想マシンに実際よりも多くのメモリをアナウンスするためのテクノロジ(たとえば、使用可能な16 GBのみで各2 GBの10個の仮想マシンへの約束)。 このテクノロジーは、すべてのメモリを100%まで使用する通常モードの仮想マシンはないという考えに基づいています。
- 仮想マシンのメモリをディスクに部分的にアンロードできる一般的なスワップ。
周辺機器
一部のハイパーバイザーでは、仮想マシンが実際の機器(さらに、異なる仮想マシン、異なる機器)にアクセスできます。
また、コンピューター上にない機器を含む機器をエミュレートすることもできます。 最も重要なデバイス-ネットワークアダプターとドライブは別々に考慮されます。 その他:ビデオアダプター(3Dを含む)、USB、シリアル/パラレルポート、タイマー、ウォッチドッグ。
これを行うには、次のテクノロジーのいずれかを使用します。
- 実デバイスのエミュレーション(低速)
- ゲストマシンへのデバイスへの直接アクセス(「転送」、パススルーとして)。
- IOMMU(DMAに使用されるページアドレスのハードウェア変換。これにより、仮想マシン間でデバイスが使用するRAMを共有できます)。 IntelはVT-dを呼び出します(VT aka vanderpoolと混同しないでください。これは、プロセッサのリング-1のテクノロジーです)。
- 最小限の機能を実装する準仮想デバイスの作成(実際には、2つの主要なクラス-ブロックデバイスとネットワークデバイスを以下に分解します)。
ネットワーク機器
ネットワークデバイスは通常、3番目または2番目の抽象化レベルで実装されます。 作成された仮想ネットワークインターフェイスには、仮想マシンとハイパーバイザー/制御ドメイン/仮想化プログラムの2つの端があります。 ゲストからのトラフィックは変更されずに所有者に送信されます(再送信、一致する速度などのダンスなし)。 そして、かなり重大な困難が始まります。
現時点では、第3レベル(たとえば、openvzなどのIPアドレスレベル)でネットワークインターフェイスをエミュレートするシステムを除いて、他のすべてのシステムは次の機能セットを提供します。
- 1つ以上の物理インターフェースとのインターフェースのブリッジング(第2レベル)。
- 実際のネットワークにアクセスせずに、ホストとゲスト(1つ以上)の間にローカルネットワークを作成します。 この場合、ネットワークは純粋に仮想的な意味で存在し、「ライブ」ネットワークに関連付けられていないことに注意してください
- ゲストシステムのルーティング/ NATトラフィック。 仮想インターフェイス(およびNAT / PAT)に対してルーティングが有効になっている、前述の方法の特殊なケース
- GRE / VLANでトラフィックをカプセル化し、ハードウェアスイッチ/ルーターに送信する
一部の仮想化システムは、仮想マシンのネットワークインターフェースを物理ネットワークインターフェースと仮想スイッチの存在でブリッジする場合を分離します。
一般的に、仮想マシンのネットワークは、移行中に特定の頭痛の種を示します。 インターフェイスブリッジングを備えた既存のすべての製品システムは、1つのネットワークセグメントでのみマシンの透過的なライブマイグレーションを可能にし、トラフィックスイッチングのポート変更について上位スイッチに通知するための特別なトリック(偽ARP)が必要です。
現時点では、かなり興味深いシステムが開発されています-オープンフローコントローラへのパケットのパスを決定するタスクを可能にするオープンvSwitch-仮想ネットワークの機能を大幅に拡張する可能性があります。 ただし、オープンフローとvSwitchは少し外れています(少し後で説明します)。
ディスク(ブロック)デバイス
これは、仮想マシンの2番目の重要なマイルストーンです。 ハードディスク(より正確には、情報を保存するためのブロックデバイス)は、重要な仮想化の2番目のコンポーネントであり、おそらく最初のコンポーネントです。 ディスクサブシステムのパフォーマンスは、仮想化システムのパフォーマンスを評価するために重要です。 プロセッサとメモリの大きなオーバーヘッド(オーバーヘッド)は、ディスク操作のオーバーヘッドよりも穏やかに経験されます。
最新の仮想化システムには、いくつかのアプローチがあります。 1つ目は、完成したファイルシステムを仮想マシンに提供することです。 同時にオーバーヘッドはゼロになる傾向があります(openvzに固有)。 2番目-ブロックデバイスのエミュレーション(スマートコマンドやSCSIコマンドなどのryushechekなし)。 仮想マシンのブロックデバイスは、物理デバイス(ディスク、パーティション、論理ボリュームLVM)またはファイル(ループバックデバイスを介して、またはファイルの「内部」でブロック操作を直接エミュレートすること)にバインドされます。
追加機能は、ハイパーバイザーによるネットワークストレージの使用です。この場合、移行プロセスは非常に簡単です。1台のホストでマシンを一時停止し、2台目のホストを継続します。 ホスト間でデータを転送しません。
さらに、基本レベルのブロックデバイスがそれをサポートしていれば(LVM、ファイル)、ほとんどのシステムは、外出先で仮想ブロックデバイスのサイズを変更する機能を提供します。 これは一方で非常に便利であり、ゲストOSは他方でこれに対して完全に準備されていません。 もちろん、すべてのシステムは、オンザフライブロックデバイス自体の追加/削除をサポートしています。
重複排除機能は通常、基盤となるブロックデバイスプロバイダーに割り当てられますが、たとえば、openvzでは「コンテナーテンプレート」を使用するコピーオンライトモードを使用でき、XCPでは相互にコピーオンライトの依存関係を持つブロックデバイスのチェーンを作成できます。 これにより、生産性が低下する一方で、スペースを大幅に節約できます。 もちろん、多くのシステムでは、オンデマンドでディスクスペースを割り当てることができます(VMWare、XCPなど)-ブロックデバイスに対応するファイルは、スパースとして作成されます(または、「スキップ」空スペースをサポートする特定の形式を持ちます)。
ディスクへのアクセスは、速度、あるデバイス(または仮想マシン)に対する他のデバイスの優先度によって制御できます。 VMWareは、I / O操作の数を制御する素晴らしい機会を発表しました。これにより、すべてのゲストへのサービス提供にわずかな遅延が生じ、ゲストの混乱が最も遅くなります。
専用ディスクデバイスは複数のゲスト間で共有でき(GFSなど、これに対応したファイルシステムを使用している場合)、共有ストレージを使用してクラスターを簡単に実装できます。
ハイパーバイザーがゲストのメディアへのアクセスを完全に制御するため、ディスクのスナップショット(および仮想マシン自体)を作成し、スナップショットのツリーを構築することが可能になります(仮想マシンの状態もこれらのスナップショットに含まれます)車)。
同様に、バックアップが実装されます。 バックアップを実装する最も簡単な方法は、バックアップシステムのディスクをコピーすることです。これは通常のボリューム、ファイル、またはLVパーティションであり、外出先も含めて簡単にコピーできます。 Windowsの場合、通常、バックアップの準備の必要性をシャドウコピーに通知する機会が与えられます。
ハイパーバイザーとゲスト間の相互作用
一部のシステムでは、ゲストシステムとハイパーバイザー(より正確には管理OS)の間に通信メカニズムが提供され、ネットワークの操作性に関係なく情報を送信できます。
ゲストシステムの「自己移行」に関する実験的な開発(製品の準備ができていません)があります。
相互互換性
ハイパーバイザー間の相互作用を標準化する作業が進行中です。 たとえば、XVA形式は、仮想マシンをエクスポート/インポートするためのプラットフォームに依存しない形式として提案されています。 VHD形式は、同じ拡張子を持つ複数の互換性のない形式ではない場合、ユニバーサルであると主張できます。
ほとんどの仮想化システムは、競合他社の仮想マシンを「変換」する機能を提供します。 (ただし、外出先で異なるシステム間でマシンを移行できるライブマイグレーションの単一システムは表示されず、このトピックに関するスケッチも表示されませんでした)。
経理
ほとんどのハイパーバイザーは、何らかの形式のホスト負荷推定メカニズム(現在の値とこれらの値の履歴を表示)を提供します。 一部は、ティック、iops、メガバイト、ネットワークパケットなどの絶対数の形式で消費されたリソースを正確に説明する機能を提供します。 (私が知る限り、これはXenのみで、文書化されていない機能の形でのみです)。
協会と管理
ほとんどの最新世代のシステムでは、負荷管理用のインフラストラクチャを提供するか、インフラストラクチャ内の各サーバーに既製の負荷管理サービスをすぐに提供することにより、複数の仮想化マシンを単一の構造(クラウド、プールなど)に結合できます。 これは、最初に「次の車をどこから開始するか」を自動的に選択することによって、次にホストを均等にロードするようにゲストを自動的に移行することによって行われます。 同時に、共有ネットワークストレージを使用する場合、最も単純なフォールトトレランス(高可用性)もサポートされます-多数の仮想マシンを持つ1つのホストが停止した場合、仮想マシンはインフラストラクチャの一部である他のホストで実行されます。
いずれかのシステムのいくつかの重要な機能を見逃した場合、たとえば、