搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
酷酷是懒虫
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
七个备受欢迎的IntelliJ IDEA实用插件_jetbrains
2
插件化基础(一)——加载插件的类
3
Android assets文件夹资源的访问_andriod 配置assets静态资源的访问后缀
4
Hive 2.3.3 是默认支持insert overwrite、insert into的,不需要修改配置文件_insert into overwrite clickhouse
5
gradle项目如何快速下载依赖_gradle下载依赖包
6
如何实现YOLOv8保存目标检测后的视频文件_yolov8保存检测结果
7
【手撕数据结构】把玩顺序表
8
开发工具:Git和SVN有哪些差异,看完你就懂了?_svn和git的区别
9
Spark零基础入门实战(六)使用IntelliJ IDEA创建Scala项目_spark idea 实战
10
Android GlSurfaceView渲染YUV图形
当前位置:
article
> 正文
virtio协议1.0 -- 设备初始和操作_virtio 1.0
作者:酷酷是懒虫 | 2024-07-26 11:39:45
赞
踩
virtio 1.0
设备初始化
驱动初始化步骤
Reset 设备
设置 ACKNOWLEDGE 状态,通知设备:客户机设别了设备
设置 DRIVER 状态,客户机找到了对应的驱动
读取设备的 feature bit 并写会驱动支持的 feature bit 子集到设备,接收feature bit前驱动可能读取 device-specific configuration 进行细粒度校验
设置 FEATURES_OK,此后,驱动不能在接受更多新的 feature bit
读取设备状态,确保FEATURES_OK 写入成功,如果不是 FEATURES_OK,说明特性协商不成功,设备不可用
进行 device-specific 设定,包括配置 virtio configuration space,设定 virtqueue等
设定 DRIVER_OK,表示设备可用,驱动加载完成
如果任何一个步骤有错,驱动设置FAILED状态,放弃设备初始化
在 DRIVER_OK 前,不能下发 KICK
区别
Legacy 设备不支持 FEATURES_OK 状态,没有机会检查兼容性
Legacy 设备没有明确的feature协商状态
步骤5,6没有;
设备操作
两种设备操作:发送(发送给设备,tx)和接收(从设备接收,rx)
发送
驱动发送buffer到设备的一个或多个TX队列
驱动将buffer存到desc表的free desc中,可能desc成链
驱动将desc链的第一个desc的idx写入avail ring的生产位置(avail ring->idx)
重复步骤1,2进行批量操作
加入内存屏障
增加 avail ring->idx,指向下一次驱动会生产填入的位置
KICK没有被抑制,发送KICK
avail ring 的填写不会超过一圈,因为 ring深度和desc 表大小一样,不会填写超过一个ring深度的desc到avail ring
最大queue size是32768
用buffer填写desc表中的desc
0个或多个客户物理地址连续的设备可读buffer
后面是0个或多个客户物理地址连续的设备可写buffer
填充到一个desc链里面
填充buffer b的步骤
从desc表取得下一个空闲的desc(d)
d.addr = b 的客户物理地址
d.len = b 的长度
如果 b 是设备可写, d.flags |= VIRTQ_DESC_F_WRITE;否则 d.flag = 0
如果后面还有下一个buffer
d.next = 下一个空闲desc的idx
d.flags |= VIRTQ_DESC_F_NEXT
注意填充buffer前驱动需要确认有足够多的空闲desc可以使用
更新 avail ring
desc 表头是第一个desc(d)的idx,填入avail ring中
驱动可能一次加入多个desc链
更新 avail ring -> idx
avail ring -> idx 单向自增,直到65535
驱动更新 avail ring -> idx
设备根据 avail ring -> idx 来取desc表和buffer的内存
驱动
驱动在更新 avail ring -> idx 前,必须加入内存屏障,保证设备能读到desc链和buffer
向设备发送KICK
根据不同的总线类型有不同方式的KICK
操作代价很高
设备可能会对KICK进行限流抑制
驱动使用更新后的avail ring -> idx(下一个位置)来对是否抑制进行判断
驱动
驱动在读取flags 或 avail_event之前,必须加入内存屏障
接收
设备使用了desc所指向的内存后(读或写),会发送中断给驱动
驱动可能关闭中断,使能后,驱动需要再次 used ring->idx
配置变更中断
device-specific configuration信息在运行期间可能发生变化,设备需要发送Config chang 中断给设备
设备设置了 DEVICE_NEEDS_RESET 状态,会触发 Config chang 中断
设备清理移除
设置 DRIVER_OK 状态,队列的配置认为了被激活
设备发生重启,队列就是不可用状态
驱动
写入available ring后的desc不能被修改
队列使能后,available idx只能单向增长
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/885050
推荐阅读
article
【无标题】
VirtIO
简介
_
android
virtio
...
virtio
省去了纯模拟模式下的异常捕获环节,客户操作系统可以和QEMU 的I/O 模块直接通信。在
virtio
-bl...
赞
踩
article
第一篇
------
Virtual
I/O
Device
(
VIRTIO
)
Version
1.1
_v...
virtio-v
1.1
-cs01_
virtualio
virtualio
...
赞
踩
article
[
QNX
Hypervisor
2.2
用户手册
]10.18
vdev
virtio
-
entropy
_...
为guset提供一个随机数来源(
entropy
)。_
virtio
-rng
virtio
-rng ...
赞
踩
article
Virtio
I
/O
虚拟化
(
一
):
Split
Virtqueue
...
Virtio
是
一
个半
虚拟化
I
/O 抽象层,通过 host-guest 共享内存的方式实现了高效的数据交换。基于 vi...
赞
踩
article
virtio
-
net
实现
机制
【一】(
图文并茂
)_
virt
net
60
...
①
virtio
表示虚拟化IO,用于
实现
设备半虚拟化,即虚拟机中运行的操作系统需要加载特殊的驱动(e.g.
virtio
...
赞
踩
article
virtio
简介...
什么是
virtio
virtio
是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 ...
赞
踩
article
VIRTIO
PCI
设备...
VIRTIO
PCI
设备_virtio pcivirtio pci Virtio的代码...
赞
踩
article
virtio
-
net
实现
机制【
一
】(
图文并茂
)...
①
virtio
表示虚拟化IO,用于
实现
设备半虚拟化,即虚拟机中运行的操作系统需要加载特殊的驱动(e.g.
virtio
...
赞
踩
article
virtio
iommu...
virtio
iommu_
virtio
iommu
virtio
iommu 1 简介 ...
赞
踩
article
深入解析
Linux
虚拟化
KVM-
Qemu
分析之
virtio
设备
_
qemu
kvm
virtio
...
图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notificati...
赞
踩
article
VIRT
IO
-Virtual
IO
Based On
VPP
/
DPDK
at
front_vpp采用...
VIRT
IO
前端驱动在
VPP
/
DPDK
上的应用及实现_vpp采用
uio
、
dpdk
、
批处理
、
静态n
at
、
rss验算等技术v...
赞
踩
article
第二篇------
Virtual
I/O
Device
(
VIRTIO
)
Version
1.1_v...
virtio-v1.1-cs01_
virtual
io和
virtual
bus
virtual
io和
virtual
bus ...
赞
踩
相关标签
linux
信息与通信
QNX
网络
服务器
操作系统
前端
后端
ViewUI
KVM,虚拟化
运维
内核
virtio设备
云计算