4

qemu-kvm が KVM でデバイス エミュレーションを行うことは知っています。qemu-kvm はホストのユーザー空間で実行されていますか? したがって、kick 関数が検出されると、ハイパーバイザーへのハイパーコールを通じて VM を終了し、ハイパーバイザーはホスト ユーザー空間の qemu-kvm に引き渡します。次に、必要なことを行った後、qemu-kvm はハイパーバイザーに移行し、ハイパーバイザーは VM に戻ります。つまり、VM-->Hypervisor と qemu-kvm-->Hypervisor からの 2 つのシステム コールがあるということですか? これらは行われる手順ですか、それとも間違っていますか? この種のものに関するドキュメントがある場合は、リンクを教えてください。どうもありがとうございました...

ありがとう、バラ

4

4 に答える 4

2

私は x86 アーキテクチャで動作する KVM 部分に精通しているので、KVM の x86 実装でこれを説明してみてください。

x86 アーキテクチャでは、KVM は CPU の機能を利用して、ハイパーバイザーとゲスト モードを分離します。Intel 用語では、それぞれ VMX ルート モードと非ルート モードです。

VM エントリ (ハイパーバイザー -> VM) は、VMLAUNCH 命令を使用して KVM によって起動され、ゲストが必要とするすべての情報がカーネル モードの CPU の VMCS に入力されます。qemu-kvm から kvm カーネル モジュールへのシステム コールのみが呼び出されます。

VM の終了は、ゲスト OS が、物理ハードウェアへのアクセスや割り込みの発生など、その特権を超えた何かを処理しているときに発生します。その後、VM エントリが発行され、CPU は再び非ルート モードに変更され、ゲスト コードが実行されます。要約すると、VM の終了 (VM -> ハイパーバイザー) は HW によって自動的に行われ、対応する終了の理由と情報が VMCS に記録されます。次に、KVM は VMCS をチェックして、次のステップを決定します。VM→ハイパーバイザーのシステムコールはありません。

ほとんどのデバイス エミュレーションは、qemu-kvm が既存の qemu のコードを活用できるユーザー空間に基づいています。ただし、Intel VT-d などの一部のデバイス パススルー テクノロジでは、ゲストは IOMMU などを介してハードウェアに直接アクセスできます。これにより、特に高速ネットワーク デバイスでより強力なパフォーマンスを実現できます。

ソースコードを掘り下げたい場合は、最初に にある CPU 仮想化 (Intel VT-x) に注目することをお勧めしますlinux/arch/x86/kvm/vmx.c。Intel ソフトウェア開発者ガイドにも、VT の包括的な紹介があります。

于 2013-09-03T05:26:03.853 に答える
2

kvm は、qumranetというイスラエルの会社によって開始されました。これらの入門論文はそれらの人によって書かれており、読むことをお勧めします:

カーネルベースの仮想マシン技術: http://www.fujitsu.com/downloads/MAG/vol47-3/paper18.pdf KVM: カーネルベースの仮想化ドライバー: http://www.linuxinsight.com/files/kvm_whitepaper. pdf

KVM は、論文で説明されている I/O エミュレーションに QEMU を使用します。ゲスト モードからホスト モードへの切り替えがどのように機能するか、切り替えの背後にある理由、ユーザー空間で qemu によって I/O エミュレーションがどのように行われるか、ゲストに戻る方法を理解するのに役立ちます。これらは優れた簡潔な論文です。

于 2012-06-26T10:50:18.123 に答える
1

これはいいと思いました。せめて基本は。それが役に立てば幸い。

于 2011-11-15T07:02:46.003 に答える
0

qemu-kvm はホストのユーザー空間で実行されていますか? はい、これもパフォーマンスのボトルネックであり、それを回避する方法が開発されています。ネットワーク用の PCI SR-IOV NIC とファイバーチャネル用の NPIV を見てください。これらは両方とも、KVM/qemu が VM をコントローラーのプライベート チャネルに接続できるように、分割された I/O コントローラー用に設計された特別なハードウェアです。

つまり、VM-->Hypervisor と qemu-kvm-->Hypervisor からの 2 つのシステム コールがあるということですか? 確かなことはわかりませんが、システムコールではなく、ユーザーとカーネル空間の境界を越えるデバイス割り込みがあると思います。

おそらく、このドキュメントが少し役立つでしょう:

http://www.linux-kvm.org/wiki/images/4/42/Kvm-device-assignment.pdf

于 2010-10-19T20:40:56.860 に答える