type
status
date
slug
summary
tags
category
icon
password
KVM虚拟化
内存虚拟化
引入虚拟化后出现的问题:
从物理地址0开始的:物理地址0只有一个,无法同时满足所有客户机从0开始的要求地址连续:虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性
解决以上问题,通过内存地址映射解决
内存地址有以下几个概念:
GVA: Guest Virtual Address:指的是客户机上程序能够使用的地址。(物理内存+虚拟内存)
操作系统中的MMU实现
GPA: Guest Physical Address:指的是客户机以为的物理地址(由hypervisor分配)
内存虚拟化解决此层转换
HVA: Host Virtual Address:指的是程序能够使用的地址。(物理内存+虚拟内存)
操作系统中的MMU实现
HPA: Host Physical Address:指的是真正的物理内存地址
实现方式:
1、直接转换:半虚拟化使用。因为半虚拟化GUEST OS是经过修改,知道自己运行在虚拟化环境中。所以在OS中虚拟化MMU,直接实现HVA->GVA。
优点:性能较好
缺点:兼容性较差
2、影子页表:全虚拟化使用。因为全虚拟化GUEST OS不经过修改,不知道自己在物理服务器、还是VM中,所以在VMM层,实现MMU虚拟化,写成HVA->GPA。
优点:兼容性较好
缺点:性能较差
3、硬件辅助虚拟化
intel:EPT
amd:NPT
直接在CPU硬件上,实现转换。
IO虚拟化
设备发现和配置
BIOS 或 OS扫描发现设备,并分配资源
PCI 配置空间
软件与设备通信
Port IO
MMIO
设备和内存间的数据传输
DMA,内存直接访问,查表不再是CPU,而是专门的DMA控制器实现
设备事件通知
中断:外围设备请求CPU暂时停止其它工作,来处理我的任务。CPU暂时停止其它工作,称之为中断。请求为中断请求。
I/O虚拟化需要解决两个问题
设备发现:
需要控制各虚拟机能够访问的设备
访问截获:
通过I/O端口或者MMIO对设备的访问
设备通过DMA与内存进行数据交换
1、全模拟(全虚拟化)
通过CPU模拟出IO设备。
原理:
VM中的APP发出IO,通过设备驱动发送给模拟出来的IO设备(GUEST)
IO设备接收以后,IO请求会被KVM所拦截(KERNEL)
KVM需要转发给QEMU处理,通过异步方式,发送给IO环,通知QEMU从IO环的队列中取出(USER)
QEMU取出,通过Kernel中的设备驱动发送给真实IO设备处理(KERNEL)
优点:兼容性好,可以模拟出跟系统中的物理设备不一样的虚拟设备
缺点:性能差。1、CPU运行态频繁切换 2、完全CPU模拟,消耗性能
2、virtIO(半虚拟化)
装后系统后,在VM中安装前端驱动,与hypervisor中的后端驱动直接通信
原理:
VM中的APP发出IO,发送给前端驱动(GUEST)
前端驱动需要发送给后端驱动,通过异步方式,发送给IO环,通知后端驱动从IO环的队列中取出(KERNEL)
前端驱动取出,通过kernel中的设备驱动发送给真实IO设备处理(KERNEL)
优点:性能较差
缺点:需要额外安装驱动
3、vhost
从VM来的IO请求会被直接映射成Host上的bio,可以有效减少虚拟机中I/O的执行,性能更好
HW=>Host Kernel
Host Kernel=>Guest
sr-iov
网卡虚拟化技术,把支持此项技术的网卡,虚拟化成一个全局的PF,及若干个VF,VF主要是给VM使用。VM可以直接使用VF,VF再发送给PF,相当VM直接访问网卡。
vhost-user
vhost over sr-iov
SR-IOV与vhost配合,首先将VM的IO映射为主机的IO。主机直接发送VF,VF再发送给PF,相当主机直接访问网卡。
优点:性能极好
缺点:绑定VM。不支持虚拟机迁移、HA等
PCI直通
...
qos依赖于cgroup\name spaces
FusionStorage
架构
管理组件
FSM(FusionStorage Manager):FusionStorage管理模块,提供告警、监控、日志、配置等操作维护功能。一般情况下FSM主备节点部署。
FSA(FusionStorage Agent):代理进程,部署在各节点上,实现各节点与FSM通信。FSA包含MDC、VBS和OSD三种不同的进程。根据系统不同配置要求,分别在不同的节点上启用不同的进程组合来完成特定的功能。
存储组件
MDC(MetaData Controller):
管理节点的MDC。元数据(FS视图)控制,实现对分布式集群的状态控制,以及控制数据分布式规则、数据重建规则等。 MDC默认部署在3个节点的系统盘上,形成MDC集群。元数据存储在ZK盘上。
因为ZK是3、5、7,所以管理节点的MDC也就是3、5、7。
MDC:3-96
存储节点的MDC。管理存储池。
VBS(Virtual Block System):虚拟块存储管理组件,负责卷元数据(传统的元数据,FS的存储池中,会专门创建一个卷存储,对用户不可见)的管理,提供分布式集群接入点服务,使计算资源能够通过VBS访问分布式存储资源。每个节点上默认部署一个VBS进程,形成VBS集群。节点上也可以通过部署多个VBS来提升IO性能。
SCSI\ISCSI
OSD(Object Storage Device):对象存储设备服务,执行具体的I/O操作。在每个服务器上部署多个OSD进程,一块磁盘默认对应部署一个OSD进程。在SSD卡作主存时,为了充分发挥SSD卡的性能,可以在1张SSD卡上部署多个OSD进程进行管理,例如2.4TB的SSD卡可以部署6个OSD进程,每个OSD进程负责管理400GB。
基础概念
DHT:Fusionstorage中的数据路由算法,有时又指一个存储池,叫DHT环
Fusionstorage当中可能会同时存在多个存储池,也就是多个DHT环.
Partition:代表了一块数据分区,DHT环上的固定Hash段代表的数据区
Key-Value:底层磁盘上的数据组织成Key-Value的形式,每个Value代表一个块存储空间,key是数据的键值.这是一种对象存储形式.
Volume:应用卷,代表了应用看到的一个LBA连续编址.与DHT算法无直接关系
数据副本: FusionStorage采用数据多副本备份机制来保证数据的可靠性,即同一份数据可以复制保存为2~3个副本,需要将同一个数据的不同副本存放在不同节点上,对parttion做副本.
视图:MDC的元数据
1.IO VIEW partition主和osd节点的映射关系
2.partition VIEW partition主备对应的osd关系,ioview是partitionview的子集
3.OSD VIEW OSD及其状态
4.VBS VIEW VBS及其状态
VBS内部架构
1.SCSI模块:将kernel中的SCSI流引入VBS模块
2.VBP模块:将SCSI转化为key-value
3.client模块:全称是OSD-Client,面向OSD.功能是:对key值hash;对hash值取mod得到partition值;根据partition值查看view,得到对应的OSD
4.VBM模块:卷和快照的管理
5.heart-beat模块:维护与MDC的心跳
OSD内部架构
1.RSM:IO的复制
2.SMIO:磁盘的管理
3.CACHE:IO的cache
DHT算法
VBS所做的工作:
1.接收来自OS的SCSI\ISCSI
2.将SCSI四元组中的lunid + lbaid转为key,将数据转为value
3.对key值hash,得到2^32的近似随机hash值
4.hash值过大,需要对hash值取mod,3600,得到partition
5.配合io view\parttion view,确定partition最终落在哪个节点的硬盘上
io view:partition->主osd
partition view:partition->主备osd及状态
OSD所做的工作:
1.将硬盘分区,分为元数据区(4M),若个数据区(1M)
2.接收到VBS发送的K-V,查看K,将data写入value中
- Author:always1ov
- URL:https://always1ov.com/article/%EF%BC%88%E6%97%A7%EF%BC%89%E5%8D%8E%E4%B8%BA%E4%BA%91%E8%AE%A1%E7%AE%97%E7%AC%94%E8%AE%B0%EF%BC%88%E5%9B%9B%EF%BC%89
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
