【入門編】 Intel EPT(Extended Page Tables)およびAMD NPT(Nested Page Tables) – クラウドインフラと仮想化ネットワーク実践ガイド

皆さん、こんにちは!SRE兼クラウドアーキテクトの〇〇です。

突然ですが、皆さんは「仮想マシン(VM)」って普段から使っていますか?
AWSのEC2インスタンスも、GCPのCompute Engineも、手元のPCで動かすVirtualBoxやVMware Workstationも、すべて仮想マシンですよね。今やクラウドインフラの根幹を支える、なくてはならない技術です。

「仮想マシンって、なんであんなにサクサク動くんだろう?」
「物理的なPCが1台しかないのに、どうして何台ものPCが同時に動いているように見えるんだろう?」

そんな風に疑問に思ったことはありませんか?
まるで魔法みたいに快適に動く仮想化の裏側には、実はCPUが持つすごい技術が隠されているんです。

今回は、その中でも特に重要な「メモリ二重変換」の課題を解決し、仮想マシンのパフォーマンスを劇的に向上させた立役者、IntelのEPT (Extended Page Tables) とAMDのNPT (Nested Page Tables) について、インフラやネットワークの初心者の方にもわかりやすく、とことん噛み砕いて解説していきますね!

小難しい専門用語は最小限に抑えて、身近な例え話を交えながら、一歩ずつ理解を深めていきましょう!

—

仮想化ってどうやって動いているの?メモリの「二重翻訳」問題

まずは、仮想化の基本を簡単におさらいしましょう。

私たちが普段使っているPCは、CPU、メモリ、ストレージといった物理的なハードウェアでできていますよね。
仮想化というのは、この物理ハードウェアの上に、ソフトウェアで「仮想のPC」を作り出す技術のことです。

この仮想のPCを管理するのが「ハイパーバイザー」と呼ばれる特別なソフトウェアです。VMware ESXiやKVM、Hyper-Vなどがこれにあたります。
ハイパーバイザーは、例えるなら「アパートの大家さん」のような存在。物理的なアパート(物理サーバー)の部屋(CPUコア、メモリの一部など)を、仮想の住民(仮想マシン)に割り当てて、それぞれが快適に暮らせるように管理している、というイメージです。

仮想マシンのメモリって、どうなってるの?

さて、仮想マシンもPCですから、当然「メモリ」を持っています。
仮想マシンの中で動いているOS(これを「ゲストOS」と呼びます)は、自分が持っているメモリを「物理メモリ」だと信じて疑いません。そして、そのメモリ空間を「仮想アドレス」という仕組みで管理しています。

ちょっとややこしい話なので、ここで郵便配達の例を登場させましょう!

1. アプリケーションの依頼:

  • 仮想マシンの中で動いているアプリケーションが、「Aさんの家(仮想アドレス)に手紙を届けたい!」とゲストOSに依頼します。

2. ゲストOSの「仮想アドレス → ゲスト物理アドレス」変換:

  • ゲストOSは、Aさんの家が「このアパートの101号室(ゲスト物理アドレス)」だとわかっています。
  • ここで一度、ゲストOSが「仮想アドレス」を「ゲストOSが認識する物理アドレス(ゲスト物理アドレス)」に変換します。

3. ハイパーバイザーの「ゲスト物理アドレス → ホスト物理アドレス」変換:

  • しかし、ゲストOSが「101号室」だと思っているのは、あくまで仮想アパートの中での話。
  • 現実の物理アパート(物理サーバー)では、その「仮想の101号室」は、実は「物理アパートの205号室(ホスト物理アドレス)」に割り当てられているかもしれません。
  • そこで、ハイパーバイザーが「仮想アパートの101号室は、物理アパートの205号室ですよ」という変換を行います。

つまり、データがメモリのどこに置かれているかを特定するのに、

アプリケーションの仮想アドレス → ゲストOSの物理アドレス → ハイパーバイザーが管理する物理アドレス

と、二段階ものアドレス変換が必要だったんです!

この二段階の変換は、ちょうど「英語を日本語に翻訳して、さらに日本語を中国語に翻訳する」という二重通訳のようなものです。手間と時間がかかりますよね?

初期の仮想化技術では、この「メモリ二重変換」が大きなボトルネックとなり、仮想マシンのパフォーマンスを低下させる原因になっていました。仮想マシンが重く感じたり、処理が遅くなったりする原因の一つだったんです。

「もっとサクサク動かせないの!?」

そんな現場の切実な声に応えるべく登場したのが、今回ご紹介するIntel EPTとAMD NPTなんです!

仮想化の救世主!Intel EPTとAMD NPTの登場

この「二重変換問題」を解決するために、CPUメーカーであるIntelとAMDは、それぞれ「Extended Page Tables (EPT)」と「Nested Page Tables (NPT)」という、画期的なハードウェア支援技術を開発しました。
AMDではNPTを「Rapid Virtualization Indexing (RVI)」と呼ぶこともあります。

この技術のすごいところは、これまでソフトウェアであるハイパーバイザーが頑張って行っていた「ゲスト物理アドレス → ホスト物理アドレス」の変換処理を、CPUが直接、ハードウェアレベルで高速に処理してくれるようになった点です!

イメージとしては、先ほどの郵便配達の例で言うと、こうなります。

1. アプリケーションの依頼:

  • 仮想マシンの中で動いているアプリケーションが、「Aさんの家(仮想アドレス)に手紙を届けたい!」とゲストOSに依頼します。

