之前回顾了 SES 的基础知识以及几种在实际应用下的实现方式,最后说一下 SGPIO ,通用串行输入 / 输出总线。很多做硬件设计的同学对 GPIO ,通用输入 / 输出非常的了解,而 SGPIO 是把通用目的 I/O 信号来串行化的一种方法。 SGPIO 定义了 Initiator 初始端 ( 比如一个主机适配器 ) Target 目的端(比如放置磁盘的背板)之间的通信,通常情况下 Target 目的端可以把 Initiator 初始端的输出信号转换成多个并行的 LED 信号。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

      其实 SGPIO 是和 SES 没有任何关系的标准, SES 是通过 SCSI 的命令集来实现对磁盘状态灯、温度、风扇等元素的管理,而 SGPIO 相对于 SES 来说功能简单的很多,仅仅是对磁盘状态灯的管理。比如, RAID5 组中的某个磁盘由于 ECC 错误导致“ Failed ”掉线, RAID5 变成 Degraded 降级状态,而这个时候 Initiator 控制端比如卡或者控制器等,可以通过 SGPIO 来让那颗磁盘的状态灯变成红色,从而系统管理员可以发现并更换问题磁盘。

        SGPIO 总线共有四个信号线,分别是 SClock SLoad SDataOut SDataIn ,如下图所示,其中前 3 个是从 Initiator 发送到 Target 的,而最后一个是从 Target 发送到 Initiator SClock 是时钟信号, SLoad 是一个位流传输的最后时钟, SDataOut 是串行的数据输出位流,而 SDataIn 是串行的数据输入位流, SDataIn 不是所有的 SGPIO 设备都支持的,是可选的。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

          SGPIO 总线通过以上 4 组信号就可以控制磁盘灯的状态,一般来说支持 3 种状态, Activity Locate Error 。这是一个相对比较独立的标准,因为它独立的定义了物理层、协议层和应用层等等。在实际的应用中,目前最为流行的莫过于在 SAS HBA 或者 RAID 卡的 X4 宽接口中,如果卡端支持 SGPIO 的话,这种宽接口标准正好包含了除了数据通路之外的 SGPIO 信号接口,如下图所示,通过一个统一的包含数据、 SGPIO 信号的线缆就可以实现数据的传输以及磁盘信号灯的控制,实现方式比较简单。 SES Over I2C 是通过卡上面的 I2C 接口采用特殊的线缆来管理,所以可以称作带外管理;而对于 SGPIO 来说,可以称作带内管理。

        当然,除了卡支持 SGPIO 外,磁盘背板也需要支持 SGPIO ,而目前最为流行的是采用 AMI 公司的 9071/9072 芯片,这种芯片支持两种方式的机箱管理,一种是 SES Over I2C ,另外一种就是 SGPIO 。对于 SGPIO 标准的详细定义,可以参照 SFF-8485 的规格书,由 SFF 标准委员会制定 ,  [url]ftp://ftp.seagate.com/sff[/url]