FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

VirtIOのドキュメントを読む (1)

https://blogs.oracle.com/linux/post/introduction-to-virtio

SNS界隈で見つけて、面白そうなので読んでみることにした。

ポイント

  • 仮想マシンとホストデバイスの抽象化を行うレイヤのこと
  • ホストマシンと仮想マシンでのデバイスの取り扱いには、2つの考え方がある?
  • エミュレーション
    • ソフトウェアによりハードウェアの動作を模倣する
    • ハードウェアが存在していなくても動かすことができる
    • パファーマンスに影響が出る。時間がかかる
  • 仮想化
    • ハードウェアを分割して、ゲストVMが使用できるようにする
    • 共有できるようにする、というイメージ
    • ゲストにとっては、任意のデバイスを使えるようにするわけではなく、仮想化デバイスを使えや、というように認識される、というイメージ
    • パフォーマンスに影響が出にくい。高速。
  • VirtIOのドライバはフロントエンドとバックエンドで構成されている
    • フロントエンド:ゲスト側
      • I/O要求の受け入れ、応答
    • バックエンド:ホスト側
      • ハイパーバイザにより動作する、というイメージ
      • フロントエンドからの要求を受け入れる。
      • 物理ハードウェアで動かす。
      • レスポンスをフロントエンドに返す。
  • 図の例だと、VirtQueueVRingsという機能でフロントエンドとバックエンドが接続されている。
    • これはQEMUの例だと思う。Linuxだとvirtqueueと書いてある。
    • VirtQueueはゲストとホストで共有メモリとなっている。こういうデータ構造。
    • VirtQueueはゲストOSに固有の情報が組まれている?
    • VRingsは転送される実際のデータ構造を含んでいるらしい。
      • 少なくともLinuxの持っているVirtQueueと若干機能が異なる。
      • Descriptor Ring (Descriptor Area)
        • ゲスト → ホストの領域?
        • 物理アドレス・データバッファの長さ・フラグ
        • ドライバのみがリングに追加可能
        • バイスはDescriptor Ringに書き込み可能
      • Available Ring (Driver Area)
        • Descriptor Ringの使用可能な領域の循環配列
      • Used Ring (Device Area)
        • すでに使用されたエントリへのポインタ
    • VRingについて
      • 間接Descriptors, Used Buffer Notification Supression, Packed VirtQueueなど
      • どのデータがゲストとホストで交換されたかを示している。