2. ゲストOSの「仮想アドレス → ゲスト物理アドレス」変換:

  • ゲストOSは、Aさんの家が「このアパートの101号室(ゲスト物理アドレス)」だとわかっています。

3. EPT/NPTによる直接変換!:

  • ここで、CPUが「お、ゲストOSが101号室を探しているな」と検知します。
  • CPUは、あらかじめハイパーバイザーが準備しておいた「仮想アパートの101号室は、物理アパートの205号室ですよ」という対応表(EPT/NPT)を、高速なハードウェア回路で直接参照します。
  • そして、瞬時に「物理アパートの205号室」という情報(ホスト物理アドレス)を返してくれるんです!

どうでしょうか?
ゲストOSが「101号室」と指定した瞬間に、ハイパーバイザーが間に入ってソフトウェアで翻訳する手間を省き、CPUが直接「あ、それは物理的に205号室ね!」と教えてくれるようなイメージです。

これで、二段階の翻訳が実質的に一段階で済むようになり、メモリへのアクセス速度が格段に向上しました!
この仕組みは、CPUのメモリ管理ユニット(MMU: Memory Management Unit)という部分に拡張機能として実装されています。

EPT/NPTのすごいメリット

このEPT/NPTのおかげで、仮想化環境は以下のような大きな恩恵を受けました。

  • ⚡ パフォーマンスの劇的向上: メモリ変換のオーバーヘッドが大幅に削減され、仮想マシンが「物理マシンとほぼ変わらない」くらいサクサク動くようになりました。皆さんご存知の快適なクラウド環境は、この技術なしには語れません!
  • 💻 ハイパーバイザーの負荷軽減: ソフトウェアで行っていた処理がハードウェアにオフロードされることで、ハイパーバイザーのCPU使用率が下がり、より多くの仮想マシンを効率的に稼働させられるようになりました。
  • 🔒 セキュリティの向上: メモリ管理がより厳密になり、仮想マシン間のメモリ領域の分離が強化されるため、セキュリティ面でもメリットがあります。

AWSやGCPのようなメガクラウドはもちろん、皆さんのPCで動いているVirtualBoxやVMware Workstationも、対応するCPUであればこのEPT/NPTの恩恵をフルに受けているんですよ。

あなたのPCでEPT/NPTが有効か確認してみよう!

EPTやNPTは、ハイパーバイザーが自動的に利用する機能であり、私たちが直接「オン/オフ」を切り替えるような設定項目ではありません。
しかし、お使いのPCのCPUがこの仮想化支援機能に対応しているか、そしてそれがBIOS/UEFIで有効になっているかを確認することはできます。

ここでは、一般的なLinux環境での確認方法をご紹介しますね。

LinuxでCPUの仮想化支援機能を確認する

Linuxのコマンドラインで、CPUの情報を表示する lscpu コマンドや cat /proc/cpuinfo コマンドを使います。

# lscpu コマンドでCPU情報を確認('Virtualization' の項目を見る)
lscpu | grep -i virtualization

もし、Virtualization: VT-x (Intelの場合) や Virtualization: AMD-V (AMDの場合) のように表示されれば、あなたのCPUは仮想化支援技術に対応しています。

より詳細に、具体的なフラグを確認するには grep を使います。
Intelの仮想化技術は vmx というフラグで、AMDの仮想化技術は svm というフラグで示されます。EPT/NPTもこれらの広範な仮想化支援技術の一部として提供されます。

# CPU情報ファイルから'vmx'(Intel)または'svm'(AMD)のフラグを探す
# vmx: Intel VT-x (仮想化支援技術全般。EPTもこれに含まれます)
# svm: AMD-V (仮想化支援技術全般。NPTもこれに含まれます)
egrep '(vmx|svm)' /proc/cpuinfo

もし何も表示されない場合、お使いのCPUが仮想化支援機能に対応していないか、またはPCのBIOS/UEFI設定で仮想化機能が無効になっている可能性があります。
仮想化機能が有効になっていない場合は、BIOS/UEFI設定画面から「Intel Virtualization Technology」や「AMD-V」といった項目を探して有効にしてみてください。

VMware WorkstationやVirtualBoxでの確認

もし手元のPCでVMware WorkstationやVirtualBoxを使っている場合、仮想マシンの設定画面で「仮想化エンジン」や「CPU」の項目を見ると、この機能が利用可能かどうかが表示されていることがあります。

例えばVMware Workstationの場合、仮想マシンの設定で「プロセッサ」を選択すると、「Intel VT-x/EPTまたはAMD-V/RVIを仮想化」というチェックボックスが表示されていることがあります。これが有効になっていれば、EPT/NPTが利用されている状態です。

まとめ:見えないところで頑張る縁の下の力持ち

今回は、仮想化のパフォーマンスを支える非常に重要な技術、Intel EPTとAMD NPTについて解説しました。
「メモリの二重変換」という課題を、CPUがハードウェアレベルで解決してくれることで、私たちは今、これほどまでに快適に仮想マシンを利用できているんですね。

普段、意識することのない技術かもしれませんが、クラウドインフラの裏側では、このような「縁の下の力持ち」たちが絶えず、私たちの快適なデジタルライフを支えてくれています。

今日の記事が、皆さんの仮想化技術への理解を深める一助となれば嬉しいです。
これからも、難解だと思われがちなクラウドやネットワークの技術を、親しみやすい言葉でどんどん紐解いていきますので、ぜひまた読みに来てくださいね!

それでは、また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました