最近两会召开,网友们在热追中国高铁十三五规划,尤其是福建到台北的海底高铁更是令人震撼。短短十多年的时间,中国居然成为了世界第一高铁大国,乘坐高铁成为了大家城市间出行的第一选择。那为什么中国这么热衷于建设高铁呢?
人多!就是因为中国人口众多,而且稠密,基本集中在东部地区,比如京沪线,普通铁路的运力根本不够这么多人的需求,飞机也没办法拉完这么多人。高铁速度快,自然单位时间内能运载更多的人,交通效率更高。
在存储领域也是这个道理,全闪存阵列底层采用了闪存,所以速度很快,为了不浪费闪存的速度,上层的通信也需要非常高效。本文揭秘XtremIO全闪存阵列的内部通信。
回顾R,C,D模块
前文介绍了R,C,D三个数据相关的模块。唉,等等,等等,这是什么东东?哈,早就知道你完全不记得了,也知道你懒得去翻历史文章,所以再解释一遍。
-
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。
可以看出,R和上层打交道,C是中间层,D和底层SSD打交道。记住这个就可以了。
物理连接
首先要搞清楚的是,这么模块物理上怎么放在控制服务器里面。前面说过,1个X-Brick的控制服务器有两个CPU,每个CPU运行一个XIOS软件。如下图,R,C模块运行在一个CPU上,D在另一个上。为什么要这么做呢?
因为Intel Sandy Bridge CPU集成了PCIe控制器(估计是说Sandy Bridge企业版CPU集成了PCIe 3.0接口,不需要通过南桥转接)。所以,在多CPU的架构中,让设备直连CPU的PCIe接口性能就会很高,而R,C,D的分布也是按照这个需求来设计的。例如SAS转接卡插到了CPU 2的PCIe插槽上,所以D模块就要运行在CPU 2上,这样性能才能达到最优。从这里,我们有可以看出XtremIO的架构上的优点,就是软件完全可以按照标准化硬件来配置,通过布局达到最优的性能。如果CPU的分布变化了,也会根据新的架构简单调整软件分布来提升性能。
模块间通信:扩展性极佳
我们再来说说正题:模块间怎么通信?其实并不要求模块必须在同一个CPU上,就像上图一样,R和C并不是一定要在一个CPU上才行。所有模块之间的通信通过Inifiniband实现,数据通路使用RDMA,控制通路通过RPC。我们来看看通信的时间成本:XtremIO的IO总共延时是600-700us,其中Infiniband只占了7-16us。Infiniband来互联的优点是什么?其实还是为了扩展性,X-Brick即使增加,延迟也不会增加,因为通信路径没变化:任意两个模块之间还是通过Infiniband通信,如果系统里面有很多R,C,D模块,当一个4K数据块发到一个前端R模块上,它计算Hash值,Hash会随机坐落在任意一个C上,没有谁特殊。这样一切都是线性的,X-Brick的增减,线性的导致性能增减。
引用
http://vjswami.com/2013/11/13/xtremio-hardwaresoftware-overview-architecture-deepdive/