最后更新2021/07/13
虚拟SCSI卡也是由Hypervisor创建出来的虚拟设备,为各个分区提供SCSI设备接口。虚拟SCSI卡有两类,客户端虚拟SCSI卡类似普通的SCSI卡,而在VIO Server上还可以建立另一种服务端的虚拟SCSI卡,它可以作为SCSI Target设备。
SCSI控制卡有两大工作模式,既Initiator和Target,在Initiator模式,SCSI控制卡能发出SCSI命令,并接收结果;而当SCSI控制卡处于target模式,则只能接受命令,送回结果。通常Initiator和Target是相互独立的,就是尽管一块SCSI卡技术上即可以作为Initiator,又可以作为Target,但这两种状态不会同时存在于一块SCSI卡(包括虚拟的SCSI卡)上[ 通过特殊编程,一块SCSI卡可以即是initiator由是target,但需要特别的驱动程序支持,只有某些特殊设备才支持/实现这种配置,通常是一些硬件监控设备或存储设备。]。当设备初始化的时候,如果一块SCSI卡被初始化成Initiator,则它一直作为Initiator工作,反之则一直作为Target工作。通常,所有AIX小型机(包括分区)上的SCSI卡自动会被初始化成Initiator,而VIO Server上的虚拟SCSI卡,只能设置为Target(早期版本的HMC/微码组合支持VIO上设置initator模式的虚拟SCSI卡,目前已经不再支持)。一言概之,Initiator就是服务器端(注意,本书中称为客户端虚拟SCSI卡,因为它总是请求访问),而Target就是存储端(本书中成为服务端虚拟SCSI卡,因为它总是响应访问请求),而无论真正的设备位于存储还是其他的虚拟存储支持设备。
当Hypervisor为分区定义了虚拟SCSI卡之后,还要进行“对接”,就是将一个分区的虚拟SCSI与VIO Server的虚拟SCSI卡一一对应对接到一起。对应关系也可以多对一,但是只限于profile中的定义,不允许同时启动多对一的对应关系,即如果两个分区的VSCSI卡(客户端虚拟SCSI卡的设备名)对应一个VIO的VHOST卡(服务端虚拟SCSI卡的设备名),则只有其中一个分区(先启动的分区)可以正常建立连接,而后启动的分区将提示错误。经过虚拟SCSI卡配对映射后,分区的客户端虚拟SCSI卡发出的访问请求就被发送给VIO Server对应的服务端虚拟SCSI卡,也就是说服务端虚拟SCSI卡成为Target,响应分区的访问请求。如果在VIO Server上将LUN(VIO Server看到的磁盘)或者某个LV(逻辑卷)“分配”(模拟成磁盘)给这个Target虚拟SCSI卡,则分区端的虚拟SCSI卡就可以“看”到这个磁盘。<图 279 虚拟SCSI卡磁盘映射示意图>显示了这种映射的对应关系,图中LPar1的磁盘两个来自物理存储,一个来自VIO小型机的一个逻辑卷;LPar2则两个来自逻辑卷,一个来自物理存储。
虚拟SCSI卡磁盘映射示意图
分区对存储的操作和数据交换需要经由VIO Server转发,但是分区并不能控制物理存储,所有的物理操作都是由VIO Server完成。分区与VIO Server之间数据交换使用小型机创建分区时由Hypervisor保留的内存(这也就是为什么保留内存大小与创建分区数量等因素有关)。分区的IO操作类似DMA,VIO Server本身增加的负载不过是两次内存数据搬迁,与真正I/O时间相比,只有1/100左右,所以使用VIO Server与直接物理连接相比并不会对系统性能造成很大影响。当然,如果VIO Server本身性能严重不足,例如只分配了0.1个CPU,而又为几十个高负载分区服务,或者IO队列设置、分配有问题,造成“同步操作阻塞现相”,则性能衰减还是很大的,因此在进行实际配置之时,要预先对VIO Server的负载进行估算,以便设定比较恰当的资源,既不浪费,亦不缺乏。有关VIO资源规划,请参考<第4章IBM小型机虚拟化规划与设计>的内容。