茫茫人海,漫漫人生路,有时候尽管我们选择了不同的道路,但最终还是走到了同一个归宿。没想到,整合文件系统和SSD映射表后的复制和有去重功能的全闪存阵列最终达到了一样的效果。
我们曾经畅想过整合了文件系统inode表和SSD映射表之后,复制会很简单,只需要两个逻辑块对应到一个物理块就可以了,并不需要读出来再写下去。要知道自从全闪存阵列有了去重功能之后,也有异曲同工之妙,复制这个基本的文件操作竟然如此简单:没有数据搬移,仅仅是某几个计数登记一下而已。下面我们细细道来。
ESXi和VAAI
首先我们来普及一下ESXi和VAAI两个名词。我也是百度的。
VMware的虚拟化产品,就个人、小企业而言,有Workstation、ESXi(vSphere,免费版)、VMware Server(免费版)可以选择,Workstation和VMware Server需要装在操作系统如Windows或Linux上,ESXi则内嵌操作系统,又免费。所以ESXi可以看成是虚拟机平台,上面运行着很多虚拟机。
VAAI,”vStorage APIs for Array Integration”,虚拟化领域的标准语言之一,其实就是ESXi等发命令的协议了。
复制流程
下图是复制前的数据状态。
- ESXi上的虚拟主机用VAAI语言发了一个虚拟机(VM)复制的命令。
- R模块通过iSCSI或FC收到了命令,并选择一个C模块执行复制。
- C模块解析出命令内容,把原来VM的地址范围0-6,复制到新的地址7-D,把结果发送给D模块。
- D模块查询Hash表,发现数据是重复的,所以没写数据,只把引用数增加1.
- 这样复制完成了,没有真正的SSD读写。
不过有个问题是,这些元数据操作都是在内存中完成的,那万一突然掉电了怎么办?XIO设计了一套非常复杂的日志机制:通过RDMA把元数据的改动发送到远端控制器节点,使用XDP技术把元数据更新写到SSD里面。XIO的元数据管理是非常复杂的,前面讲的流程只是简单介绍而已。
由于使用了A2H,H2P两张表,数据可以写到SSD阵列的任何一个地方,因为只跟数据的HASH有关,跟逻辑地址Address没关系。
引用
http://vjswami.com/2013/11/13/xtremio-hardwaresoftware-overview-architecture-deepdive/