SAS串行连接接口
2015-06-08 10:44:26 阿炯

SAS(Serial Attached SCSI),串行连接SCSI接口,串行连接小型计算机系统接口。

什么是SAS
SAS是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性,提供与串行ATA (Serial ATA,缩写为SATA)硬盘的兼容性。

SAS是点对点(point-to-point)连接,并允许多个端口集中于单个控制器上,其可以内置于主板(mother board)当中,也可另外添加,该技术创建在强大的并行SCSI通信技术基础上。SAS是采用SATA兼容的电缆线采取点对点连接方式,从而在计算机系统中不需要创建雏菊链结(daisy-chaining)方式便可简单地实现线缆安装。

第一代SAS为数组中的每个驱动器提供 3.0 Gbps(3000 MBps)的传输速率,第二代SAS为数组中的每个驱动器提供 6.0 Gbps(6000 MBps)的传输速率。

SAS的接口不仅看起来和SATA类似,而且可以向下兼容SATA标准。即SAS系统的背板(Backpanel)既可以连接具有双端口、高性能的SAS驱动器,也可以连接高容量、低成本的SATA驱动器。由此SAS驱动器和SATA驱动器可以同时存在于一个存储系统之中。但需要注意的是,SATA系统并不兼容SAS,所以SAS驱动器不能连接到SATA背板上。由于SAS系统的兼容性,可以用不同接口的硬盘来满足各类应用在容量上或效能上的需求,因此在扩充存储系统时拥有更多的弹性。

SAS技术还有简化内部连接设计的优势,存储设备厂商目前投入相当多的成本以支持包括光纤通道阵列、SATA阵列等不同的存储设备,而SAS连接技术将可以通过共用组件降低设计成本。

SAS的特点
串行SCSI是点到点的结构,可以建立磁盘到控制器的直接连接。具有以下特点:
1、更好的性能:
点到点的技术减少了地址冲突以及菊花链连结的减速;
为每个设备提供了专用的信号通路来保证最大的带宽;
全双工方式下的数据操作保证最有效的数据吞吐量;

2、简便的线缆连结:
更细的电缆搭配更小的连接器;

3、更好的扩展性:
可以同时连结更多的磁盘设备。

由于串行SCSI(SAS)是点到点的结构,因此除了提高性能之外,每个设备连接到指定的数据通路上提高了带宽。SAS的电缆结构节省了空间,从而提高了使用SAS硬盘服务器的散热、通风能力。一般情况下,较大的并行电缆会带来电子干扰,SAS的电缆结构可以解决这个问题。此外SAS结构有非常好的扩展能力,最多可以连接16384个磁盘设备。

串行SCSI(SAS)硬盘使用与SATA相同的接口,但是使用较多的信号,因此SAS硬盘不能与SATA硬盘控制器连结。SAS是通用接口,支持SAS和SATA,SAS控制器可以支持SAS和SATA磁盘。SATA使用SAS控制器的信号子集,因此SAS控制器支持SATA硬盘。

初期的SAS硬盘使用2.5英寸封装,这样可以使机架服务器支持更多的硬盘,现在已经有厂商推出标准3.5英寸的SAS硬盘;初期产品的转速是10000RPM,而现在大多为15000RPM的产品。SAS硬盘与相同转速的SCSI硬盘相比有相同或者更好的性能,串行接口减少了线缆的尺寸,允许更快的传输速度,SAS硬盘传输数据可以达到3.0Gbit/sec或6Gps。

SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。

序列SCSI协议 (SSP) — 用于和SCSI设备沟通。

序列ATA通道协议 (STP) — 用于和SATA设备沟通。

SCSI管理协议 (SMP) — 用于对SAS设备的维护和管理。

每个SAS电缆有4根电缆,2根输入2根输出。SAS可以同时进行数据的读写,全双工的数据操作提高数据的吞吐效率。

SAS的不足
1)控制芯片种类少:只有希捷、迈拓以及富士通等为数不多的硬盘厂商推出了SAS接口硬盘,品种太少,其他厂商的SAS硬盘多数处在产品内部测试阶段。此外周边的SAS控制器芯片或者一些SAS转接卡的种类更是不多,多数集中在LSI以及Adaptec公司手中。

2)价格太贵:比起同容量的Ultra 320 SCSI硬盘,SAS硬盘要贵了一倍还多。一直居高不下的价格直接影响了用户的采购数量和渠道的消化数量,而无法形成大批量生产的SAS 硬盘,其成本的压力又会反过来促使价格无法下降。如果用户想要做个简单的RAID级别,那么不仅需要购买多块SAS硬盘,还要购买昂贵的RAID卡,价格基本上和硬盘相当。

