0.はじめに
仮想化を快適に行うための支援機能と書きましたが、仮想化とは一つの物理マシンで複数のOSを走らせるということです。具体的にはたとえば以下のようなことです。
・WindowsHomeServerのファイルサーバーとlinuxのWebサーバーを一つのマシンで動かす
・Vmwareを使ってWindows7上でWindows8を動かす
仮想化支援技術であるインテル・バーチャライゼーション・テクノロジーの中でも今回レビューするcore i7 3770とIntel Q77チップセットにはVT-x、VT-dの二種類が搭載されています。解答編として、今回それぞれの機能について調べてみました。
1.VT-xとは
大本のインテルの定義を見てみます。
インテル® バーチャライゼーション・テクノロジー (VT-x) は、1 つのハードウェア・プラットフォームが複数の「仮想」プラットフォームとして機能できるようにします。これはコンピューター処理を個別のパーティションに分離することであり、ダウンタイムを最小限に抑えて生産性を維持することによって管理性を向上させます。(インテル ホームぺージより)
詳しいことは完全には理解していませんが、たとえば一つのマシンに複数の仮想マシンが共存している場合、あるOSがCPUやメモリを使っているときに他のOSが普段通りにCPUやメモリにアクセスした場合、うまく管理しないと正常に動作できないでしょう。
そんな時の対処として、旧来の仮想化ではVmwareに代表される仮想マシンモニタ(ハイパーバイザなどとも)と呼ばれるソフトウェアで全部解決していたのですが、その処理でCPUを使うと遅くなるため、VT-xではハードウェア的な処理で手助けすることによりパフォーマンスを向上するということでしょう。仮想化の基礎の部分だと思われます。
マイクロソフトの仮想マシンモニタであるHyper-V、クライアントHyper-Vなどには必須の機能で、最近ではほぼ全部のインテルCPUに搭載されている機能です。
2.VT-dとは
これもインテルの定義を見てみます。
ダイレクト I/O 向けインテル® バーチャライゼーション・テクノロジー (VT-d) は、既存の IA-32 (VT-x) および Itanium® プロセッサー (VT-i) での仮想化サポートに続き、新たに I/O デバイスの仮想化をサポートしています。インテル® VT-d では、エンドユーザーがシステムのセキュリティーや信頼性を強化し、また仮想化環境における I/O デバイスのパフォーマンスを高めることもできます。(インテル ホームページより)
先のVT-xから一歩進んでI/Oデバイスの仮想化をサポートしていると書いてありますが、いまいちよくわかりません。ウィキペディアだとどうでしょう。
ダイレクト I/O 向けインテル VT とは、I/O処理の仮想化を支援する機能。VT-dなどのハードウェア的な仮想化支援が無い場合、仮想マシンモニタは、I/Oデバイスをエミュレートし、DMAのメモリ領域のリマッピングを行う必要がある。VT-dでは、ハードウェア的にDMA転送時のリマッピングを行うようにする。この場合、通常のデバイスドライバを使用することができ、利便性や性能が向上することになる。 (ウィキペディアより)
「DMA転送時のリマッピングをハードウェア的に行う」、これが肝のようです。そもそもDMA転送とは何かというと、以下のとおりです。
DMAは「Direct Memory Access」の略。システムのCPUを介すことなく、デバイスからシステムのメモリー(またはその逆)へのデータ転送を行なう方法。(ASCII.jp デジタル用語辞典より)
つまりCPUでの読み込み、書き込み命令によるデータ転送ではなく、USBメモリなどのデバイスからメモリに直接データ転送するということですね。仮想化時のリマッピングというのは仮想マシンから見えるメモリアドレスと物理メモリアドレスの変換処理ということです。従来は仮想マシンモニタがリマッピングをソフトウェア的に行うためDMAに制限があったところをハードウェア的に行うことで解決するということでしょう。
DMA転送を行う作業にはクリティカルになるみたいですが、検証するにはどんな作業がDMA転送を行うか確認する必要がありそうです。
3.まとめ
・インテル・バーチャライゼーション・テクノロジー は仮想化支援技術である。
・バーチャライゼーションテクノロジーにはVT-x、VT-dが存在する。
・マザーボードの対応が必要なのはこのVT-x、VT-dそれぞれを行う専用チップが必要なため。