(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf_第1页
(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf_第2页
(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf_第3页
(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf_第4页
(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf_第5页
已阅读5页,还剩54页未读 继续免费阅读

(计算机系统结构专业论文)光纤通道适配器驱动程序设计与研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i摘摘 要要 对象存储系统是一种新型网络存储体系结构,它结合了存储区域网(san,storage area network)的高性能和网络附加存储系统(nas,network attached storage)的跨平台的优点。由于光纤通道具有低延迟、高带宽、支持远距离传输,可扩展性强等优点,适合用于连接对象存储系统中的海量存储设备。其中光纤通道适配器的驱动程序是发挥光纤通道接口优势的关键技术之一。 linux 驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,把设备映射为一个特殊的设备文件,用户程序可以对此设备文件进行操作。在 linux环境下设计并实现了 pci(peripheral component interconnect)数据校验卡设备驱动程序。 详细研究了linux平台下的光纤通道适配器驱动程序设计的多层次架构, 用scsi(small computer system interface)中间层负责接收来自 linux 文件系统的 scsi 命令,并将其转换到 ccb(command control block)处理队列;在 fcp(fibre channel protocol) 层解析 ccb, 得出地址信息, 定位对应的光纤通道设备和 lun (logical unit number) ,并将 ccb 转化为 fcp 信息单元交给固件处理。为降低重复开发驱动程序的难度在 scsi 中间层与 fcp 层引入了一个虚拟接口层传输独立层,传输独立层定义了操作系统和硬件传输协议的交互模式,它向上对系统屏蔽了具体硬件传输协议的细节,向下对具体硬件屏蔽了不同操作系统的各种接口,提高了驱动程序的可移植性。 采用扩展聚散表以及中断消减机制实现了驱动程序进一步的优化,使得驱动程序性能得到提升。搭建了仲裁环拓扑结构并进行性能测试分析,测试结果表明,驱动程序具有良好的性能。 关键词:关键词: 光纤通道;对象存储;扩展聚散表;中断消减机制 iiabstract abstract object-based storage system (obs) is a new network storage architecture.it combines the high-performance in storage area network (san) and cross- platform advantages in network attached storage (nas).because of low latency, high-bandwidth, supporting long-distance transmission and scalability etc.of fibre channel,it can be used in mass storage devices in obs.the driver for fibre channel adapter is the key part. linux driver, which hids details of the various equipment, provides the same interface.generally,in linux operate system, a device is mapped to a special device file.when the user program accesses one device,its just like operating one common file.linux system supports three types of hardware device, such as character device, block device and network device. the multi-level structure is used in the fibre channel adapter driver for linux system.they are scsi(small computer system interface) middle layer, transmission independent layer and fcp(fibre channel protocol) layer.scsi middle layer is responsible for receiving scsi commands from the linux file system ,and converts it into ccb(command control block), then joins ccb processing queue,finally submits it to fcp layer.transmission independent layer ,which defines the interface between scsi middle layer and the fcp layer,is a abstraction interface layer, and is independent of the operating system and specific transfer protocol.the main function of fcp layer,is to parse ccb.it gets address information form ccb,then locates the corresponding equipment and fibre channel lun(logical unit number),finally submits information unit into fcp firmware modules to handle.the extended scatter/gather lists and interrupt avoidance mechanism are included in our driver. and the test results show that the driver gets a good performance. keywords:fibre channel,object-based storage system,extended scatter/gather lists,interrupt avoidance mechanism 独创性声明独创性声明 本人声明所呈交的学位论文是我个人在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已标明引用的内容外,本论文不包含任何其他人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或者部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密,在 年解密后适用本授权书。 本论文属于 不保密 (请在以上方框内打“” ) 学位论文作者签名: 指导老师签名: 日期: 年 月 日 日期: 年 月 日 11 绪论 1 绪论 1.1 课题背景课题背景 网络存储是将网络技术引入存储系统,它充分利用网络的高灵活性、高可访问性和易接入性,在容错技术、并行 i/o 技术、协议高效性的支持下,从而构成易于有效管理、备份和数据访问的分布式网络存储系统。随着网络存储概念的深入人心,在存储市场的巨大需求的推动下,网络存储技术得到了空前的发展,并逐渐形成了几种较为成熟的网络存储架构1。其中附网存储(network attached storage,nas)和存储区域网(storage area network,san)是最为典型的代表。 nas 是将存储设备通过标准的网络拓扑结构(例如以太网) ,连接到一群计算机上。在 nas 存储结构中,存储系统不再通过 i/o 总线附属于某个特定的服务器或客户机,而是直接通过网络接口与网络直接相连,由用户通过网络访问。nas 实际上是一个带有瘦服务器(thin server)的存储设备2,其作用类似于一个专用的文件服务器。这种专用存储服务器不同于传统的通用服务器,它去掉了通用服务器原有的不适用的大多数计算功能,而仅仅提供文件系统功能,用于存储服务,大大降低了存储设备的成本。为方便存储到网络之间以最有效的方式发送数据,专门优化了系统硬软件体系结构,多线程、多任务的网络操作系统内核特别适合于处理来自网络的 i/o 请求3,不仅响应速度快,而且数据传输速率也很高。与传统以服务器为中心的存储系统相比,数据不再通过服务器内存转发(这会引起额外延迟和阻塞) ,直接在客户机和存储设备间传送(即所谓第三方传送) ,服务器仅起控制管理的作用,因而具有更快的响应速度和更高的数据带宽。 san 可以定义为:以数据存储为中心,采用可伸缩的网络拓扑结构,通过具有高传输速率的光纤通道的直接连接方式4,提供 san 内部任意节点之间的多路可选择的数据交换,并且将数据存储管理集中在相对独立的存储区域网内,实现最大限度的数据共享和数据优化管理,以及系统的无缝扩充。具体来讲它是连接一个或多个系统到存储子系统的专用网络,可以在存储设备、服务器和客户之间建立直接联系,支持服务器到服务器、服务器到存储设备和存储设备到存储设备三种高速数据 2传输方式。san 是一种特殊的高速网络,连接网络服务器和诸如大磁盘阵列或备份磁带库的存储设备,san 置于 lan(local area network)之下,而不涉及 lan。利用 san,不仅可以提供大容量的存储数据,而且地域上可以分散,并缓解了大量数据传输对于局域网的影响。san 的结构允许任何服务器连接到任何存储阵列,不管数据置放在哪里5,服务器都可直接存取所需的数据。与 nas 相比,san 具有下面几个特点:首先 san 具有无限的扩展能力,由于 san 采用了网络结构,服务器可以访问存储网络上的任何一个存储设备,因此用户可以自由增加磁盘阵列、带库和服务器等设备,使得整个系统的存储空间和处理能力得以按客户需求不断扩大。另外,san 具有更高的连接速度和处理能力。 nas 和 san 都有各自的优劣,nas 基于“文件” ,san 基于“块” 。 “文件”级别的接口提供了安全性和跨平台的互操作性,而“块”级别接口则在快速访问、高性能方面有优势。因此,将两种方式结合起来产生一种新的接口对象(object) ,基于对象的存储 (object-based storage, obs) 提供了一种全新的存储系统解决方案。 1.2 对象存储系统对象存储系统 基于对象的存储系统是一种新兴的网络存储系统,它综合了 nas 和 san 的优点,同时具有 san 的高速直接访问和 nas 的数据共享等优势,是具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。 基于对象存储提出的一个新的接口对象6。与块是固定大小不一样,对象是可变长的,可包含任何类型的数据,如文件、数据库记录、图像以及多媒体视频音频等,至于包含何种类型数据由应用决定。对象可动态的扩大和缩小。 对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性的组合,这些属性可以定义基于文件的磁盘阵列(redundant arrays of independent disks, raid)参数、数据分布和 qos(quality of service)等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性,对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。 3对象由数据、属性及相应操作代码组成,由对象 id(oid)号标识。也就是说,存储对象中既包含数据,也包含了数据的操作代码,是一个具有标识“接口”、“状态”和“操作”的三元组,是一个封装为一体的一般概念上的对象。将对象分类赋予不同的属性,并构成层次结构,使之服务于不同的用户,如分成根对象(root object) ,分区对象 (partition object) , 集合对象 (collection object) 和用户对象 (user object) ,并以 partition_id 和 user_id 标枳7。 基于对象存储系统 obss(object-based storage systems)的体系结构如图 1.1所示。 它包括元数据服务器集群 (metadata server cluster) 、 基于对象存储设备 (osd,object-based storage device)和客户端(client) ,并通过高速网络相互连接。 图 1.1 对象存储系统 obss 的体系结构 元数据服务器(metadata server, mds)协调客户机与 osd 之间的交互,管理与上层文件系统有关的元数据,它提供安全策略、cache 一致性维护和文件目录的元数据管理等功能。安全策略包括身份验证、授权证书管理、访问控制等。在 obs 系统中,cache 一致性是至关重要的,因为 cache 存在于客户机,osd 和元数据服务器中,必须保证三者的统一。由于与块/扇区有关的元数据管理(大约有 90%的负载)已交由 osd 负责,元数据服务器只管理与文件目录有关的元数据(10%的负载) ,即将文件目录映射为对象。 对象存储设备(osd)是具有一定的智能设备,包括处理器、内存、网络接口、存储介质如磁盘等以及运行在其中的控制软件,目前国际上通常采用刀片式结构实现对象存储设备。osd 提供物理视图(inode 层) ,将数据访问的负担分布到对象存 4储系统的不同部分,以避免类似 nas 系统中元数据瓶颈问题。inode 工作分布到各个智能 osd 设备中,因此 90%的元数据管理是分布到实际存储数据的 osd 当中。 1.3 光纤通道技术光纤通道技术 基于对象存储系统中,对象存储设备向外部提供高速网络访问接口,内部采用高速存储通道连接存储介质。光纤通道技术 fc8(fibre channel)结合了通道和网络的技术优势,能为基于对象的存储系统提供了低延时、高带宽和远距离传输的优质服务9。 光纤通道是提供必要的连通性、一定的距离、多路传输协议网络特性的网络接口和保持简单的、可重复性能并保证可靠传输的通道接口的结合。工业标准网络协议 ip(internet protocol)和通道协议 scsi(small computer system interface)能够映射到 fc 的标准上10,适用于工作站、大容量存储子系统、外围设备和 host 系统之间的双向点到点串行数据通路的互连。fc 可以在光缆和铜缆上传输通用协议 ip、scsi11和 hippi(high performance parallel interface) ,能以高达 400mb/s 甚至最新速率可达 10gbits/s 的数据传输速率双向同时传输,为高性能分布式应用与数据密集环境提供高速和较小响应时间的连接。 光纤通道网络是由一个或多个双向点到点串联的数据通路组成。这些链路的基本速率刚好超过 1gbps,提供的数据传送带宽100mbps,按照定义有 1/2、1/4、1/8、2 倍、4 倍、8 倍、10 倍速率的链路。虽然光纤通道协议的构成是与单模光纤和多模光纤的传送和技术性能匹配的,但用来传送的物理介质也可以是铜双绞线或同轴电缆。 光纤通道定义了 3 种拓扑结构: 点对点 (point-to-point) 、 仲裁环 (arbitrated loop)和交换机(fabric) 。其网络的拓扑结构对于所连接的设备是透明的。 1.3.1 fc 协议的分层模型 1.3.1 fc 协议的分层模型 光纤通道协议是一种分层结构,每个层次定义为一个功能级,但是所分的层不能直接映射到 osi(open systems interconnection)模型的层上,如图 1.2 所示。fc通道的五层定义12为:物理媒介和传输速率、编码方式、帧协议和流控制、公共服务以及上级协议(upper layer protocol,ulp)接口。 (1)fc-0 5fc-0 是物理层底层标准。fc-0 层定义了连接的物理端口特性,包括介质和连接器(驱动器、接收机、发送机等)的物理特性、电气特性和光特性、传输速率以及其它的一些连接端口特性。物理介质有光纤、双绞线和同轴电缆。带有 ecl(emitter coupled logic)的铜芯同轴电缆,用于高速、短距离传输。双绞线用于 25mb/s 数据传输,距离可达 50 米。带有激光和 led(light emitting diode)传导的光纤,用于长距离的传输,光纤通道的数据误码率低于 10e-12,它具有严格的抖动容许规定和串行 i/o 电路能够进行正常管理的其它一些电气条件。 (2)fc-1(传输协议) fc-1 根据 ansi(american national standards institute)x3 t11 标准,规定了8b/10b 的编码方式和传输协议,包括串行编码、解码规则、特殊字符和错误控制。传输编码必须是直流平衡以满足接收单元的电气要求。特殊字符确保在串行比特流中出现的是短字符长度和一定的跳变信号,以便时钟恢复。8b/10b 码在现实中的应用是稳定和简单的。 ulpulpfc-4fc-4fc-0(物理接口、光纤和电路线缆、连接器等)fc-0(物理接口、光纤和电路线缆、连接器等)fc-1(8b/10b编码,链路控制)fc-1(8b/10b编码,链路控制)fc-2(帧结构、流量控制、服务类别)fc-2(帧结构、流量控制、服务类别)fc-3(通用服务)fc-3(通用服务)scsi-fcpscsi-fcpfc单字节指令集fc单字节指令集fc-snmpfc-snmpfc-lefc-lescsi-3scsi-3esconesconsnmpsnmp802.2 llc802.2 llc 图 1.2 光纤通道协议分层模型 (3)fc-2(帧协议) fc-2 层定义了传输机制、包括帧定位、帧头内容、使用规则以及流量控制等。光纤通道数据帧长度可变,可扩展地址。用于传输数据的光纤通道数据帧长度最多达到 2kb,因此非常适合于大容量数据的传输。帧头内容包括控制信息、源地址、目的地址、传输序列标识和交换设备等。64 字节可选帧头用于其它类型网络在光纤 6通道上传输时的协议映射。光纤通道依赖数据帧头的内容来引发操作,如把到达的数据发送到一个正确的缓冲区里。 (4)fc-3(公共服务) 提供高级特性的公共服务,即端口间的结构协议和流动控制,它定义了三种服务:条带化(striping) 、搜索组(hunt group)和多播(multicast) 。条带化的目的是为了利用多个端口在多个连接上并行传输,这样 i/o 传输带宽能扩展到相应的倍数。搜索组用于多个端口去响应一个相同名字地址的情况,它通过降低到达“占线”的端口的概率来提高效率。多播用于将一个信息传递到多个目的地址。 (5)fc-4(ulp 映射) 它是光纤通道标准中定义的最高等级,规定了光纤通道的底层跟高层协议(ulp)之间的映射关系以及与现行标准的应用接口,现行标准包括现有的所有通道标准和网络协议,如 scsi 接口和 ip、hippi 等。于是就产生了 fcp-scsi(fibre channel protocol-small computer system interface) 、fc-ip(fibre channel-internet protocol) 、fc-vi13(fibre channel-virtual interface)等协议。 1.3.2 fcp 协议协议 fcp 协议14定义了 fc 协议和高层 scsi 协议的映射关系和应用接口。 它在 scsi发启端和 scsi 目标端之间采用光纤通道协议定义的帧和序列来传送 scsi 协议格式的命令、响应和数据块。表 1.1 给出了 scsi 和光纤通道术语15的对应关系。 表 1.1 scsi 和光纤通道术语对比 功 能 scsi 术语术语 fcp 术语术语 i/o 操作 交换 请求/响应原语 序列 命令服务请求 请求命令信息单元 fcp_cmnd 数据传送请求 数据描述信息单元 fcp_xfer_rdy 数据传送操作 请求数据信息单元 fcp_data 命令服务响应 命令状态信息单元 fcp_rsp fcp 协议16通过一组信息单元来实现 scsi 上层协议和光纤通道之间的接口。fcp_cmnd、fcp_xfer_rdy 和 fcp_rsp 称为控制信息单元,而 fcp_data 称 7为数据信息单元。 这些信息单元在光纤通道中被映射成单独的序列, 成为一次 i/o 操作导致的交换的一部分。 fcp_cmnd 信息单元: fcp_cmnd 信息单元运载一个待执行的 scsi 命令和待完成的任务管理请求。fcp_lun 字段包括逻辑单元号码,该号码是预期的 scsi 目标端内部的逻辑单元地址。 来自 lun0 (logical unit number) 的一个 scsi inquiry决定 scsi 设备类型、 制造商和逻辑单元模型。 ecp_cntl 字段包括描述任务处理的控制标记,以及终止任务,复原目标端,清除和中止任务集的比特,还有指出一个操作是读操作还是写操作的比特。fcp_cdb 字段说明了 fcp_cmnd 信息单元的实际工作,并包括 scsi 命令的描述块。命令描述块字段的 16 字节说明待执行的 scsi命令。最后,fcp_dl 指定在命令下将被传送的数据字节的最大值,用来防止在接收数据时缓冲区溢出。 fcp_xfer_rdy 信息单元:该信息单元是可选执行的,显示目标端已经准备好执行一个数据传送的命令。该信息单元用来进行握手,以防止目标端或发启端发送数据过早要求其他端口响应时缓冲区溢出。对于写操作和读操作,是操作的目标端来发送 fcp_xfer_rdy 信息单元。 data_ro 字段复制输入操作的参数字段中的相对偏移字段的内容。burst_len 字段用在从 scsi 发启端到目标端的数据传送,以显示保留给下一个 fcp_data 信息单元的缓冲区数量。对于从 scsi 目标端到发启端的数据传送,该字段显示下一个 fcp_data 信息单元的精确长度。 fcp_data 信息单元:fcp_data 信息单元包括发送给 fcp_cmnd 的应用数据。不止一个 fcp_data 信息单元用来传送和特定的 i/o 命令相关的数据。如果fcp_xfer_rdy 被执行, fcp_data 信息单元将包含与在 fcp_xfer_rdy 信息单元中字段相同的相对偏移值。依靠使用的服务级和服务参数,正常的光纤通道机制将申请传送信息单元。 fcp_rsp 信息单元:fcp_rsp 信息单元用来返回与发送的 cmnd 相关的几种状态信息的级型。 fcp_status 字段显示其他字段的有效性, 并告诉 fcp_resid 字段是否包括一个显示传送过多或过少比特的有效计数,以及 fcp_sns_len 和fcp_rsp_len 字段是否包括 fcp_rsp_info 和 fcp_sns_info 长度的有效计数。这些字段分别指出协议的故障信息和逻辑单元的错误信息。如果是一个成功的操作,fcp_status 和所有其他字段都为 0。 81.4 本文研究的主要目的和意义本文研究的主要目的和意义 基于对象存储系统的对象存储设备采用光纤通道连接,为了充分发挥光纤通道的优越性能,本文针对提供光纤通道服务的核心部件光纤通道适配器的驱动程序设计做出了深入地探讨,并且研究了驱动程序设计中的关键技术。 一方面,本文的从实验室长远需求而言提出了光纤通道适配器驱动程序设计的三层架构,尤其是设计了一个传输独立层作为虚拟接口层,为后续的驱动程序移植提供了极大的便利。 另一方面,本文从发挥光纤通道适配器的硬件优势而言提出了适合光纤通道适配器硬件的设计技术,尤其是采用了扩展聚散表和中断消减机制对驱动程序进行了性能优化。 全文分为六章。 第一章阐述了当前网络存储的新热点基于对象存储,分析了基于对象存储系统的需求,介绍了光纤通道技术在基于对象存储系统中的重要意义,并介绍了光纤通道协议的层次架构,详细介绍了驱动程序设计涉及的 fcp 协议。 第二章阐述了光纤通道适配器驱动程序设计的基本特点。阐述了光纤通道适配器驱动程序设计在基于对象存储中的重要意义。介绍了光纤通道适配器驱动程序开发的系统环境 linux2.6 内核的特点,并以实验室的 pci(peripheral component interconnect)数据校验卡为例阐述了驱动程序开发的基本特点。 第三章阐述了光纤通道适配器驱动程序的层次架构,详细分析了 scsi 中间层,传输独立层和 fcp 层的特点和作用,尤其是指出了传输独立层的设立对于整个研究工作的重要价值。 第四章阐述了光纤通道适配器驱动程序的关键技术,详细分析了它与固件的接口,阐述了驱动程序的 scsi 注册机制、初始化流程以及 i/o 路径。并且阐述了驱动程序设计的关键技术,在探讨关键技术时,研究了它的优化设计技术。 第五章阐述了光纤通道适配器驱动程序的性能测试及分析。尤其是搭建了仲裁环拓扑结构来测试光纤通道适配器驱动程序的应用价值。 第六章是全文总结,总结了全文并针对后续研究工作作出了进一步的展望。 92 系统平台及特点 2 系统平台及特点 对象存储控制器是基于对象存储系统的核心部件, 它对内提供了 fc 接口来连接大规模的 osd 设备,对外提供了 iscsi(internet scsi)接口来提供数据服务。它在内部完成了基于块的数据到基于对象的数据的转换。光纤通道适配器为对象存储控制器的 fc 接口提供了物理实现, 而它的驱动程序为光纤通道适配器发挥它的优良性提供了软件支持。本项目的光纤通道适配器驱动程序是在 linux2.6 内核环境下开发的。本章以与光纤通道适配器同类的 pci 设备数据校验卡驱动程序设计为例阐述了 linux 下 pci 设备驱动程序的开发要点。 2.1 对象存储控制器原型对象存储控制器原型 对象存储系统17由客户机(client)、对象存储设备 osd、分布式文件系统、互连网络、元数据服务器五部分组成。osd 对现有 scsi 命令集加以扩展,从而把更多的功能从主机端转向了存储设备个体, 可以帮助 it 管理者减轻存储管理的复杂程度。osd1819实际是由对象存储控制器20osc(object-based storage controller)和传统的存储介质组成。对象存储控制器是 osd 对象属性的赋予者,是实现对象存储系统的关键技术之一。 目前,从三个不同的层面对对象控制器进行研究。第一个层次是系统级对象控制器,利用商用的 pc 机主机、cpu 和外设适配器等形成对象控制器的硬件,通过对文件系统功能的分析、裁减,将底层磁盘空间管理的部分移入对象控制器中,完成对象的属性管理,并形成与上层的文件系统的对象管理接口。第二层次是采用现有 iop(i/o processor)芯片研究对象控制器实现方法,对象控制器向外提供网络接口(1gbps 接口),对内提供 sata(serial advanced technology attachment)接口(150mb/s),控制器通过网络接口接收外界用户以 iscsi21格式封装的基于对象22的命令, 通过 sata 接口对磁盘数据进行读写等操作, 并将结果以 iscsi 格式封装后返回给用户。第三层次则是开展利用 fpga 设计对象控制器的研究,通过软硬件结合,甚至是以硬件为主来缩短 i/o 路径,减少数据处理环节。 10如图 2.1 所示,对象存储控制器23芯片级原型系统位于光纤磁盘阵列24和 ip 网络之间,对外提供对象存储接口,可使光纤通道磁盘阵列具有 osd 设备的功能。 客户端元数据服务器对象存储设备对象存储控制器光纤通道磁盘阵列元数据路径(tcp/ip)数据路径(iscsi) 控制路径(iscsi)fc 图 2.1 三方架构的对象存储原型系统 一方面,如果用一台主机去实现 osc 的功能,数据必然要经过以太网收发接口-网卡内部缓冲-pci总线-主机内存-pci总线-光纤通道适配器内部缓冲区-光电转换接口等至少 7 处设备,i/o 路径冗长,并且在主机内存中由于操作系统的核态与用户态的转换,还要多出 4 次拷贝。统计表明,每增加一次拷贝,通信的效率就会降低至少 20%,将光纤通道与对象存储管理整合到一块芯片中实现,能减少拷贝,缩短 i/o路径,降低通讯延时,提高存储系统的性能。 另一方面,通过在 osc 内部设计适当的缓存 cache 策略,能够将对象数据预取到 osc 的缓存中,缩短 i/o 路径,减少 i/o 请求响应时间。 根据以上分析,我们设计出如图 2.2 所示的对象存储控制器原型。该对象存储控制器在内部完成对象到块的数据转换,它包括一个 iscsi 接口和一个 fc 接口,fc接口连接着光纤磁盘阵列,而 iscsi 接口则对外部网络提供数据服务。光纤通道适配器作为对象存储控制器的 fc 接口控制器, 其性能直接影响对象存储系统的整体性能。而光纤通道适配器驱动程序的好坏是发挥硬件本身性能的关键。 在对象存储控制器中,fc 接口是一个独立的子部分,该接口采用 sopc(system-on-programmable-chip) 技术来设计实现。其硬件设计平台采用 altera 公司提供的 stratix gx 开发板。 光纤通道硬件接口设计的工作和光纤通道适配器驱动程序的设计工作并行,二者都遵循相同的光纤通道协议标准。光纤通道适配器驱动程序首先在 linux2.6 内核下进行开发,然后再将驱动程序移植到 uclinux 嵌入式操作系统下,并完成驱动程序的功能裁剪,使其能为定制的光纤通道接口硬件服务。由此 11可见, 光纤通道适配器驱动程序的设计是对象存储控制器 fc 接口能够正确应用的关键。 ip网络fc网络iscsi网络接口网络接口控制程序obs控制器fc接口fc接口控制程序fcp共用存储池fc disk对象/块转换引擎基于对象基于块 图 2.2 对象存储控制器原型系统 2.2 linux2.6 内核特点内核特点 众所周知, linux 在嵌入式系统中的应用已经非常普遍。由于 linux2.6 内核引入了更多非常有利于嵌入式应用的功能。这些新功能包括实时性能的增强、更方便的移植性、对大容量内存的支持、支持微控制器和 i/o 系统的改进等。光纤通道适配器驱动程序开发的系统环境选择了 linux2.6 内核25,这为驱动程序向嵌入式操作系统移植提供了有力的支持。 2.2.1 抢占式内核 2.2.1 抢占式内核 和其它大多数通用操作系统一样,当一个进程被系统调用并处于运行状态时,以前版本的 linux 是不允许对该进程进行调度的。这就意味着一旦系统调用中有某个任务正在执行,那么该任务就会控制处理器,直到系统调用结束,而不管其使用处理器时间的长短。这种设计在很多时候会导致一些更重要的实时任务在等待系统调用完成的过程中被耽搁。 linux2.6 内核在一定程度上使用了可抢占的模式26。因此,在一些时效性比较强的事件中,linux2.6 内核要比 linux2.4 内核具有更好的响应能力。在 linux2.6 内核中,代码被设置了抢占点,在系统调用过程中,linux2.6 会定时地检查抢占点,以避免不合理的延迟发生。而在检查过程中,调度进程很可能就会中止当前的进程而执行优先级更高的进程。 122.2.2 高效的调度程序 2.2.2 高效的调度程序 在以前版本的 linux 中,进程调度程序需要查看每一个准备好的任务,经过计算来决定哪一个任务被执行。因为大量的任务需要的时间一般都不相同,这种算法需要根据所有任务需要的时间来计算每个任务的优先级,这就要占用大量的计算时间,所以一些复杂的多任务应用程序往往得不到及时的调度。 在 linux2.6 内核中,调度程序不再每次扫描所有的任务,而是在一个任务变成就绪状态时将其放到一个名为“当前队列”的队列之中。当进程调度程序运行时,它只选择队列中优先级最高的任务来执行。这样,调度就可以在一个恒定的时间里完成。当任务执行时,它就会得到一个时间段,或在其转到另外一个线程之前得到一段时间的处理器使用权。当它的时间段用完之后,任务就会被移到另外一个名为“过期”的队列中。而在该队列中,任务会根据其优先级进行排序。 某些情况下,所有位于当前队列的任务都将被执行并且都将被移到“过期”队列之中。当这种状况发生时,队列就会进行切换,原来的“过期”队列成为当前队列,而空的当前队列就成为过期队列。由于在新的当前队列中的任务已经被排列好了,调度程序可以取当前队列的第一个任务进行执行。 2.2.3 posix 线程、信号和计时器 2.2.3 posix 线程、信号和计时器 posix(portable operating system interface for unix)标准描述的是一套用于创建和管理 posix 线程的功能。在 linux2.6 内核中,这些精心定义的系统功能它得到了很大的改进。与 posix 线程一起,linux2.6 内核27把 posix 信号和 posix 高精度计时器作为了主流内核的一个组成部分。新的 posix 信号不能被丢失,并且可以携带信息作为参数,也可以从一个 posix 线程传送至另外一个线程。 嵌入式系统通常要求硬件能够在固定的时间安排下来运行任务28。posix 计时器可以轻松地让任何一个任务都可以周期性地得到预定安排的时间。计时器的时钟可以达到很高的精度,从而可以让软件工程师更加精确地控制任务的调度。 2.3 linux 驱动程序的特点 2.3 linux 驱动程序的特点 在 linux 系统里,对用户程序而言,设备驱动程序隐藏了设备的具体细节,对 13各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件,用户程序可以象对其它文件一样对此设备文件进行操作。如图 2.3 所示。 库函数系统调用接口文件子系统缓存区进程控制子系统进程调度内存管理进程通讯字符设备驱动程序数据块硬件驱动硬 件用户程序内核级 硬件级 内核级 用户级 图 2.3 设备驱动程序的特点 linux 系统支持三种类型的硬件设备:字符设备、块设备和网络设备。字符设备是以字节为单位逐个进行 i/o 操作的设备。块设备每次只能读取一定大小的块的倍数, 通常一块是 512 或者 1024 字节。 块设备通过缓冲区读写, 并且可以随机地读写。网络设备是通过 bsd(berkly software distribution)套接字进行存取的。 linux 系统支持多种设备,这些设备的驱动程序之间有一些共同的特点: (1)内核代码:设备驱动程序是系统内核的一部分,所以如果驱动程序出现错误的话,将可能严重地破坏整个系统。 (2)内核接口:设备驱动程序必须为系统内核或者它们的子系统提供一个标准的接口。例如,一个终端驱动程序必须为 linux 内核提供一个文件 i/o 接口;一个scsi 设备驱动程序应该为 scsi 子系统提供一个 scsi 设备接口,同时 scsi 子系统也应为系统内核提供文件 i/o 和缓冲区。 (3) 内核机制和服务: 设备驱动程序利用一些标准的内核服务, 例如内存分配、中断传送、等待队列等。 (4)可装入:大多数的 linux 设备驱动程序都可以在需要时装入内核,在不需要时卸载。 14(5)可设置:linux 系统设备驱动程序可以集成为系统内核的一部分,至于哪一部分需要集成到内核中,可以在系统编译时设置。 2.4 pci 设备驱动程序设备驱动程序 pci 设备驱动程序除了提供文件系统接口,还要创建一个 pci 专用的操作接口pci_driver 结构。除此之外,它提供了 pci_device_id 数据结构描述驱动程序支持的不同类型的 pci 设备列表,其中包括厂商 id、设备 id 和其他各种配置信息。与字符型设备所不同的是 pci 设备具有自己的 i/o 端口和 pci 内存,驱动程序可以通过访问 pci 设备的 i/o 端口来读写 pci 设备的控制寄存器和状态寄存器,也可以通过访问 pci 设备的 pci 内存来读写 pci 设备的独立 ram (random access memory) 。 pci设备提供了一个配置空间来存放它的 i/o 端口信息和 pci 内存信息。驱动程序可以通过访问 pci 设备的 pci 配置空间来获取这些信息。pci 配置空间还包含 pci 设备的总线号,设备号,中断号等信息。 这里以实验室开发的 pci 数据校验卡为例, 介绍 pci 设备驱动程序开发的流程。pci 数据校验卡可以运行在 32 位、66mhz 的 pci 总线上。它主要包含三个部分。 (1)xor 处理引擎。它用来为 raid5 处理数据奇偶校验。 (2) flash 芯片控制器。 它用来控制存放有 raid 系统软件和 boot loader 的 flash记忆芯片。 (3)nvram 控制器。它用来作为 raid 系统重要数据的缓存。 2.4.1 模块化编程模块化编程 pci 数据校验卡的驱动程序采用模块化编程方式。linux 下的设备驱动程序可以按照两种方式进行编译,一种是直接静态编译成内核的一部分,另一种则是编译成可以动态加载的模块。如果编译进内核的话,会增加内核的大小,还要改动内核的源文件,而且不能动态地卸载,不利于调试,所以采用动态加载的模块方式。如图2.4 所示。 pci 数据校验卡驱动程序采用模块化方式编写时,要实现两个必不可少的函数init_module( )和 cleanup_module( )。在用 gcc 编译内核模块时,需要加上-dmodule -d_kernel_ -dlinux 这几个参数,编译生成的模块(一般为.ko 文件) 。可以使 15用命令 insmod 载入 linux 内核,从而成为内核的一个组成部分,此时内核会调用模块中的函数 init_module( )。当不需要该模块时,可以使用 rmmod 命令进行卸载,此进内核会调用模块中的函数 cleanup_module( )。 任何时候都可以使用命令来 lsmod 查看当前已经加载的模块以及正在使用该模块的用户数。 内核空间用户空间insmodrmmodcreate_module()init_module()delete_module()init_module()cleanup_module() 图 2.4 驱动程序的模块化编程 2.4.2 配置空间的访问 2.4.2 配置空间的访问 pci 数据校验卡的配置空间如图 2.5 所示。 所有的 pci 设备都有至少一个 256 字节配置地址空间。前 64 字节是标准的,而剩下的是依赖设备而定的。 其中 vendor id, device id 和 class code 三个配置寄存器信息用来标识这个 pci设备。 vendor id:这个 16 位寄存器标识一个硬件制造商。例如,每个 intel 设备都标有相同的供应商号 0 x8086。 device id:这是另一个 16 位寄存器,由供应商选择。对于这个设备 id 没有要求官方的注册。 这个 id 常常和供应商 id 成对出现来组成一个唯一的 32 位标识符给一个硬件设备。 class:每个外设都属于一个类。类寄存器是一个 16 位值,它的高 8 位标识“基类”(或者群)。例如,“ethernet”和“tokenring”是 2 个类都属于“network”群,而“serial”和“parallel”属于“communication”群。一些驱动可支持几个类似的设备,把它们作为同一类设备。 16vendor iddevice idcommandstatusclass coderevision idcache line sizelatency timerheader typebistbase address register 0base address register 1base address register 2base address register 3base address register 4base address register 5cardbus cis pointersubsystem vendor idsubsystem idexpansion rom base addressreservedcapabilitiespointerreservedinterrupt lineinterrupt pinmin_gntmax_lat 图 2.5 pci 配置空间 pci 数据校验卡的 class code 是 ff0000h,device id 是 0004h,vendor id 是1172h。pci 驱动程序会在初始化模块中向 linux 内核注册自己的 pci_driver 结构体。pci_driver 结构体中的 id_table 成员包含了支持的 pci 设备的 vendor id 和 device id等信息。通过调用 pci_register_driver 向 linux 内核注册 pci_driver,linux 内核可以查找到该 pci 设备。 if (!pci_register_driver(&cc_pci_driver) pci_unregister_driver(&cc_pci_driver); return -enodev; 在查找到 pci 设备后,驱动程序调用 pci_enable_device 激活这个 pci 设备,在这之后,pci 设备驱动程序才可以访问 pci 设备的资源如 i/o 区域或者中断号。 if (pci_enable_device(pci_dev) return -eio; 172.4.3 i/o 地址空间访问 2.4.3 i/o 地址空间访问 在 pci 数据校验卡驱动程序激活该 pci 设备后, 它就可以访问 pci 的设备资源。pci 设备内存和端口统称为资源。pci 总线提供了资源配置机制,能够让设备提出资源需求申请,系统收集所有资源申请信息并综合分配设备所需要的资源,最后把资源分配信息写入到设备中去,以此作为设备访问的依据。 一般的 pci 设备都提供了 6 个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论