3)实际传输速度变化不大:SAS硬盘的接口速度并不代表数据传输速度,受到硬盘机械结构限制,现在SAS硬盘的机械结构和SCSI硬盘几乎一样。目前数据传输的瓶颈集中在由硬盘内部机械机构和硬盘存储技术、磁盘转速所决定的硬盘内部数据传输速度,也就是80MBsec左右,SAS硬盘的性能提升不明显。

4)用户追求成熟、稳定的产品:从现在已经推出的产品来看,SAS硬盘更多的被应用在高端服务器上,以上服务器用户并非一味追求高速度的硬盘接口技术,最吸引他们的应该是成熟、稳定的硬件产品,虽然SAS接口服务器和SCSI接口产品在速度、稳定性上差不多,但目前的技术和产品都还不够成熟。

SAS硬盘和SATA硬盘的区别
首要想到的是接口方面的差异,SAS的接口速度比SATA高许多,所以以为SAS盘要比SATA盘快,功能多。其实接口方面的差异并不是首要的,仅仅很小的一方面。那么SAS盘和SATA最大的差异到底在什么地方呢?


这是磁盘内部的分析图,关于一块磁盘而言,最重要的是驱动电机(Actuator)、磁头(read/write heads)以及磁盘面(Discs)。SAS盘是企业级使用盘,咱们能够称之为Enterprise Disk,SATA盘多面向一般用户,面向对功能、牢靠性要求不高的使用,咱们也能够称之为Nearline Disk。使用对SAS盘最主要的需求是高数据吞吐量、低推迟、高牢靠性。为了到达这种需求,SAS盘的内部驱动电机功能会比较高,转速会比较快。可是转速快会带来可靠性的问题,例如,磁盘内部温度比较高,会影响数据读取的稳定性和可靠性。因而为了既能到达很高的转速,又能确保体系的牢靠性,SAS盘内部加入了许多传感器对温度进行闭环监控,使体系的温度到达稳定,不能过高。SAS盘内部的盘片基板也是经过特别设计的,和SATA盘内部的基座完全不相同。

如下图所示,SATA盘选用的是铝资料基板,SAS盘选用的是玻璃资料基板。选用铝资料的长处在于存储密度高,可是,基板的全体平坦度不高,这就带来很严重的牢靠性疑问。在微观世界中,不平坦的基板就像丘陵地带相同,当磁头高速工作的时分,如果有个风吹草动,磁头就会和这些山丘磕碰,致使盘面划伤,数据丢掉。玻璃基板的长处在于平坦度高,可是存储密度不如铝资料高,这就致使SAS盘的数据存储容量小于SATA盘的容量。明显,从设计方面考虑,SAS优先思考了牢靠性,SATA则思考了贱卖性和大容量。因为SAS盘在吞吐量和推迟目标方面都体现了特殊性,一般的IDE、SATA接口是无法满意使用需求的,因而需求其他高功能接口的撑持。一般撑持SAS盘的接口技能有FC、SCSI和SAS,而且支持双端口,这些都是为了满意企业级高牢靠性使用的需求。在数据传输协议方面,SAS也需求思考软件方面的牢靠性,对于SATA盘的ATA协议明显是不行的,因而对于这种高功能的盘选用了SCSI数据传输协议。



上面说完了SAS的情况,它做为SCSI演进出来的较高端产品的代表,笔者还是觉得有必要盘点一下SCSI,以及常见的硬盘接口及其参数,在Linux下的使用等,尽管其本身在市面上已经难觅踪迹。

SCSI(Small Computer System Interface)是一套完整的数据传输协议,其主要功能是在主机和存储设备之间传送命令、状态和块数据。在各类存储技术中,SCSI技术可谓是最重要的脊梁。SCSI协议位于操作系统和外部资源之间,它具有一系列的功能组件,操作系统对外部设备(如磁盘、磁带、光盘、打印机等)的I/O操作均可以通过SCSI协议来实现,一般情况下,SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。



常见硬盘接口

1. IDE接口的硬盘

其英文名称:Integrated Drive Electronics,常见的2.5英寸IDE硬盘接口它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。IDE代表着硬盘的一种类型,但在实际的应用中,人们也习惯用IDE来称呼最早出现IDE类型硬盘ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。

其特点为:价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。

2. SCSI接口硬盘

SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使得它很难如IDE硬盘般普及,因此SCSI硬盘主要应用于中、高端服务器和高档工作站中。

其特点为:传输速率高、读写性能好、可连接多个设备、可支持热插拔,但是价格相对来说比较贵。


3. SATA接口类型

其英文名称为:Serial Advanced Technology Attachment。使用SATA(Serial ATA)口的硬盘又叫串口硬盘,是PC机硬盘的主流配置。SATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。

