Soumettre la recherche
Mettre en ligne
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
•
Télécharger en tant que PPT, PDF
•
19 j'aime
•
8,995 vues
Naoya Kaneko
Suivre
virtio勉強会 #1でしゃべった内容。 未完成版。pdfで上げたのが見えないので上げ直し。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 38
Télécharger maintenant
Recommandé
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
shimadah
Recommandé
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
shimadah
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
initramfsについて
initramfsについて
Kazuhiro Nishiyama
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
Kuniyasu Suzaki
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
富士通クラウドテクノロジーズ株式会社
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
mao999
Zynq mp勉強会資料
Zynq mp勉強会資料
一路 川染
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Tomoya Hibi
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
智啓 出川
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
Contenu connexe
Tendances
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
initramfsについて
initramfsについて
Kazuhiro Nishiyama
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
Kuniyasu Suzaki
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
富士通クラウドテクノロジーズ株式会社
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
mao999
Zynq mp勉強会資料
Zynq mp勉強会資料
一路 川染
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Tomoya Hibi
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
智啓 出川
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
Tendances
(20)
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
initramfsについて
initramfsについて
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
Rust で RTOS を考える
Rust で RTOS を考える
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
Zynq mp勉強会資料
Zynq mp勉強会資料
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
実践イカパケット解析
実践イカパケット解析
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
ZynqMPのQEMU
ZynqMPのQEMU
En vedette
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
LP49 SystemCall Gateway
LP49 SystemCall Gateway
Naoya Kaneko
続・ららら、(無線的に)素敵なComiket Space
続・ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
Chokaigi 2015: Wi-Fi Survey
Chokaigi 2015: Wi-Fi Survey
Naoya Kaneko
DPDKを拡張してみた話し
DPDKを拡張してみた話し
Lagopus SDN/OpenFlow switch
Dpdk環境の話
Dpdk環境の話
Masaru Oki
En vedette
(7)
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C91 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C90 Wi-Fi: ららら、(無線的に)素敵なComiket Space
LP49 SystemCall Gateway
LP49 SystemCall Gateway
続・ららら、(無線的に)素敵なComiket Space
続・ららら、(無線的に)素敵なComiket Space
Chokaigi 2015: Wi-Fi Survey
Chokaigi 2015: Wi-Fi Survey
DPDKを拡張してみた話し
DPDKを拡張してみた話し
Dpdk環境の話
Dpdk環境の話
Similaire à virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
Takahiro Shinagawa
201711 vxrailチャンピオンクラブ_ワークショップ~入門編~テキスト
201711 vxrailチャンピオンクラブ_ワークショップ~入門編~テキスト
VxRail ChampionClub
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
Akari Asai
64bit化してみた話
64bit化してみた話
Yuichi Yoshida
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
えむ ばーど
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
yaegashi
Reconf 201506
Reconf 201506
Takefumi MIYOSHI
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
Motonori Shindo
Trema day 1
Trema day 1
ykuga
仮想記憶の構築法
仮想記憶の構築法
magoroku Yamamoto
仮想化技術の今後の動向
仮想化技術の今後の動向
VirtualTech Japan Inc.
20180629_VxRailCC_サイジング編_EMC田中様
20180629_VxRailCC_サイジング編_EMC田中様
VxRail ChampionClub
さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみた
SAKURA Internet Inc.
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
hiyohiyo
Open VZ
Open VZ
Kazuaki Fujikura
Reconf 201901
Reconf 201901
Takefumi MIYOSHI
あるブートローダの話
あるブートローダの話
nullnilaki
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
Similaire à virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
(20)
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
201711 vxrailチャンピオンクラブ_ワークショップ~入門編~テキスト
201711 vxrailチャンピオンクラブ_ワークショップ~入門編~テキスト
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
64bit化してみた話
64bit化してみた話
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
Reconf 201506
Reconf 201506
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
Trema day 1
Trema day 1
仮想記憶の構築法
仮想記憶の構築法
仮想化技術の今後の動向
仮想化技術の今後の動向
20180629_VxRailCC_サイジング編_EMC田中様
20180629_VxRailCC_サイジング編_EMC田中様
さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみた
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
Open VZ
Open VZ
Reconf 201901
Reconf 201901
あるブートローダの話
あるブートローダの話
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Plus de Naoya Kaneko
Interop Tokyo 2018 Day1 Wi-Fi
Interop Tokyo 2018 Day1 Wi-Fi
Naoya Kaneko
JANOG41 Day3 Wi-Fi
JANOG41 Day3 Wi-Fi
Naoya Kaneko
モバイルするハニーポット無線LANアクセスポイント
モバイルするハニーポット無線LANアクセスポイント
Naoya Kaneko
C92 Day1 Wi-Fi
C92 Day1 Wi-Fi
Naoya Kaneko
JANOG40 Day2 Wi-Fi
JANOG40 Day2 Wi-Fi
Naoya Kaneko
Interop Tokyo 2017 Wi-Fi
Interop Tokyo 2017 Wi-Fi
Naoya Kaneko
NSDI2016 Reading: Wireless Part 1
NSDI2016 Reading: Wireless Part 1
Naoya Kaneko
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
Reitaisai12 2015 Wi-Fi
Reitaisai12 2015 Wi-Fi
Naoya Kaneko
C87 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C87 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Naoya Kaneko
続々・ららら、(無線的に)素敵なComiket Space C86
続々・ららら、(無線的に)素敵なComiket Space C86
Naoya Kaneko
秋山郷発火村 ネットワーク周りの備忘録・反省
秋山郷発火村 ネットワーク周りの備忘録・反省
Naoya Kaneko
Carmina Burana 全文私訳/注釈(TBD)
Carmina Burana 全文私訳/注釈(TBD)
Naoya Kaneko
Plus de Naoya Kaneko
(13)
Interop Tokyo 2018 Day1 Wi-Fi
Interop Tokyo 2018 Day1 Wi-Fi
JANOG41 Day3 Wi-Fi
JANOG41 Day3 Wi-Fi
モバイルするハニーポット無線LANアクセスポイント
モバイルするハニーポット無線LANアクセスポイント
C92 Day1 Wi-Fi
C92 Day1 Wi-Fi
JANOG40 Day2 Wi-Fi
JANOG40 Day2 Wi-Fi
Interop Tokyo 2017 Wi-Fi
Interop Tokyo 2017 Wi-Fi
NSDI2016 Reading: Wireless Part 1
NSDI2016 Reading: Wireless Part 1
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Reitaisai12 2015 Wi-Fi
Reitaisai12 2015 Wi-Fi
C87 Wi-Fi: ららら、(無線的に)素敵なComiket Space
C87 Wi-Fi: ららら、(無線的に)素敵なComiket Space
続々・ららら、(無線的に)素敵なComiket Space C86
続々・ららら、(無線的に)素敵なComiket Space C86
秋山郷発火村 ネットワーク周りの備忘録・反省
秋山郷発火村 ネットワーク周りの備忘録・反省
Carmina Burana 全文私訳/注釈(TBD)
Carmina Burana 全文私訳/注釈(TBD)
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
1.
1 2013/06/09 virtio の基本的なところ (DRAFT) @n_kane
2.
2 参考資料 ✤ というかこのスライドよりむしろ以下の資料を読みましょう ... ✤
Virtio PCI Card Specification ✤ http://github.com/rustyrussell/virtio-spec ✤ とある virtio ドライバの接続部分〜インタフェース〜 by @hasegaw ✤ http://www.slideshare.net/TakeshiHasegawa1/osc2011- tokyofall-virtio
3.
3 ここでするお話について ✤ virtio の基本的なところのお話 ✤
どううごいているか ✤ どうシステムソフトウェアから使えるか ✤ ( つまり )virtio pci card specification のサブセット的な内容 ✤ 主に plan9 の virtio 実装をメインにお話を進めます
4.
4 ここでしないお話について ✤ 仮想化周りの歴史的背景、実現方法、実装、構造 e.t.c. ✤
virtio での通信が VMM 内でどうハンドリングされているか ✤ indirect モード , MSI-X の活用など
5.
5 お題目 ✤ virtio で何ができるの? ✤
virtio デバイスとその見え方 ✤ virtio を使った通信
6.
6 virtio で何ができるの?
7.
7 virtio でホスト・ゲスト間通信! ✤ 何か不思議な力により ✤
ホスト&ゲスト OS 間で共有できるリングバッファができます ✤ しかもメモリ空間が許すかぎり何本でも ✤ ここに適切に情報を詰めてやることで ✤ ゲストからホストへ、あるいはホストからゲストへデータの転送 ができます
8.
8 データの転送ができるなら .... ✤ 準仮想化ドライバ作るときに使えるよね! ✤
たとえば ✤ コントロール用 , TX 用 , RX 用のリングバッファがあれば ✤ NIC っぽい動作をさせられるのでは! ( ホスト側ががんばれば )
9.
9 “virtio デバイス”というもの
10.
10 virtio device ✤ virtio
デバイス ✤ なんらかのまとまった機能を持った仮想的な対象物 = デバイス ✤ たとえば NIC, ブロックデバイス , ファイルシステム e.t.c ✤ いくつかのリングバッファを用いて操作してやることで一定の役 割を果たしてくれる人のこと
11.
11 virtio device as
a PCI device ✤ virtio デバイスはゲストから、 PCI デバイスとして認識されます ✤ ベンダ ID : 0x1AF4 ✤ プロダクト ID : 0x1000 - 0x1040 ✤ これだとどの virtio デバイスだか区別がつかない .... ✤ Subsystem Device ID でデバイスのタイプを判断
12.
12 http://marsee101.blog19.fc2.com/blog-entry-84.html より拝借 0x1000 〜
0x1040 0x1AF4 IDID TYPETYPE 1 NIC 2 BLOCK 3 CONSOLE 5 MEMORY BALLOON 9 9P Subsytem Device ID の例
13.
13 認識できたら初期化 ... の前に ✤
PCI I/O Space に何が入っているかを抑えておきましょう デバイス ( ホスト ) からゲストに 対して提示される利用可能な機能 (feature) 一覧 ( 各ビット ) ゲストが利用する機能 (feature) を 書き込みデバイス ( ホスト ) に伝え るフィールド Virtio Header
14.
14 認識できたら初期化 ... の前に ✤
PCI I/O Space に何が入っているかを抑えておきましょう Qselect に示される番号のリングバ ッファのアドレス ÷ 4096 (guest physical) 操作中のリングバッファの番号 Qselect に示される番号のリング バッファ長 ( デスクリプタの数 ) Virtio Header
15.
15 認識できたら初期化 ... の前に ✤
PCI I/O Space に何が入っているかを抑えておきましょう デバイスの初期化状態や利用状況 についてゲストが告知するために 利用 割り込み状態の通知 リングバッファを操作した際に ゲストがその番号を書き込む Virtio Header
16.
16 virtio デバイスの初期化 (
共通 ) 1 各 OS ごとの PCI デバイス認識フェー ズ 2 ベースアドレスレジスタから map( 左 の構造がみえるようになる ) 3 Status の ACKNOWLEDGE(0x1) ビッ トを立ててデバイスを発見できたこと 、 virtio デバイスだと分かっているこ とを通知 Virtio Header 16
17.
17 virtio デバイスの初期化 (
共通 ) 4 Status の DRIVER(0x2) ビットを立てて 、ゲストがこのデバイスをサポート == ドライバを実装していることを通知 5 デバイス固有の初期化 6 リングバッファの用意 ( 後述 ) 7 Devfeat の内、利用する物を Drvfeat に 書き込み ( 後述 ) Virtio Header 17
18.
18 virtio デバイスの初期化 (
共通 ) 8 すべて正常に成功したら , Status の DRIVER_OK(0x4) ビットを立てる 8 失敗したら , Status の FAILED(0x80) ビットを立てる 以上で attach の部分は終了! 18
19.
19 リングバッファの構造
20.
20 リングバッファとは ✤ 実態はメモリ上のこんなかんじのデータ
21.
21 リングバッファとは ✤ 実態はメモリ上のこんなかんじのデータ デスクリプタテーブル available リング used
リング
22.
22 デスクリプタ ✤ 一つの転送を扱うエンティティ
23.
23 デスクリプタ ✤ 一つの転送を扱うエンティティ 転送対象のデータのアドレス (guest physical) データ長 このデスクリプタの扱いについての フラグ 後続して転送するデスクリプタの番号
24.
24 デスクリプタ ✤ 一つの転送を扱うエンティティ フラグフラグ ((
値値 )) 意味意味 VRING_DESC_F_NEXT (0x01) next フィールドに示される 後続要素がある ( デスクリプ タチェーンによる転送 ) VRING_DESC_F_WRITE (0x02) このデスクリプタは ( ホスト から見て )Write Only である . ホスト→ゲスト方向の転送 VRING_DESC_F_INDIRECT (0x04) Indirect モードによる転送
25.
25 デスクリプタテーブル ✤ ( そのまま
) デスクリプタの配列 ✤ 長さは Virtio Header の Qsize( 個 ) ✤ 転送の度に動的に alloc するのではなく、このテーブルからフリーな デスクリプタを見つけてきて使うという方式 ✤ 基本的には”インデックス値”でアクセスされる
26.
26 available リング このリング用のフラグ ( 割り込み抑制など※
) デスクリプタテーブル used リング avail リング中の 先頭インデックス値 (availidx) デスクリプタ番号を書き込む リング本体 ここに指定された番号のデスクリ プタが処理されるまでは割り込み 抑制
27.
27 used リング このリング用のフラグ ( 割り込み抑制など※
) デスクリプタテーブル available リング used リング中の 先頭インデックス値 (usedidx) デスクリプタ番号が書き込まれる リング本体 ここに指定された番号のデスクリ プタが処理されるまでは割り込み 抑制
28.
28 available リングと used
リング ✤ 基本的には前述のデスクリプタの番号を入れておく配列 ( 長さ Qsize) ✤ available リング ✤ ゲストがデスクリプタの番号を書き込んでリング上のインデックス値 (availidx) を 進めると、それが ( ホストにより ) 処理される ✤ used リング ✤ ホストにより処理されたデスクリプタの番号が書き込まれ、リング上のインデックス値 (usedidx) が更新される ✤ 正確には”デスクリプタの番号”と”デスクリプタチェーンの長さ”が入る ✤ このオペレーション周りは後述
29.
29 リングバッファの扱い方 - 初期 化
-
30.
30 先ほど飛ばしたお話 ✤ リングバッファを用意するのはゲストの責任。以下の流れで行う。 1 .
触りたいリングの番号 (i) を Qselect にセット 2. Qsize をみる 3. 0 ならこのデバイスで Qselect 番目のリングは使えないので終わり 4. > 0 ならその長さのリングが使える 5. 前述のリングバッファを Qsize を元に作る 6. Qaddr にリングバッファの物理アドレスをセット 7. i++; goto 1; Virtio Header
31.
31 初期化周りの細い話 ✤ virtio の本筋とはあまり関係ないけれど、利便性のために
OS でやっ ていること ✤ デスクリプタテーブルのチェーン化 ( 右図 ) ✤ フリーなデスクリプタ番号の保持 ( 右図の free) ✤ avail リング , used リングの先頭アドレス保持 ✤ 過去の usedidx の保持 (lastused)
32.
32 リングバッファの扱い方 - 転送
-
33.
33 転送の手順 ✤ 箇条書きにすると .... 1
. 転送パスのキューを引っ張ってくる 2. その中でフリーなデスクリプタを探してきて、適切に情報を詰め る 3. avail リングの先頭にその番号を書き込み , availidx を +1 して更新 4. Virtio Header の Qnotify に転送パスのキューの番号を書き込む ✤ この時点でホストに制御が移って処理が行われる
34.
34 分かりづらいので図に ... 初期状態 4 番がフリーなので 情報をつめて
... availidx のところに番号を書 き込む availidx を進めて、変更を加 えたリング番号を Qnotify に 書き込み
35.
35 転送が終わったら .... ✤ 割り込みが入って何かデバイス
( ホスト ) から応答があるはず .... →used リングを見よう 1 . 現在の usedidx と lastused の差から変更があったことを検知 2. lastused == usedidx になるまで used リングのデスクリプタを処理 3. 処理が終わったデスクリプタはデスクリプタテーブルに戻す
36.
36 イメージ図 割り込みが入った時点 usedidx と lastused
の差から 変更を検知 一つ進めて該当するデスクリプ タを処理 終わった物は返す
37.
37 slide is never
done
38.
38 virtio-net の場合の事情 ✤ virtqueue
は3つ : tx/rx/control ✤ Drvfeat
Télécharger maintenant