|
转自http://mp.weixin.qq.com/s?__biz= ... NTYzMw==&scene=6#rd
6大模块
XIO软件分为六个模块,来实现复杂的功能。包括三个数据模块R,C,D,三个控制模块P,M,L。
- P:Platform,平台模块。
- M:Management,管理模块。
- 实现各种系统配置。通过和XMS管理服务器通信,执行任务,比如创建卷,LUN的掩码,等从命令行或图形界面发过来的指令。有一个节点运行M模块,其他节点运行另一个备用M模块。
- L:Cluster,集群模块。
- R:Routing,路由模块。
- 其实就是把发过来的SCSI命令翻译成XIO内部的命令。
- 负责来自两个FC和两个iSCSI接口的命令,是每个节点的出入口看门大爷。
- 把所有读写数据拆成4K大小。
- 计算每个4K数据的HASH值,用的是SHA-1算法。
- 每个节点运行一个R模块。
- C:Control,控制模块。
- 包含了一个映射表:A2H(数据块逻辑地址——Hash值)。
- 镜像,去重,自动扩容等高级数据服务。
- D:Data,数据模块。
- 包含了另一个映射表:H2P(Hash值——SSD物理存放地址)。可见,数据的存放地址跟逻辑地址无关,只跟数据有关,因为Hash值通过数据算出来。
- 负责对SSD的读写。
- 负责RAID数据保护技术:XDP,XtremIO Data Protection。
读流程
- Host把读命令通过FC或iSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。
- R模块把命令拆成4KB大小的数据块,转发给C模块。
- C 模块查A2H表,得到数据块的Hash值,转发给D模块。
- D模块查H2B表,得到数据块在SSD中的物理地址,读出来。
不重复的写流程
1. Host把写命令通过FC或iSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。
2. R模块把命令拆成4KB大小的数据块,计算出Hash值,转发给C模块。
3. C 模块发现Hash值没有重复,所以插入到自己的表里面,转发给D模块。
4. D模块给数据块分配SSD中的物理地址,写下去。
可去重的写流程
1. Host把读命令通过FC或iSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。
2. R模块把命令拆成4KB大小的数据块,计算出Hash值,转发给C模块。
3. C 模块查A2H表(估计还有个H2A表,或者是个树,Hash数组之类),发现有重复,转发给D模块。
4. D模块 知道数据块有重复,就不写了,只是把数据块的引用数加个1。
可以看出,自动扩容和去重都是自然而然在后台完成的,不会影响正常读写性能。
|
|