串行接口还具有结构简单、支持热插拔的优点。



lsscsi命令

lsscsi是Linux下列出scsi/SATA设备信息的指令,比如硬盘驱动器,光盘驱动器。详细命令说明请参考此处

lsscsi 命令语法:
lsscsi [选项] [H:C:T:L]

lsscsi 命令选项:
选项 含义
-g 显示SCSI通用设备文件名称
-k 显示内核名称而不是设备节点名
-d 显示设备节点的主要号码和次要号码
-H 列出当前连接到系统的SCSI主机而不是SCSI设备
-l 显示每一个SCSI设备(主机)的附加信息
-c 相对于执行 cat /proc/scsi/scsi 命令的输出
-p 显示额外的数据完整性(保护)的信息
-t 显示传输信息
-L 以“属性名=值”的方式显示附加信息
-v 当信息找到时输出目录名
-y<路径> 假设sysfs挂载在指定路径而不是默认的 “/sys” -s 显示容量大小。
-c 用全称显示默认的信息。
-d 显示设备主,次设备号。
-g 显示对应的sg设备名。
-H 显示主机控制器列表,-Hl,-Hlv。
-l 显示相关属性,-ll,-lll=-L。
-v 显示设备属性所在目录。
-x 以16进制显示lun号。
-p 输出DIF,DIX 保护类型。
-P 输出有效的保护模式信息。
-i 显示udev相关的属性
-w 显示WWN
-t 显示相应传输信息(ATA,FC,SBP,ISCSI,SPI,SAS,SATA,USB),-Ht,-tl.(包括sas地址)

结果含义


命令示例

lsscsi 列出所有 SCSI 设备:
lsscsi
[3:0:0:0] cd/dvd NECVMWar VMware SATA CD01 1.00 /dev/sr0[32:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
[0:0:0:0]    disk    ATA      ST2000LM015-2E81 0001  /dev/sda

lsscsi -L列出所有具有详细属性的 SCSI 设备:
lsscsi -L
[3:0:0:0] cd/dvd NECVMWar VMware SATA CD01 1.00 /dev/sr0
device_blocked=0
iocounterbits=32
iodone_cnt=0x229
ioerr_cnt=0x4
iorequest_cnt=0x23a
queue_depth=1
queue_type=none
scsi_level=6state=running
timeout=30
type=5

[32:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
device_blocked=0
iocounterbits=32
iodone_cnt=0x37370
ioerr_cnt=0x3
iorequest_cnt=0x37370
queue_depth=32
queue_type=simple
scsi_level=3
state=running
timeout=180
type=0

[0:0:0:0]    disk    ATA      ST2000LM015-2E81 0001  /dev/sda
device_blocked=0
iocounterbits=32
iodone_cnt=0x20438f
ioerr_cnt=0x6c8
iorequest_cnt=0x243c1d
queue_depth=32
queue_type=simple
scsi_level=6
state=running
timeout=30
type=0

lsscsi -s列出所有具有友好可读磁盘容量的 SCSI 设备:
lsscsi -s
[3:0:0:0] cd/dvd NECVMWar VMware SATA CD01 1.00 /dev/sr0 -[32:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda 536GB
[0:0:0:0]    disk    ATA      ST2000LM015-2E81 0001  /dev/sda   2.00TB


Linux 开启 SCSI 日志调试功能

内核编译选项中需开启 CONFIG_SCSI_LOGGING,logging 类型源码文件位置(有说明):
-> drivers\scsi\scsi_logging.h

使用说明
* Note - the initial logging level can be set here to log events at boot time.
* After the system is up, you may enable logging via the /proc interface.unsigned int scsi_logging_level;
#if defined(CONFIG_SCSI_LOGGING)EXPORT_SYMBOL(scsi_logging_level);
#endif

scsi_logging_level 被定义成int类型(32bit),该机制使用了30个bit,从低位到高位每3bit为一个logging level从SCSI_LOG_ERROR_SHIFT到SCSI_LOG_IOCTL_SHIFT(SCSI_LOG_XXX_SHIFT为不同level的移位数),每个level使用的bit数都是3,所以 SCSI_LOG_XXX_BITS 均为3。

scsi_logging_level 值可以在 boot 命令行设置也可以开启设备后在 /proc 文件系统中设置:
-1 - Enable scsi events to syslog. // 开启所有scsi log
0 - Disable scsi events to syslog. // 关闭所有scsi log

命令:echo 0/-1 > /proc/sys/dev/scsi/logging_level


参考文档:

SerialAttachedSCSI.InterfaceManual.Seagate.200605.pdf