虚拟化顶级技术会议KVM Forum演讲分享 | 移动云KVM共享云盘技术实践

2020年度的KVM Forum会议将于北京时间10月28日20:00-31日00:30在线上举行。作为虚拟化领域最具影响力的国际会议,KVM Forum为开发人员和用户提供了一个讨论Linux虚拟化技术的发展趋势及未来发展挑战的高端技术会议平台,是虚拟化领域最为重要和权威的大会。本次会议汇聚了Google、Amazon、Red Hat、Intel、Alibaba、ByteDance等众多国内外顶级云服务厂商,中国移动云能力中心的高级软件开发工程师白耀伟受邀参加会议,并将于北京时间10月31日00:00-00:30做《Bring SCSI support into QEMU block layer》的主题演讲。

目录

01.背景介绍

02.优化方案

03.目前状态

04.推荐阅读


 

01.背景介绍


集群文件系统(Clustered File System)比如Oracle的OCFS、VMware 的VMFS、Windows的MSCS等需要在多个节点挂载同一个块设备来支持多节点访问。集群文件系统通常要求块设备支持并发访问控制机制,为多个访问节点提供一致的文件视图,从而避免在同一时间多个节点同时访问数据造成的数据损坏和丢失。常见的块设备层并发访问控制机制有借助SCSI协议中的COMPARE AND WRITE、PERSISTENT RESERVATION等命令实现的锁机制。

Ceph作为云计算时代应用最广泛的分布式存储系统,凭借其高可靠、高可扩展等特性,已成为了云数据中心存储系统的首选,越来越多的数据中心使用Ceph分布式存储提供的逻辑卷作为块设备的后端存储。

为支持上述方案,自2016年开始,Ceph社区实现了COMPARE AND WRITE等SCSI协议命令的原生支持,但由于QEMU block层本身缺乏SCSI命令支持,所以QEMU无法直接使用Ceph提供的SCSI命令接口,需要借助iSCSI协议来实现SCSI命令的处理。这样虚机里的集群文件系统若要访问Ceph后端,整个IO路径涉及虚机、ISCSI initiator、ISCSI target、librbd等多个组件,从而导致IO路径过长,同时在实际使用中也存在组件过多不方便问题定位和排查等问题。

 

02.优化方案


为解决上述痛点问题,中国移动云能力中心存储团队对该架构进行了优化,即实现QEMU本身的block层支持SCSI命令,允许QEMU直接调用Ceph支持的相关SCSI命令处理接口,达到简化逻辑架构的目的。

为实现上述架构,QEMU需要在接收到来自虚机中的SCSI请求后,调用相应的librbd接口来进行请求处理,但是目前QEMU中的block层还不支持SCSI命令的传送和处理,我们需要实现该功能。

QEMU的block层增加SCSI命令的支持,涉及到4个层次上的代码改动:


  • SCSI设备模拟层:在这层需要增加对COMPARE AND WRITE、PERSISTENT RESERVATION等命令的支持,即模拟的SCSI设备在接收到相应请求后,调用下一层的接口处理;
  • block层对外的API接口层:在这层需要增加相关支持,对于COMPARE AND WRITE命令,我们复用了blk_aio_pwritev接口并增加了一个新的BDRV_REQ_COMPARE_AND_WRITE标志,对于PERSISTENT RESERVATION命令,增加三个新的blk_persistent_reserve_{in,out,check}接口;
  • block IO层:这层的改动类似上一层,对于COMPARE AND WRITE命令,复用了bdrv_driver_pwritev接口,对于PERSISTENT RESERVATION命令,增加三个新的bdrv_persistent_reserve_{in,out,check}接口;
  • block driver层:这一层直接调用librbd接口,实现了四个新的接口:bdrv_aio_compare_and_write、bdrv_co_persistent_reserve_{in,out,check}。

经过优化后的架构涉及到的组件减少、逻辑更加简化,同时QEMU对Ceph的支持也已经很成熟,运维、部署方面也带来了极大的便利。

 

03.目前状态


目前经过实际验证部署,共享云盘可支持微软的MSCS等分布式集群文件系统,该产品即将在移动云上线投产,部分相关实现代码也已经提交QEMU社区,将来会有更多的代码推向社区。

 

04.推荐阅读


ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

用QEMU构建嵌入式LINUX系统

Linux虚拟化KVM-Qemu分析(一)

Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化

Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)

Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)

在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt

ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

OpenVZ,Xen,KVM等:虚拟化解决方案

KVM Virtio: An I/O virtualization framework for Linux(Linux虚拟IO框架)

提升KVM异构虚拟机启动效率:透传(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、异步DMA映射、预处理

2020全球开源基础设施技术峰会分享 | 自研软硬一体化加速方案