SAS(Serial Attached SCSI)即串行SCSI技术,正逐步走入我们的视线。按照行业预期,SAS磁盘很快将取代目前的SCSI磁盘甚至FC磁盘而成为主流磁盘类型。可惜现在对SAS技术的讨论大多集中在应用层面,很少有具体的技术介绍。有鉴于此,笔者搜集整理了一些资料,权做抛砖引玉吧。
什么是SAS?简单的说,SAS是一种磁盘连接技术。它综合了现有并行SCSI和串行连接技术(光纤通道、SSA、IEEE1394及InfiniBand等)的优势,以串行通讯为协议基础架构,采用SCSI-3扩展指令集并兼容SATA设备,是多层次的存储设备连接协议栈。
为了更好的了解SAS技术,我们先回顾一下几个相关技术的发展过程。为了简明,这里只以表格形式体现。
首先是并行SCSI的发展过程。
正是SCSI-3指令集的出现,使得SCSI通讯出现了分层结构,并使SCSI指令通过其他物理媒介传输成为可能。事实上,SCSI-3指令自诞生之日就被一批新技术相中,此后出现的光纤通道技术、SSA技术、IEEE1394火线技术等,均受益于这一进步。
这些串行技术虽然从名字上看与SCSI毫不相干,但其实它们都支持SCSI-3作为应用层逻辑指令。下面是这些串行技术的简要回顾。
除了并行SCSI和几种应用SCSI-3指令集的串行技术,我们再简单回顾一下ATA技术的历史。
之所以罗列出以上三个表格,是因为SAS技术正是以串行机制为基础,同时支持SCSI和SATA的协议栈。了解以上三个方面的历史,有助于更方便的理解SAS技术的特点。为了增强感性熟悉,我们先从外观入手,慢慢走进SAS技术内部。
上面这张照片就是SAS外部接口的样子。使用过InfiniBand交换设备的朋友一定觉得眼熟,没错,SAS外部接口和线缆就是借用了InfiniBand线缆的设计。不要小看这个只有并行SCSI一半大的接口。这种端口名叫"四路宽端口",以目前3Gb的SAS标准,它可以达到12Gb的带宽,也就是4 x 3Gb SAS通道。SAS技术与光纤通道一样,都采用8位到10位的编码机制,12Gb的物理层带宽换算到应用层就是1.2GB/s,这一根线就比目前主流的64位133MHz PCI-X总线还要快。
SAS磁盘上的端口也与并行SCSI有很大区别,倒是跟SATA磁盘的端口外观非常像。接脚最多的一组是电源接口,接脚较少的一组是SAS磁盘主端口,位置都与SATA磁盘电源和通讯端口完全一致。SAS磁盘与SATA磁盘接口的唯一区别是SAS磁盘还有第二个冗余端口,而SATA磁盘则只有一个端口。
说到这里,细心的读者会发现一个问题。既然SAS磁盘与SATA磁盘的端口数量都不一致,SAS背板又如何完整的兼容SATA磁盘呢?
不错,假如将SATA磁盘直接插入SAS背板,那么背板上的冗余端口将会悬空,也就是说SATA磁盘只连接在一个控制器上。这样虽然阵列控制器或主机可以使用这些SATA磁盘,但从结构上将无法实现冗余。
为此,一些提供SAS磁盘阵列的厂商,在兼容SATA磁盘时都在SATA磁盘托架上附加一个小小的电路板,我们姑且称之为"端口选择器"。其作用就是将SATA磁盘上的单端口与两路SAS同时连接,从而保证前端控制器或主机故障切换时,SATA磁盘仍然能保持连接。
当然物理连接的一致,只是SAS兼容SATA的必要条件。实际上,在整个SAS协议栈中从物理层到应用层,都贯穿着一套用来兼容SATA的协议。这套协议被称为STP(Serial ATA Tunneling PRotocol)即"SATA隧道协议"。从这个命名就可以看出,SAS兼容SATA的方式其实就是在从磁盘端到主机端整条链路上,为SATA磁盘特地开辟出一条隧道。
除了端口设计,SAS和SATA磁盘的供电接口也可能是读者的疑问。假如SAS和SATA接口中已经包含有供电接脚,传统的四针式电源是否还有用呢?
对磁盘阵列来说,答案显然是没有。外置磁盘阵列早在SCSI和IDE年代,就已经不使用四针式电源接口了。但是服务器内部的非热插拔磁盘一般都采用这种接口,而且目前市面上一些SATA磁盘也带有这种电源接口。这是因为SATA 1.0标准刚刚颁布的时候,还没有完全取代四针电源。无法摆脱四针式电源,就无法直接支持热插拔,因此SATA 1.0在当时被定义为仅主机内部连接的协议,不支持外部连接。不过这些都已经是历史,现在的SAS和SATA II版本中,四针电源完全没有存在的必要。
看过SAS设备外观,我们再看看SAS内部的一些工作原理。首先,让我们先搞清楚三个名词--"设备"(Device)、"端口"(Port)和"phy"。
"设备"就是指SAS连接末端的物理设备,可以是磁盘,也可以是主机里的SAS适配器,但不是EXPander设备。暂时不晓得Expander为何物的读者不要着急,后面会介绍到。
"端口"是半物理半逻辑的概念。一方面,每个端口都对应一条实实在在的物理连接线;另一方面,每个SAS端口都有一个唯一的64位地址。这个地址的格式跟光纤通道里的WWN(严格的说,应该是WWPN,WWNN对应的更像SAS"设备"名)格式完全相同,由24位公司标志和40位厂商自定义字段构成。
"phy"虽然是个逻辑概念,但功能上很像光纤通道中的SFP。它对应的是一组SAS协议收发单元,由一个发送器和一个接收器组成。每个phy与远端的另外一个phy连接,构成一发一收两条链路。SAS支持全双工,就是说每个phy在以3Gbps发送的同时,还可以接收3Gbps的流量。
前面只是简单的罗列出设备、端口和phy各自的大致含义,很多问题还需要进一步说明一下。
前面我们已经提到,每颗SAS磁盘可以提供两个SAS连接。那么这两路SAS连接是同一个端口的两个phy,还是两个独立的窄端口呢?答案是后者。每颗SAS磁盘上有两个phy,这两个phy相互独立,被两个不同的端口使用。再明确点说,每颗SAS磁盘有两个地址,而不是一个。记住!每个地址,就对应一个端口。
地址和端口的对应关系,还能帮我们辨清SAS有效连接。Phy之间连通,并不等于端口之间能够正常通讯。只有当一个端口中所有phy都与对方端口中的phy连通后,两个宽端口的通讯才能正常进行。目前宽端口中最常见的,就是前面提到过的四路宽端口,不过一些SAS适配器厂商正在设计八路宽端口,未来可能会出现单根线缆2.4GBps甚至4.8GBps的SAS连接。
说到SAS适配器,还有个有趣的问题。目前主流SAS适配器一般支持8个phy,那么大家猜猜一般适配器支持多少端口地址呢?答案是可以动态设定。当适配器用来连接外部SAS设备时,需要用外部宽端口,这时适配器将8个phy划分成两个宽端口,支持两个端口地址。而当适配器连接内部SAS磁盘时,每个phy各自属于自己的端口,适配器将支持8个端口地址。
至此,我们虽然明确了一些关于SAS的技术概念,但是还不能说对SAS技术有所了解。SAS技术的重点部分--Expander及其工作原理,才是熟悉SAS技术的要害。
SAS的连接模式与光纤通道的Fabric交换在很多方面十分相似。每一个SAS Expander就像一台光纤通道交换机,整个交换结构被称为"域"(Domain),其意义跟光纤通道技术中的"域"几乎完全一样。在光纤通道Fabric交换结构中,每个域有一个主成员,负责维护整个域的路由信息。在SAS域中,起中心交换作用的Expander叫做"扇出Expander"(Fanout Expander)。SAS域中的"扇出Expander"既可以直接连接终端设备,也能连接其它"边缘Expander"(Edge Expander)。唯一与光纤通道Fabric不同的是,SAS域中可以没有"扇出Expander",而光纤通道Fabric域则不能没有主成员。没有"扇出Expander"的SAS域,最多只可以有两个"边缘Expander"。
理论上,每个"边缘Expander"可以支持128个端口,每个SAS域可以有128个"边缘Expander",这样每个SAS域中最多可以有128 x 128 = 16384个端口。当然,这并不是说每个SAS域可以连接16384个磁盘和SAS适配器,因为"扇出Expander"与"边缘Expander"相连接时,会占用一部分端口。假如128个"边缘Expander"全部连接到"扇出Expander",内部互联至少要占用256个端口。也就是说,一个SAS域理论上可以连接16384 - 256 = 16128个终端SAS设备。对比光纤环路126个设备的上限,16128这个数字仍然是非常可观。
一些接触过SAS存储产品的读者,可能此时会心存迷惑。为什么SAS单域就可以支持如此众多设备,但实际应用中却经常看到多域模式的产品呢?这其实跟目前SAS芯片的制造工艺有关。假如想制造出一个"扇出Expander"来支持128个"边缘Expander"的连接,那这款"扇出Expander"至少要支持128个phy(每端口至少一个phy)。而Expander之间的互联一般应采用至少四路宽端口,那就需要中心的"扇出Expander"支持4 x 128 = 512个phy(每端口四个phy)。而现在的实际情况是LSI公司的首款SAS芯片只能支持12个phy,刚刚好是个零头。虽然SAS技术支持多个Expander芯片组成一个"Expander组"(Expander Set)来模拟一个Expander,但过多的芯片无疑会在制造工艺和成本方面带来麻烦。正是基于目前SAS芯片工艺水平,一些磁盘阵列厂商在设计阵列扩展时,大多采用多域结构。虽然在软件设计上费力多些,但却可以避开单芯片phy数量有限的问题。
所谓多域模式,在大多数情况下,其实也只不过是两个域而已,即每个阵列控制器各自属于自己的SAS域。因为目前的SAS交换技术还不支持域之间的路由,所以要想保证每个阵列控制器都能访问到所有磁盘,最多只能引入两个SAS域。
SAS技术借鉴了很多光纤通道技术的工作原理,对比光纤通道技术可以帮助我们更好的了解SAS技术优势。
前面已经提到,SAS端口地址与光纤通道中的WWN格式几乎完全一样,但其使用方式还是略有区别。SAS域中,端口地址直接作为交换路由表的内容,没有任何转换过程,而光纤通道的Fabric交换中并不直接采用WWN地址,而是要经过一个转换过程,由名字服务器对每个设备二次分发路由地址。光纤通道之所以这样设计原因很明显,因为在Fabric交换中要支持环路设备,所以不得不兼顾各种编址。实际上在光纤通道交换域中,每个设备要经过三层登陆(FLOGI、PLOGI/LOGO、PRLI/PRLO)才能接入域中。这颇像一个臃肿的官僚机构,虽然体系庞大,却效率低下。而SAS技术舍弃了光纤通道中的仲裁环机制,从而大大简化了交换与地址的关系。在SAS域中,再也不需要关心那些恼人的繁文缛节了。
由于交换模式的简化,SAS设备与Expander之间不需要通过复杂的磋商,简单的握手之后就开始正常工作了,这就需要双方事前就很多方面必须达成一致共识。"服务级别"就是共识之一。我们知道光纤通道可以支持五种不同级别的交换服务,分别是Class 1、2、3、4和6。这其中最常用到的是Class 3,即无确认的帧交换。这种模式好比不负责任的邮递员,反正有收信人和发信人互相确认,他自己根本不操心包裹是否完好。由于光纤通道技术中没有phy这个层次的设计,Class 3是效率最高的工作模式。而SAS则不然,借由phy的底层独占式互联机制,SAS中的服务级别更像Class 1模式,即虚拟电路全带宽连接。这种模式最能够充分保证每一组SAS设备之间的通讯带宽,同时数据的误传输概率也降到最低。
由于光纤通道技术中层次臃肿的通讯机制,主机端光纤适配器很难直接察觉到磁盘端设备状态的变化。就好比一个高高在上的官僚,很难知道底层普通市民的住址变迁。为此,光纤通道交换设计了"注册状态变更通知"(RSCN,Registered State Change Notification)机制。就是让每个普通市民在搬家之后,都要主动向政府汇报新地址,政府再将地址簿汇总更新,送交各位领导案头,而官僚们就依据案头的记录信息定位每个市民。遗憾的是,这个RSCN会打断领导们正在进行的沟通,迫使领导们的工作重新开始,因此严重影响整个政府的办公效率。而在SAS域中,由于没有了复杂的沟通层次,每位领导都可以直接把握市民的住址信息,办公效率自然就提高许多。
SAS与光纤通道相比,最明显的技术优势在于连接带宽。简单从数字上看,3Gb的SAS似乎不及4Gb的光纤通道,但光纤通道技术中端口已经是最基本的逻辑单元,也就是说,两个物理端口间的连接就只可能是4Gb带宽。而SAS则巧妙的在端口中引入phy这个新的逻辑单元,两个phy之间的互联带宽为3Gb,每端口可以包含4个或8个phy之多,这样两个SAS端口之间的连接很轻易达到12Gb甚至24Gb超高带宽。
总之,SAS在借鉴光纤通道技术特点的同时,一方面大刀阔斧简化交换机制,从而提升了交换效率和可靠性,另一方面增加了phy虚拟电路单元,大大增加了性能扩展空间。