Help us understand the problem. What is going on with this article?

Virtioについてのまとめ

More than 3 years have passed since last update.

Virtio

  • 仮想環境におけるI/Oフレームワーク
  • virtio_netはvirtio上に構築されたネットワーク用の準仮想化デバイスドライバ

スクリーンショット 2016-07-16 16.00.35.png

(図はKVM PV DEVICESより引用)

Virtioのアーキテクチャ

  • 準仮想化デバイスドライバは共通のvirtioと呼ばれる仮想キューのインタフェースを使用して構築される
  • 仮想キューはゲストとホストOS間で共有されるメモリ上に構築されるリングキューとして実装される
  • ハイパーバイザー側にも各フロンエンドデバイスに対応するバックエンドデバイスドライバーが存在

virtio フレームワークのアーキテクチャー概要

(図はvirtio: Linux の I/O 仮想化フレームワークのvirtio フレームワークのアーキテクチャー概要より引用)

Virtioのバックエンド実装

  1. virtual queueへの通知及びデータアクセスをQEMU上で行う
  2. host側のカーネル空間からデータのアクセスを行う
  3. host上のユーザ空間のプロセスが直接ゲストOSとデータの送受信を行う

(virtio guest side implementation: PCI, virtio device, virtio net and virtqueue)

ネットワークの実装で言えば1.がvirtio_net, 2がvhost_netに該当する

パケット処理の流れ(virtio_net)

スクリーンショット 2016-07-17 0.06.44.png

(図はNetwork I/O Virtualization - Advanced Computer Networksより引用)

パケット処理の流れ(vhost_net)

スクリーンショット 2016-07-17 0.09.21.png

(図はNetwork I/O Virtualization - Advanced Computer Networksより引用)

  • パケット送信時はvhostのworker threadがvirtqueueから読み取りtap経由でパケットを送信する
  • パケット受信はvhostのworker threadがtapをpollingし、tapからデータを読み取りvirtqueueへデータをキューイングする
  • QEMUのユーザ空間を介さずにguest osとhostのカーネル空間でパケットの送受信が可能なため、パケット送受信時に余計なコンテキストスイッチが走らない

(QEMU Internals: vhost architecture)

Multi-queue virtio-net

  • パケットの送受信処理をゲストOSのvcpuの数にスケールさせるための技術
  • ハードウェアに依存しない仕組み

仮想環境においてパケットの送受信の仕組み

(図はMultiqueue virtio-netより引用)

参考資料

virtio: Linux の I/O 仮想化フレームワーク

  • virtioの概要を把握するのに丁度いいドキュメント

ハイパーバイザの作り方

  • FreeBSDのハイパーバイザを題材にハイパーバイザーの実装方法を説明している

virtio introduction

  • virtioを使ったfrontendとbackendの通信に関しての資料

qemu virtio backend

  • virtio-netのソース

qemu virtio source code

  • virtioのソース

極める! KVM

  • 仮想環境のパケットの送受信(vhostについても)に発生する処理が図で分かりやすく記載されている

Hardware Accelerated VirtIO Networking for NFV

  • vhostのパケット送受信の流れが関数レベルで詳細に書かれている

Kernel-based Virtual Machine Technology

  • qemuとkvmがどう連携しているか簡潔に書かれている
nyamage
Docker, Ruby, Swiftは趣味で触ってるだけです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした