许 里,冯国仕,李 璞
(中国电子科技集团公司第三十研究所,四川成都610041)
光纤通道接口通用驱动程序设计与实现*
许 里,冯国仕,李 璞
(中国电子科技集团公司第三十研究所,四川成都610041)
光纤通道是一种高性能的光纤通信技术,在军用和商用的多个领域都有着广泛应用。文中介绍了光纤通道技术在目前发展中存在的问题和光纤通道协议族的基本架构,分析了光纤通道接口驱动程序的功能需求和实现方式,提出了一种linux系统下灵活性和通用性较好的驱动程序设计架构,并详细描述了这种架构的程序实现要点和技术优势。最后,在实际硬件环境中对驱动程序的性能进行了测试和分析。
光纤通道 接口驱动程序 接口性能
光纤通道(Fibre Channel,FC)是美国国家标准委员会(ANSI)为网络和通道I/O接口建立的一个标准集,它是一种为适应高性能数据传输要求而设计的通信协议,具有高带宽、低延迟、对距离不敏感、拓扑灵活、支持多种上层协议等优点。目前光纤通道已经是光通信的一种重要标准,广泛应用于商用在商用存储区域网络及军用航电系统中,具有良好的推广前景。
相对于以太网等常见的通信标准,光纤通道的生态系统比较封闭,目前的标准规范和设备研制基本都由博科等少数几家公司控制,而且几乎全部针对存储网络进行定制和裁剪。第三方研发团队自行研制FC设备困难较大。因此,本文提出了一种通用的FC接口驱动程序架构,并详细描述了这一架构下的驱动程序实现要点。这一程序架构有良好的扩展性,易于进行各种定制化修改和二次开发,可以适应多种FC设备的需求。
FC网络支持的星形和仲裁环两种拓扑。其中,星形是最常见的拓扑类型,即整个网络由FC交换机和接入交换机的各个FC节点(node)组成。本文描述的FC接口协议栈即是FC节点侧的FC协议系统。
根据FC协议标准规定,FC接口的协议处理分为5层,如图1所示[1]。FC-0层是物理接口和介质层,包括线缆、连接器和它们的各自特性的规范[2]。FC-1层是传输协议层,包括编解码、字节和字之间的转换、发射机接收机的状态转换和错误检测等[3]。FC-2层是帧和信号协议层,定义FC帧格式、传输服务类型、接口状态机等[1]。FC-2层是光纤通道协议的最复杂部分,也是光纤通道交换机的主要功能层。它涉及到光纤通道特有的结构,过程和操作的大部分环节。FC-3层是公共服务层,主要定义了系统中的扩展链路服务功能[4]。FC-4层定义了光纤通道结构到上层协议的映射,常见的映射包括SCSI、IP(Internet Protocol),ATM/AAL5等。
图1 FC协议体系Fig.1 FC protocol architectural
一般来说,FC-0,FC-1和部分FC-2层次的功能都由硬件模块完成,FC接口协议栈软件需要完成的功能主要包括FC-2层次的交换与序列管理、分片与重组、帧封装、基本链路服务功能,FC-3的扩展链路服务和FC-4的高层协议映射功能。
本文作者采用的硬件平台如图2所示的开发板。开发板CPU采用龙芯2F,FPGA采用Xilinx的Virtex5 50T芯片。虽然目前国内已经有一些采用fpga实现FC接口功能的研究成果[5],但是考虑到通用性,本文还是选用Xilinx公司提供的FC接口IP核(v3.3)完成FC-0,FC-1和部分FC-2的功能。由于fgpa的FC IP CORE只支持PCI-E接口而龙芯2F只支持PCI接口,因此需要选用PLXtechnology公司的PEX8112芯片完成两种总线的桥接。
图2 FC接口开发板原理示意Fig.2 Development board of FC interface
软件平台选用成熟的linux系统,内核版本为2.6.32。该内核成熟可靠,应用广泛,是目前嵌入式设备开发中广泛采用的版本。
文中设计驱动架构的主要出发点是将FC接口视为一种网络接口,通过各种手段提升驱动的性能和灵活性。FC接口驱动的整体架构如图3所示。
图3 FC接口驱动架构示意Fig.3 Architecture of FC interface driver
本架构中,FC接口驱动与系统其它部分有三类接口。第一类是按照标准的网络分系统接口,为系统协议栈提供协议报文收发服务。具体来说,FC接口驱动提供的发送报文的接口是int fc_xmit(struct sk_ buff*skb,struct net_device*dev),将收到的报文送到上层协议栈时采用的接口是系统提供的void netif_ receive_skb(struct sk_buff*skb)。第二类接口是接收系统对网络接口的管理和控制,FC接口驱动提供inc fc_ioctl(struct net_device*dev,struct ifreq*ifr, int cmd).第三类对外接口是协议栈与PCI总线驱动的接口,实现FC数据帧的对外收发。这样的接口设计保证了FC接口驱动能直接嵌入Linux网络分系统中,与高层协议和底层硬件驱动都是松耦合关系,可以适应不同的硬件平台和网络协议需求。
在FC接口驱动中,FC接口协议栈部分完成上层协议报文和FC帧之间的相互转换,数据收发调度则提供驱动对外的收发数据接口。这二者也是采用松耦合设计,仅通过标准的struct sk_buff结构传递协议报文。
根据上述架构分析,FC接口驱动程序的实现要点和难点主要是FC接口协议栈的设计和数据收发调度的设计。这两者既是整个驱动程序的功能主体,又决定了驱动程序的性能表现。
4.1 FC接口协议栈
FC接口协议栈的功能非常复杂,包括了交换注册、接口注册、交换与序列管理、接口状态变化响应等,不仅仅是报文的封装和解析。因此,协议栈程序的实现上没有拘泥于FC协议的层次划分,而是采用了统一的状态机编程方式,整个协议栈的主要状态机转换如图4所示。
图4 FC协议栈状态转移示意Fig.4 FC protocol state transition diagram
图中有以下几点需要特殊说明:
1)状态之间的转移条件和操作按照“[条件]/操作”的方式标注。
2)接口在远端等待状态时,会阻塞式调用远端查找函数查找需要进行通信的远端端口,根据系统设计,搜索可能是基于arp,名录服务[6]等方式,在驱动中不作具体限定。
3)在完成接口准备后,回调上层协议,表示可以进行业务数据收发。
4.2 数据收发调度
为了提高设计的灵活性,FC接口的数据收发调度被设计为与具体协议无关,它的主要功能是提供对PCI总线和对系统协议栈的数据收发接口。
(1)PCI总线数据收发
为了降低CPU负载,选择采用DMA方式实现PCI总线上的数据收发。Fpga端作为PCI总线的主设备。
DMA传输方式需要一种机制来描述缓冲区信息。本文的设计中采用消息循环队列机制,即设置收方向和发方向各一个消息队列,每个队列元素为描述网络报文缓冲区信息的描述符(Buffer Descriptor,简称为BD)。BD由总线地址(32位)、数据长度(16位)、标志位(16位)三个部分组成,共8个字节。收和发消息循环队列长度分别置于fpga的寄存器RDCNT和TDCNT中,收和发BD区域的基地址分别存储于RDA和TDA寄存器,BD区域存放在内存中。接收FC帧时,CPU通过BD告知fpga端网络接收缓冲区位置(属于内存区域),发送报文时,也是将网络报文在内存中的地址转换为总线地址后赋到BD中。FC帧是缓存于内存区域而非fpga的内置存储空间中。
(2)上层协议数据收发
FC接口驱动与系统协议栈之间的发送数据接口遵循linux网络分系统的标准。接口处理函数fc_ xmit()主要完成数据有效性检查和高层协议分流,根据具体的高层协议调用不同的FC协议适配函数(即FC-4的协议数据接口)进行报文处理,目前实现的FC接口协议栈支持IPv4、ARP[7]和ASM[8]等多种上层协议。
FC接口驱动与系统协议栈之间的收数据接口选择NAPI模式[9]。这种模式是Linux新定义一种网络接口驱动架构,它的主要思想是将收数据中断处理与实际的数据接收处理过程分离,并且一次接收中断触发一轮接收处理函数调用,收取多个报文,因此很适合高速数据接口。实现这个模式的关键工作是实现一个系统规定的NAPI数据接收处理函数,其函数原型是int(*poll)(struct net_device* dev,int*budget)。在本文描述的FC接口驱动中,接收函数fc_poll()的主要处理流程如图5所示。
图5 FC_poll函数流程示意Fig.5 FC_poll function flow diagram
不同的高层协议具有不同的测试指标,但是作为一个网络接口卡本身,有一些基础性指标是各种协议共有的。对于一个通用的光纤通道接口卡,采用吞吐量、丢帧率和帧处理时延占用来衡量其性能表现是合理的,测试结果如表1所示。
1)吞吐量:是指在没有帧丢失的情况下,设备能接收并转发的最大数据速率,本指标采用IXIA公司的光纤通道协议测试仪测得。
2)丢帧率:是指因系统资源不足等原因而导致的帧,丢失率本指标采用IXIA公司的光纤通道协议测试仪测得。
3)帧处理时延:从线路上受到一个FC帧到送至高层协议之间的时间差,这个指标是依赖在FC帧的载荷中增加时间戳,由fpga和软件协同测得。
表1 性能测试结果Table 1 Performance test result
从表中的测试结果可以看出,本文测试的FC接口吞吐量已经接近了PCI桥接芯片的处理极限,帧处理时延很低,没有丢帧情况,说明接口驱动程序具有较好的性能表现。
上文的分析和性能测试表明,文中提出的光纤通道驱动架构既具备良好的扩展和灵活性,又有较高的的性能表现,符合光纤通道接口驱动研究的目标。与目前可以获取的各类公开的光纤通道接口协议实现不同,本文将光纤通道接口标准化为一个网络设备,从而便于与各类网络协议灵活融合。此外,文中验证平台采用的一系列常见的商用软硬件,为后续的研究和产品开发奠定了一个高效稳定的基础。当然,随着光纤通道的传输速率不断提高,驱动程序的架构还需要在后续研究中进一步优化性能,适应更高速率接口的要求。
[1] T11 Technical Committee.Fibre Channel Framing and Signaling-4[EB/OL].America:American National Standards Institute,Inc.2014-5-16[2013-1-17].http:// www.t11.org/ftp/t11/pub/fc/fs-4/14-018v1.pdf.
[2] T11 Technical Committee.Fibre Channel Physical and Signaling Interface-3[EB/OL].America:American National Standards Institute,Inc.1997-11-5[2013-1-17].http://www.t11.org/ftp/t11/member/fc/ph-3/ fcph3_94.pdf.
[3] T11 Technical Committee.Fibre Channel Physical Interface-5[EB/OL].America:American National Standards Institute,Inc.2011-1-11[2013-1-17].http:// www.t11.org/ftp/t11/pub/fc/pi-5/11-011v0.pdf.
[4] T11 Technical Committee.Fibre Channel Link Service-3 [EB/OL].America:American National Standards Institute,Inc.2014-2-11[2013-1-17].http://www.t11. org/ftp/t11/pub/fc/ls-3/14-033v0.pdf.
[5] 刘小刚,周东.光纤通道端口状态机的研究及FPGA实现[J].通信技术,2011,44(07),1-3.
LIU Xiao-gang,ZHOU Dong.Study on Fiber Channel Port State Machine and its FPCA Implementation[J]. Communications Technology,2011,44(07),1-3.
[6] T11 Technical Committee.Fibre Channel Generic Service -7[EB/OL].America:American National Standards Institute,Inc.2013-6-1[2013-5-3].http://www.t11. org/ftp/t11/pub/fc/gs-7/13-215v0.pdf.
[7] DESANTI C.,CARLSON C.and NIXON R..Transmission of IPv6,IPv4,and Address Resolution Protocol (ARP)Packets over Fibre Channel[EB/OL].America: IETF RFC 4338.2006-1[2013-5-3].http://www.rfceditor.org/rfc/rfc4338.txt.
[8] T11 Technical Committee.Technical Report.Fibre Channel Avionics Environment–AnonyMous Subscriber Messaging With Amendment 1 Changes[EB/OL].America: American National Standards Institute,Inc.2008-1-11 [2013-8-10].http://www.t11.org/ftp/t11/member/ fc/ae-asma1/08-013v1.pdf.
[9] CORBERT Jonathan,RUBINI Alessandro and KROAHHARTMAN Greg.Linux设备驱动程序[M].O'RELLY.第三版.2006:518-519.
XU Li(1983-),male,graduate student, engineer,majoring in networking and communication technology.
冯国仕(1981—),男,硕士研究生,工程师,主要研究方向为网络通信与技术;
FENG Guo-shi(1981-),male,graduate student,engineer,majoring in networking and communication technology.
李 璞(1981—),男,硕士研究生,工程师,主要研究方向为网络通信与技术。
LI Pu(1981-),male,graduate student,engineer,majoring in networking and communication technology.
Design and Implementation of Fabric Channel Interface Driver
XU Li,FENG Guo-shi,LI Pu
(No.30 Institute of CETC,Chengdu Sichuan 610041,China)
Fibre channel,as a high-performance fiber communication technology,is widely used in both military and commercial areas.This paper firstly describes the problems recently faced by fibre channel and the architecture of the fibre channel protocol suits.Then the function and implomentation of fabric channel interface driver is analyzed,the flexible software architecture of the interface driver proposed,and the programming keys and advantages of this architecture are also specified.Finally the tests and discussions of the driver are done.
fabric channel;interface driver;interface performance
TP393
A
1002-0802(2014)11-1343-04
10.3969/j.issn.1002-0802.2014.11.021
许 里(1983—),男,硕士研究生,工程师,主要研究方向为网络通信与技术;
2014-07-05;
2014-08-26 Received date:2014-07-05;Revised date:2014-08-26