分类:
2008-04-07 18:53:10
了解 Solaris 中对基于对象的存储设备(OSD)的支持。
简介
本文主要介绍 Solaris 操作系统中对基于对象的存储设备(OSD)的支持。在此之前, 这篇 Sun Developer Network (SDN) 文章 对 OSD 作了大体概述。
在 Solaris 操作系统中,支持 OSD 的最初目的是为 Defense Advanced Research Projects Agency(DARPA)构建一个千万亿次量级( petascale)的高性能计算(HPC)系统。基于对象的文件系统是实现高效能计算系统(High Productivity Computing Systems,HPCS)的必需条件。要获得高 I/O 带宽和可伸缩性需求,必须使用对象存储和能够理解对象语义的驱动程序。此外,在 Sun 正式认可的(endorse)基于标准的方法中,OSD 就是一种经过批准的 T10 标准。
有关包含基于对象语义的 ANSI T10 SCSI OSD Version 1 命令集扩展的背景信息,请参考 。
全球网络存储工业协会(Storage Network Industry Association,SNIA)OSD 技术工作小组正在研究 OSD-2。OSD-2 是项目 T10/1729-D 命令集的进一步扩展。除了对 OSD-1 作出了一些说明,OSD-2 还提供了一些有趣的特性:
其他增强还包括 64 位 CDB 和属性表对齐(alignment)、增强的安全性、超过对象结束位置的读操作(read-past-end-of-object)、不用数据缓冲设置属性、基于范围的刷新(range based flush),以及 CLEAR & PUNCH
命令。总之,OSD-2 为存储设备赋予了更多的控制和功能。
在未来计算领域的存储和访问技术中,对象存储将发挥至关重要的作用。现代计算的数据访问模式与数据属性紧密联系在一起,并且基于块的文件系统必须应用额外的软硬件资源来根据属性检索数据,而这对于系统来说是极大的负担。作为一种基于 SCSI 的协议,OSD 在文件系统和它的存储设备之间提供了一层很高级别的抽象。OSD 可以应用到现有架构上,而不用处理将数据迁移到不同硬件或不同协议之类的复杂问题。高性能计算(HPC)逐渐成为大多数金融和科技行业的主要需求。对这种计算平台来说,将 OSD 与诸如 iSCSI Extensions for RDMA(iSER)之类的新兴传输协议相结合可以带来巨大的价值,并且将在高性能计算领域扮演举足轻重的角色。
在讨论如何在 Solaris 操作系统中支持基于对象的存储之前,首先让我们看看为什么基于对象存储如此重要,以及对象存储文件系统与基于块存储(传统文件系统)之间的差异。
在 Solaris 操作系统中实现 OSD 的目的是提供一种基于标准的、可伸缩的、高性能文件系统。下图显示了传统文件系统栈与基于对象文件系统栈之间的差异。
传统文件系统有两个基本组件:
文件系统用户组件的功能包括:
文件系统存储组件的功能包括:
平均来说,90% 的文件系统工作负载在于存储组件。在 Solaris 操作系统中实现 OSD 意味着将传统文件系统存储组件移动到 OSD 上。这样做可以实现:
传统的基于块的驱动程序(针对磁盘的 sd
和针对磁带的 st
)是 Solaris 操作系统中的主要 SCSI 目标驱动程序。Solaris Device Driver Interface(DDI)框架和 Sun Common SCSI Architecture(SCSA)提供了必须的基础架构,可以轻易地将基于对象的设备驱动程序集成到驱动程序栈中,而该驱动程序栈带有 Solaris 操作系统已经支持的一些传输接口。启动器端(为对象增强的 Sun StorageTek Shared QFS)和目标端(Solaris 和 Sun StorageTek Object )的某些更改也需要支持在 Solaris 操作系统中进行对象存储。
OSD 的基本命令集很简单(要获得更多信息,请参阅 )。OSD 的底层协议是 SCSI,并针对对象支持做了一些更改,因此能够在 Solaris 操作系统支持的任何传输接口上运行,例如 Fibre Channel、SCSI、iSCSI 或者 IB。
在整体架构中有两部分需要讨论一下:
含有最新的 SCSI OSD( sosd
)驱动程序代码、最新的接口和 SCSA 层更改。OpenSolaris 上很快将会提供 中针对 iSCSI 启动器和 MPxIO 层 的更改,以支持 BIDI 和大型 CDB。针对发送对象命令的基于对象的 Shared 代码更改目前还不可用。
下图演示了在启动器栈中实现 OSD 的方法。
sd
和 st
驱动程序属于传统的基于块的目标驱动程序,而 sosd
是新的对象目标驱动程序。从端到端的角度而言,我们实际上正把这个栈看做一个启动器。基于对象的 Shared QFS 模块是 Sun StorageTek Shared QFS 的组件,它生成由 sosd
处理并下发到传输层的 OSD 命令。
许多传输技术都能够提供对象文件系统启动器与 OSD 目标之间的连通性。在 TCP/IP 网络上使用 iSCSI 发送 OSD 命令非常方便,这与在 Fibre Channel(FCP)上使用 SCSI RDMA Protocol(SRP)或 SCSI 类似。iSCSI Extensions for RDMA(iSER)是一个功能强大的传输子系统,它用 RDMA 操作代替了 TCP/IP,而且与 OSD 结合起来可以为 Solaris 支持的对象文件系统提供高性能和改进的可伸缩性。
上图中的存储设备可以是 Solaris 目标实现。因此,许多 CPU 密集型(CPU-intensive)操作仍可由 Solaris 服务器处理,而不是使用低端的 OSD 目标设备。
Solaris OSD 启动器支持所需的关键组件包括:
osd_iotask(9S)
数据结构:这个结构包括 OSD 命令信息和取代了基于块文件系统使用的 buf(9S)
结构。它由文件系统创建并初始化,再传递给驱动程序以执行 OSD 操作,然后将数据或状态返回到文件系统。
bdev_strategy()
。值得注意的接口函数包括:
osd_iotask_alloc(9F)
osd_iotask_free(9F)
osd_iotask_start(9F)
osd_iotask.ot_iodone
(完成函数)
osd_open_by_dev(9F)
osd_close(9F)
sosd
):SCSI 对象存储设备驱动程序理解 T10 OSD CDB、读出数据(sense data)等等。它是从 Solaris sd
目标驱动程序演变而来的,但是使用新的 OSD 文件系统接口。它包括 uscsi(7i)
命令路径,这个命令路径使用传统的 open/close/ioctl
接口。
SUNW_sosd_link.so
)的链接发生器:现在,每个 OSD LUN 都被映射到一个较小的设备。目前这是一个字符节点,而且不会表现分区语义。< /li> OSD OpenSolaris 代码包含 Solaris 节点更改,以支持 OSD 命令集。目标对象 更改(没有名称空间的对象接口)目前还不可用。
底层设备也需要理解 OSD 语义,以处理自己接收到的命令。在这个例子中,Solaris iSCSI 目标支持 OSD 命令集。尽管磁盘是传统的块设备,对象存储设备在定义上是功能丰富且自主的。一些必需的特性需要在 iSCSI 目标仿真器(emulator)中处理,以执行端到端 OSD 的功能性工作。在物理对象存储设备情形下,能够在磁盘和控制器固件中支持该实现。
下图显示 Solaris iSCSI 目标处理 OSD 命令的位置。
请注意以下更改:
作为 Solaris OSD 的应用领域,HPC 是这项技术的未来发展方向。现在,Shared QFS 支持大型企业、网格部署和 HPC。Shared QFS 和 OSD 在可伸缩性和性能上具有明显的优势。目标节点上的存储分配增强了并行文件系统的横向可伸缩性。而在元数据服务器上的传统块分配的伸缩性非常有限。因此,使用启用 OSD 的 Shared QFS,空间分配将转移到存储节点并且将以并行的方式完成。带宽会随着容量的增长而增长。
如今,基于块的 Shared QFS 支持单个 Metadata Server(MDS)用于存储分配和命名服务。在基于对象的 Shared QFS 中将存储分配下移到存储节点,MDS 的主要职责只是命名服务。尽管 Shared QFS 目前只支持单个 MDS,但是已经有计划让其支持多个 MDS 节点。
Storage Archive Manager(SAM)提供的存档支持已经在块空间实现了。Shared QFS 使用 OSD 的最终目标是支持数千个计算节点,同时支持高性能存储平台,从而有效地使用这些功能为存储和计算子系统的数据提供数据。
作为一个并行文件系统,Shared QFS 在多节点集群环境中发挥着主要作用。要支持 HPC 部署中的高数据速率,还得依赖于单个计算节点的 I/O 转换大小和传输能力。要充分利用对象数据路径,S olaris 操作系统需要支持一些关键特性。其中最重要的特性如下:
PKT_DMA_PARTIAL
以上文章转自于 : http://developers.sun.com.cn/