来源:期刊VIP网所属分类:免费文献发布时间:2021-03-22浏览:次
摘要:为了解决双控系统间通信模块效率低、成本高的问题,提出使用非透明桥技术进行系统间数据传输。本文设计并实现了一套通信框架和中间件,在通信框架中实现对缓冲区的组织管理,在中间件中实现了流量控制以及socket通信接口。文中介绍了非透明桥技术,详细描述了通信框架和中间件的设计思路,并对框架进行了测试。测试表明,该通信框架传输比较稳定,在国产化平台中传输的最大带宽可以达到1400MB/s,相较于万兆以太网卡提高了16.67%,并且成本降低了15.91%。
关键词:国产化;双控存储;非透明桥;socket
Abstract: In order to solve the problems of low efficiency and high cost of communication modules between dual-control systems, it is proposed to use nontransparent bridge technology for data transmission between systems. A set of communication framework and middleware is designed and implemented. In the communication framework, organization and management of the buffers are realized. Flow control and socket communication interfaces are implemented in the middleware. The paper introduces the nontransparent bridge technology, details the design ideas of the communication framework and middleware and tests the framework. Tests show that the transmission of the communication framework is relatively stable, and the maximum bandwidth transmitted in the localized platform can reach 1400MB/s, which is an increase of 16.67% compared to 10 Gigabit Ethernet cards, and the cost is reduced by 15.91%.
Key words: localization; dual -control storage; Non-transparent Bridge; socke
0 引言
随着我国信息化建设的不断进步,数据量快速增长,对存储系统的性能和可靠性提出很高的要求,发展国产化双控存储系统势在必行"-2。传统的双控系统使用以太网进行系统间传输,以太网结构简单、易管理,但是带宽利用率低、延迟较高,在国产服务器上,受限于CPU频率的影响,以太网卡具有极大的性能损失。为了提高通信带宽、降低使用成本,本文提出使用PCle技术进行数据传输。PCle提供非透明桥技术(Non-transparent Bridge)用以连接两个不同的主机域B-7,解决了多主机域之间地址冲突的问题,使用NTB可以有效提高系统间数据传输的效率。然而,NTB技术仍存在以下问题:ONTB只提供了系统间内存映射的功能,缺少完善的数据传输机制;
②现有的应用绝大部分都不支持NTB接口,应用的范围很小。
综上所述,本文提出使用NTB作为双控系统间的传输通路,并进行如下工作:
①设计并实现一种高效的通信框架,提高数据传输的效率;
②在上层应用与通信框架之间抽象出中间件对通信框架进行封装,并在中间件中实现socket接口。
1非透明桥技术
非透明桥常用于连接两个独立的主机域,解决了多处理器系统中的地址域冲突问题。多处理器之间互相隔离,非透明桥一侧的主机将看不到桥另一侧完整的内存空间或1/0空间,而是将其看作一个端点,并把它映射到自己的地址空间-
1.1 通信方式
非透明桥提供了两种主机域之间通信的方式。
通过非透明桥中的特殊寄存器进行处理器间的状态信息的传递,通过地址映射进行10数据通信[
非透明桥的两侧通常含有门铃(Doorbell)寄存器和便笺(Scratchpad)寄存器。门铃寄存器用于将中断从非透明桥的一侧发送到另一侧。便笺寄存器可以从非透明桥的两侧进行访问,常被用来在两个主机域之间传递一些状态信息和控制信息,也可以作为通用的读写寄存器用来传递一些简短的消息。
非透明桥还提供地址映射的方式进行通信。每个NTB设备都会抽象出两个端点,分别是虚拟端端点(virtual side)和链路端端点(link side)。虚拟端与本地主机域相连,链路端与远程主机域相连。为了跨非透明网桥通信,链路端会将一块BAR地址空间映射到远程主机域。本地主机域通过对BAR地址空间进行读写操作将通过地址翻译功能传输到远程系统的内存上。
1.2 地址翻译
在非透明桥环境中,数据从一个内存地址空间穿越到另一个地址空间时要进行地址翻译。非透明桥链路端基地址寄存器中包含一个setup寄存器,用来定义地址翻译窗口的大小并分配地址翻译寄存器。在地址翻译寄存器中定义了一个掩码,该掩码将地址分为高位基本字段和低位偏移字段。然后,将地址基址寄存器位替换为相应的地址转换寄存器位,即可得到正确的内存地址。如图1所示。非透明桥技术的使用要借助PCle交换机
(swith),PCle Switch具有上行端口和下行端口,可以扩展系统中的PCle通道数。上行端口连接主设备,下行端口连接端节点设备或者通过NTB连接其他主机域11,如图2所示。经过大量调研发现,Pk公司的Px8749型号switch产品支持NTB技术,每个NTB端口拥有4条PCle链路。因此本文基于Pk8749型号的Switch进行开发。
本文设计的通信框架还使用了直接内存访问
(DMA)技术,DMA有效地解决了在进行数据交换时CPU为适应外部设备的工作频率而花费大量的周期等待数据与中断导致CPU在获取数据过程中的低效率的问题。使用DMA技术可以有效减轻CPU的压力,间接提升CPU的工作处理能力[12通信模块架构
非透明桥技术提供了两块可以在双系统间共享的地址空间,实现了基本的通信功能。本文提出的通信模块就是基于非透明桥的内存映射,在其之上作出如下工作:
①实现非透明桥的初始化工作,设置合理的地址空间大小;
②设计一个通信框架对映射出的内存进行组织管理,提供针对内存空间的快速访问机制,提高内存空间的利用率进而提高通信的效率;
③在应用层与通信框架之间封装一层中间件,用来对通信框架进行完善,实现流量控制,保证模块使用的安全性,并对上层应用提供socket通信接口,具体如图3所示。
2.1 非透明桥的初始化
非透明桥的初始化工作包括寄存器的配置、通路的建立以及内存的映射三个部分。要使用PCle Switch中的NTB功能,必须配置swich基地址寄存器中的0x360-0x364位,使能NT端口,并分配下行端口号(本型号产品中对外端口号为8和9),NT设备中的每个端点都有一套基地址寄存器。使用时要配置链路端的OxE8 ~OxEC位,使能BAR2地址空间并设置BAR2类型和大小。初始化时,在本地申请一块物理内存并将内存的起始地址和大小通过便笺寄存器发送给远程系统,远程系统将获取到的内存信息写入链路端的地址翻译寄存器中,反之亦然。最后还要向NT端口分配DMA通路以实现DMA的传输功能。
2.2通信框架
非透明桥初始化完成后即实现了双控系统中内存映射的功能,本地系统向本地申请的物理内存中写入数据即可通过地址翻译功能传输到远程系统。但是这只是基本的传输通道的实现,想要得到一条高效快速的数据通路,还需要一个高效的通信框架保证数据传输效率。
本文设计一套通信框架,将BAR地址空间作为数据的发送缓冲区,本地申请的物理内存作为数据接收缓冲区,这种设计可以保证当设备出现突发故障时数据不会丢失。为了提高数据传输的效率,防止缓冲区溢出,将两块内存区域以数组的形式组织成环形队列。在地址空间的最前方划分两块 4 字节大小的内存区域用来维护两个偏移量: 入口偏移和出口偏移。入口偏移是指下一次入队列时的位置,出口偏移是指下一次出队列时的位置。环形队列中单个元素以结构体nt-data的形式进行划分,每一个nt_data就是一个传输时的数据包,如图4所示。使用这种设计可以有效提高内存空间的利用率、队列读写和查询的效率,防止内存溢出等错误发生,具体使用规则如下:
①当入口偏移和出口偏移的值相同时,表示队列为空,此时数据读取操作阻塞,直到有新的数据进入队列:
②当出口偏移比入口偏移小并相差1时,表示队列已满,此时数据写入操作阻塞,直到有数据被取出:
③写入数据时,直接将元素添加到入口偏移指向的位置,然后将入口偏移加1,如果超出队列长度则从0开始:
④读取数据时,直接读取出口偏移指向的位置存放的数据,然后将出口偏移加1,如果超出队列长度则从0开始。
考虑到要实现socket通信接口,从底层向上层传输时,为了提高传输效率,防止IP层对数据进行分片,单个nt_data包大小应该不超过IP层的MTU大小1500字节。从上层向底层传输时,为了减少数据分片,同时尽量避免内存浪费,单个nt_data的大小应该在MTU的1/3-1/2之间。综合考虑,将单个ntdata包大小设为750字节。这样可以保证数据分片至多进行一次,同时内存浪费现象不会过于严重。
ntdata数据包中,包含一个2字节的包头以及748字节的数据存放区,如图5所示。包头前两位是标志位,首位为1表示数据进行过分片,为0表示没有经过分片。第二位为0表示此包为最后分片,为1表示为首分片。其余30位记录最后分片在队列中的位置。在读取的时候只会读取首分片,根据首分片中记录的最后分片的位置主动发起一次读取请求,获得完整的数据。
2.3中间件
尽管设计了一个通信框架对数据传输进行约束,提高了通信的效率,但是该框架仍有很大的局限性。首先框架中缺少流量控制的功能,当读写速率有差异时很容易造成缓冲区溢出导致数据丢失。其次框架不具有通用性,现阶段所有的应用都不支持对此框架接口的调用。因此本文设计一层中间件对通信框架的接口进行封装,实现流量控制。考虑到大部分应用都支持网络通信,于是在中间件中实现socket通信接口。
为了防止缓冲区溢出,发送数据时,首先检查发送缓冲队列,如果队列剩余元素个数小于要发送的包的个数,那么发送函数会被阻塞,关闭上层的发送队列,通知上层网络协议栈停止发送数据,直到缓冲区中的数据被读取,释放出足够的空间才唤醒发送队列和发送函数继续写入数据。
网络系统基于socket机制,由内核中的网络子系统驱动,负责接收和发送网络数据。因此实现socket机制的一种方法就是实现国产化平台下的网络驱动。网络驱动使用net-device结构体描述一个具体的网络设备的信息,实现不同硬件的统[13-3],系统和驱动程序之间定义有专门的数据结构(sk-buff)进行数据的传递。因此只需要在系统中初始化并注册net_device,实现其收发函数即可。发送数据时,通过发送函数ndo-start-mit接收上层以sk-uff形式传来的数据包,对其进行解析,根据数据长度进行分片处理,然后使用DMA的方式将处理后的nt-data包搬运到缓冲队列中。
读取数据时,使用轮询的方式读取缓冲队列,根据nt_data包中分片情况将数据恢复成sk_buff的形式,然后调用netifx函数将数据包发送给上层应用。
3实验测试
本文设计并实现的通信框架以及中间件最终以系统中网络设备的形式呈现,系统可以对此设备设置IP地址以及激活等操作,上层应用可以通过此网络设备实现非透明桥传输的调用。为了验证通信框架和中间件的正确性和稳定性,将实验测试分为功能性测试、可靠性测试和性能测试。实验环境为两台国产飞腾服务器+麒麟操作系统+Plx8749型号PCle Switch,并使用两块intel x520型号的万兆以太网卡作性能测试的对比。
3.1功能性测试
系统部署成功后,测试本文实现的网络设备是否与正常网络设备具有同样的功能。通过ifconfig命令查看系统中的网络设备,可以看到一块特殊的网卡。然后使用ifconfig命令对其设置IP地址并激活。经测试,此网络设备实现了与正常网络设备相同的功能,支持设置IP以及激活等操作。
3.2可靠性测试
将两块网卡的IP地址分别为192.168.137.17和192.168.137.18,使用ping命令以及iperf网络测试工具进行长时间的稳定性测试。测试结果表明,在超过1小时的长时间ping包以及ipert测试中,网络连接十分稳定,没有出现连接断开或者丢包的现象。
3.3性能测试
使用ipef网络测试工具对本文实现的网卡以及intel x520型号的万兆以太网卡进行性能测试。
测试时,调整iperf参数缓冲区大小以及NT缓冲区大小为8kB.16kB-2MB,观察带宽随缓冲区大小变化的规律,对比两者的带宽性能,测试结果如图6所示。
图6中可以看到当缓冲区大小达到32kB时,万兆以太网卡的带宽达到峰值1200MB/s左右。而NT网卡在缓冲区大小为1MB时达到峰值1400MB/s左右,相较于万兆网卡,最大带宽提高了16.67%。
4结束语
在国产化双控存储系统中,网络通信模块的效率低下、成本高昂一直是非常严重的问题。本文提出使用PCle互联网路中的非透明桥技术实现双控系统中的数据传输功能,设计并实现了一套通信框架,提高系统间通信的效率,一个中间件,提供通用的socket接口,提高了框架应用的广泛性。最后文章对模块的稳定性和性能进行了测试。测试结果表明,使用本文设计的通信模块在国产化双控存储系统中数据传输的带宽超过了万兆以太网卡16.67%,同时根据网络上的报价显示成本降低了15.91%。
参考文献:
[1]李瑞东,双控存储系统的设计与实现[D].济南:山东大学,2017.
[2]姚远,双控制器磁盘阵列中PCL-e同步通道的优化技术研究[D].武汉:华中科技大学,2012.
[3]祝树生,解春雷,仇公望,等.以太网、PCle和Rapid 10高速总线比较分析[].电子测试,2016(11):100-102.
[4]王聪,王彬,薛洁,等,基于PCle总线协议的设备驱动开发UJ].信息技术,2013(3):32-35.
[5]陈晓磊,董延军.CPCI总线在某数据处理机中的应用D].计算机光盘软件与应用,2014(10):69-72.
[6]代琛,傅华明,基于PCI Express技术实现智能适配器D].网络安全技术与应用,2007(1):64-65.
[7]Shim C,Cha K H,Choi M.Design and implementation of initial OpenSHMEM on PCle NTB hased cloud computing[J].Cluster Computing,2019,22(1):1815-1826.
[8]王乐,马春江,冯晓东,等.PCItoPCI非透明桥的设计和应用D].微电子学与计算机,2007(7):160-162.
[9]李才华.PCIExpress非透明桥在智能系统中的应用设计D].电子元器件应用,2009(8):64-66.
[10]徐健,张建泉,张健,基于PCIE非透明桥的嵌入式异构平台设计t[].微电子学与计算机,2018(1):26-30.
[11]郑桥,韩力,邢同鹤,等·基于PCle Switch的存储阵列D].电子设计工程,2019(14):126-129.
[12]柴磊·基于PCle总线的高速数据传输技术研究[D].西安:西安电子科技大学,2018.
[13]韩梦江基于PCIE总线的加密网卡驱动及应用程序设计[D].哈尔滨:黑龙江大学,2017.
[14]项涛,基于EP9315处理器的网卡驱动设计D].信息与电脑:理论版,2018(11):89-90.
[15]张霖,周维芹,张伟功.UM-BUS总线网卡的驱动程序设计与实现[].电子技术应用,2020,46(5):83-87.
期刊VIP网,您身边的高端学术顾问
文章名称: 非透明桥在国产化平台上的应用
文章地址: http://www.qikanvip.com/mianfeiwx/56596.html
* 填写需求信息,或选择平台现有SCI/SSCI选题(如下)。