前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[virt][scsi]SCSI设备虚拟化以及访问方式

[virt][scsi]SCSI设备虚拟化以及访问方式

作者头像
皮振伟
发布2018-04-09 11:19:27
2.4K0
发布2018-04-09 11:19:27
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言: 之前只闻其名,不懂其理。 刚刚看了一些代码,趁热打铁。 分析: 1,architectures

作者绘制了下图,大概体现一下思路,见谅。 Disk接在了SCSI controller下。 Driver在内核态,通过SCSI controller控制Disk。 Disk会被抽象成Block设备。 用户可以通过VFS访问Block设备。 2,Block Device 如果是Disk,那么会被抽象成Block设备(例如/dev/sdx设备);例如执行命令: dd if=/dev/zere of=/dev/sda bs=409600 count=100 当然,如果以这种类型方式访问,就是在访问裸数据,即所谓的raw data。 3,VFS 既然是Block设备,可以使用fdisk命令划分分区,以及mkfs命令制作文件系统,在把它mount到某个目录下,就可以通过VFS访问。例如: mount -t ext4 /dev/sda /mnt dd if=/dev/zere of=/mnt/xx.data bs=409600 count=100 带有文件系统,有文件的各种高级属性,可操作空间很大。 4,SGIO 再或者,使用SG_IO发送SCSI命令给Driver,直接操作Disk。 这种更加“原始”的方式,比如执行inquery查询vendor id等。 5,Guest KVM虚拟化场景下,Guest中不感知虚拟化,看到的就是上图结构(当然,Guest认为的Hardware都是Host虚拟化出来的)。 6,Qemu qemu虚拟化出来SCSI Controller和Disk,用软件来模拟SCSI协议。其中,SCSI controller是接在PCI bus上的一个PCI device。关于Qemu设备的虚拟化,前文PIO和MMIO中已详述。 Qemu得到Guest的SCSI请求,Qemu选择要么使用软件模拟设备,要么透传给Driver(即passthrough)。 7,Passthrough qemu-2.8.0-rc4/hw/scsi/scsi-disk.c中,实现scsi-disk的几种typeinfo。 例如libvirt中使用配置:

则qemu使用:

对应上文中的SGIO模式。 后记: SGIO的部分,其实也有看(看了inquery的逻辑),不过考虑到和协议太相关,也不懂,这里不做分析了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档