Linux 7.4に向けた開発ツリーに、Intelの機密仮想マシン向け機能「TDX」の管理メモリを節約するDynamic PAMTが取り込まれた。従来はTDXを使うために、物理メモリの約0.4%をページ管理用として先に確保する必要があったが、新方式ではその一部を必要時に確保する。TDXの使用量が少ないホストほど恩恵を受ける仕組みだ。ただし、予約していた領域がすべて不要になるわけではなく、実装をたどると物理アドレスの配置によっても節約量が変わることが分かる。
固定予約から必要時の確保へ
TDX(Intel Trust Domain Extensions)は、仮想マシンのレジスター状態を分離し、ゲストメモリを暗号化して、ホストからのアクセスなどに対して保護する技術である。その保護を支えるTDXモジュールは、物理メモリの各ページについて管理情報を持つ。この情報を格納する領域が、PAMT(Physical Address Metadata Table)だ。
従来のPAMTは、TDXモジュールを初めて読み込む際にカーネル側から供給する。10月19日のLinux 7.4-rc1向けプルリクエストで、IntelのDave Hansen氏は、その負担を物理メモリの約0.4%と説明した。TDXを有効にするなら先に負担する形で、機密仮想マシンが実際にどれだけメモリを使うかに合わせて小さく始める余地は乏しかった。
採用された変更では、4KBページを追跡するPAMTの領域を実行時に確保する。PAMTは1GB、2MB、4KBというページサイズ別の管理情報を持ち、Dynamic PAMTが動的にするのは4KB用の部分に限られる。
| 管理する対象 | 従来のPAMT | Dynamic PAMT |
|---|---|---|
| 1GB・2MBページ用の管理情報 | 初期化時に確保 | 初期化時に確保する部分として残る |
| 4KBページ用の管理情報 | 初期化時に確保 | 必要に応じて実行時に確保 |
| 動的領域の使用を管理する参照カウンター | 今回の動的確保向けには不要 | 別途確保する |
この違いから、Dynamic PAMTを「TDXの管理費用をなくす機能」と捉えるのは正確ではない。最も細かいページ用の領域を先取りしないことで、使用量が少ない段階の負担を減らす変更といえる。
割り当ての単位にも注意したい。参照カウンターを追加したコミットによると、カーネルはPAMT用のページ対をTDXモジュールへ渡し、その対がホストの2MBの物理メモリ範囲を受け持つ。「2MB単位」とは追跡対象の範囲であり、2MB分の管理メモリを毎回確保するという意味ではない。その範囲内のページをTDXで使う前に、対応する管理領域を用意する必要がある。
節約量を左右するのは稼働率だけではない
公式文書は、機密仮想マシンを使っていない間のメモリ消費が減ると説明している。使用量に応じて管理領域を増やせるため、機密仮想マシンがホストのメモリを使い切らない運用で有利になる。一方、使う範囲が広がれば、そのページを管理するPAMTも必要だ。約0.4%という従来の負担率を、そのまま実際の削減率として計上することはできない。
さらに、動的領域には使用状況を数えるための参照カウンターが加わる。カーネルはホストの2MB範囲ごとにカウンターを持ち、領域が必要になったか、解放してよいかを判断する。その割り当ては、TDXで使っているページだけを対象にしているわけではない。
Dynamic PAMTの節約量はTDXの使用量だけでなく、参照カウンターが覆う物理アドレス範囲にも左右される。 これは、2026年9月の実装コミットが示すカウンターの確保方法と、同じ変更系列の公式文書が説明する必要時の割り当てを突き合わせた場合の判断である。
実装者の説明では、参照カウンターは物理アドレスの0からmax_pfnまでを対象にし、そのアドレス範囲1TBにつき2MBを消費する。したがって、搭載RAMが何TBあるかだけでは、この負担を判断しきれない。メモリが物理アドレス空間のどこまで配置されているかも効いてくる。
同コミットは極端な仮定として、52ビットのアドレス空間全体を覆う場合にはカウンターが8GBになると記している。少量のRAMが疎に配置された特殊なプラットフォームでは、Dynamic PAMTによる節約が差し引きでマイナスになる可能性も示した。これは一般的なサーバーで観測した結果ではなく、割り当て方から導いた限界である。メモリをTDXで使える範囲に絞ってカウンターを確保する改善は、今後の作業として残されている。
ホストを評価する際には、機密仮想マシンの台数よりも、それらが使うメモリの範囲と、管理データが覆うアドレス範囲を分けて見る方が実態に近い。メモリ容量が大きく、TDX用には一部しか使わないホストにとって、固定予約を減らせる意味は大きいだろう。
対応モジュールで自動有効、確認すべき条件は残る
最終的な有効化方針は、TDXモジュールが対応を報告すれば自動で使うというものだ。有効化コミットは、メモリ節約の意義を理由に既定で有効にすると説明している。Linuxを更新するだけで、すべてのXeonサーバーがこの機能に対応するわけではない。
開発中の案には、tdx_dpamt=という起動パラメーターを指定し、明示的に有効にする方式も存在した。しかし、9月4日のv11パッチでこのパラメーターは削除され、対応時に自動で有効にする形へ変わっている。古いパッチにある「既定では無効」という説明を、そのまま採用版の設定手順に使わないようにしたい。
有効状態は起動ログでも確認できる。公式文書が示すvirt/tdx: Enable Dynamic PAMTというdmesgの表示は、その手がかりになる。ただし、文書中にあるPAMT確保量のログは一例であり、各ホストの節約量を保証する数値ではない。
既知の例外も残る。有効化コミットは、まれなBIOSのkeyid構成ではTDXモジュールが実際には処理できないのにDynamic PAMT対応を報告する不具合に触れている。開発側は実用上の問題になる可能性は低いと見て、カーネル側の回避策を設けない方針を取った。自動有効化の採用は、このモジュール側の問題が修正済みであることを意味しない。
また、今回確認できるのはLinux 7.4に向けた主線での採用である。運用中のディストリビューションで利用できるかは、そのカーネルに変更が含まれるか、ホストのモジュールが対応するかを合わせて確認する必要がある。
Quoteの可変化は耐量子暗号に向けた別の備え
同じTDX更新には、アテステーションで受け渡す「Quote」のバッファーサイズを柔軟にする変更も含まれる。アテステーションは実行環境を検証するための仕組みで、メモリのページ管理を担うPAMTとは役割が異なる。
Hansen氏のプルリクエストは、従来の固定128kバッファーでは、Quoteが大きくなる耐量子暗号に対して小さすぎると説明した。TDXモジュールが必要なサイズを列挙できるようになったことを受け、カーネル側にもサイズを問い合わせる処理をつなぐ変更だ。これをもってTDX全体の耐量子暗号対応が完了したと見るのは早い。
Dynamic PAMTが変えるのは、TDXを有効にする際のメモリの持ち方である。対応カーネルとモジュールがそろったホストでは、実際のTDX使用量と物理アドレス配置を踏まえて管理領域を評価することで、機密仮想マシンを一部だけ使う運用でも、従来の固定予約に縛られずにメモリを配分しやすくなる。



