1.1 RAPIDIO高速串行协议
RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能、 低引脚数、 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放式互连技术标准。RapidIO主要应用于嵌入式系统内部互连,支持芯片到芯片、板到板间的通讯,可作为嵌入式设备的背板(Backplane)连接。
RapidIO协议由逻辑层、传输层和物理层构成。逻辑层定义了所有协议和包格式。这是对终端进行初始化和完成传送的很有必要的信息。传输层为数据包从一个终端到另一个终端通道的必要信息。物理层描述了设备之间接口协议,例如包传装置,流量控制,电特性及低级错误管理等。Rapid IO分为并行Rapid IO标准和串行Rapid IO标准,串行RapidIO是指物理层采用串行差分模拟信号传输的RapidIO标准。
RapidIO行业协会成立于2000年,其宗旨是为嵌入式系统开发可靠的、 高性能、 基于包交换的互连技术,2001 年正式发表其基本的规范。2003 年10 月,国际标准组织(ISO)和国际电工委员会(IEC)一致通过了RapidIO互连规范,即ISO/IEC DIS 18372,这使RapidIO(ISO)成为嵌入式互连技术方面得到授权的唯一标准。RapidIO 的规范发布历史如下:
2001年3月,发布RapidIO 1.1规范;
2002年6月,发布RapidIO 1.2规范;
2005年2月,发布RapidIO 1.3规范;
2007年6月,发布RapidIO 2.0规范;
2009年8月,发布RapidIO 2.1规范;
2011年5月,发布RapidIO 2.2规范。
RapidIO 1.x标准支持的信号速率为1.25GHz、2.5GHz和3.125GHz;RapidIO 2.x标准在兼容Rapid IO 1.x标准基础上,增加了支持5GHz和6.25GHz的传输速率 。
RapidIO 已有超过10 年的历史,仍然生机勃勃,它还在继续为开发人员提供高速、先进的通讯技术:可对许多集成电路、板卡、背板及计算机系统供应商提供支持,支持RapidIO 标准的厂商有:Mercury Computer Systems、Freescale Semiconductor、Lucent-Alcatel、PMC-Sierra、Texas Instruments、Tundra Semiconductor、WindRiver、AMCC、Curtiss-Wright Controls、GE Fanuc 等,也就是说世界上几乎所有的嵌入式主流厂商都已经支持RapidIO 技术,显然,RapidIO 势在必行。发展至今,开发人员有100 多种基于RapidIO 的产品可供选择,这些产品涵盖了各种开发工具、嵌入式系统、IP、软件、测试与测量设备及半导体(ASIC、DSP、FPGA)等。
1.2 什么是RDMA?
1.2.1 https://blog.youkuaiyun.com/u011459120/article/details/78469098
1.2.2 概述
RDMA是Remote Direct Memory Access的缩写,通俗的说可以看成是远程的DMA技术,为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA允许用户态的应用程序直接读取或写入远程内存,而无内核干预和内存拷贝发生。起初,只应用在高性能计算领域,最近,由于在大规模分布式系统和数据中心中网络瓶颈越来越突出,逐渐走进越来越多人的视野。
1.2.3 分类
目前,大致有三类RDMA网络,分别是Infiniband、RoCE、iWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术,支持相应的verbs接口,如图1所示。从图中不难发现,RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以了,价格也相对便宜很多。
•Infiniband,支持RDMA的新一代网络协议。 由于这是一种新的网络技术,因此需要支持该技术的NIC和交换机。
•RoCE,一个允许在以太网上执行RDMA的网络协议。 其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,支持RoCE。
•iWARP,一个允许在TCP上执行RDMA的网络协议。 IB和RoCE中存在的功能在iWARP中不受支持。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,并且支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在SW中实现,并且丧失了大部分RDMA性能优势。
图 1 RDMA网络栈
1.2.4 APIs
庆幸的是,所有上述RDMA的网络协议都可以使用相同的API(即verbs),使用标准库libverbs。
这里就不展开叙述了,感兴趣的同学可以看参考文献[4][5]。
1.2.5 总结
从上面的叙述,RDMA那么好,但是为什么没有普及呢?个人认为,有两方面原因。首先,是因为价格太贵。其次,是其缺乏像TCP/IP协议的灵活性和更高层的抽象,可进一步参考SOSP’17的论文LITE Kernel RDMA Support for Datacenter Applications。
1.3 DPDK原生TCP/IP stack架构
1.3.1 https://blog.youkuaiyun.com/bluenet13/article/details/39340635
1.3.2 dpdk介绍
dpdk是 intel 公司发布的一款数据包转发处理套件. 它运行于linux userspace。这组套件包括了linux 进程所需要的大部分组件。
但缺少一个传统的tcp/ip 协议栈。其他应用程序没办法方便的通过dpdk对外通信。本文主要介绍如果移植一个TCP/IP协议栈到dpdk。
• device: ethdev, devargs,bond,KNI,PCI,PCI IDs
• memory: memseg, memzone,mempool,malloc,memcpy
• timers: cycles, timer,alarm
• locks: atomic, rwlock,spinlock
• CPU arch: branch prediction, cache prefetch, byte order, CPU flags
• CPU multicore: interrupts, launch, lcore, per-lcore, power/freq
• layers: ethernet, IP,SCTP,TCP,UDP,frag/reass,LPM route,ACL
• QoS: metering, scheduler,RED congestion
• hashes: hash, jhash,FBK hash,CRC hash
• containers: mbuf, ring,distributor,tailq,bitmap
• packet framework:
• port: ethdev, ring, frag, reass, sched, src/sink
• table: lpm IPv4, lpm IPv6, ACL, hash, array, stub
• pipeline
• basic: approx fraction, random, key/value args, string
• debug: debug, log,warnings,errno
• misc: EAL config, common,version
1.3.3 ANS总体架构
ANS(Acceleted Network Stack)是参考freebsd,重新设计实现的dpdk原生的tcp/ip协议栈。
ANS架构如下:
Ø DPDK:各种快速包处理库,是ANS加速网络协议栈的运行环境。
Ø ANS:加速网络协议栈,包括以下模块:
ethernet:网络数据包二层处理模块。
ARP:ARP协议栈处理模块。
IPv4 Forwarding: 网络数据包三层处理模块,包括三层转发功能。
IPv4 Reassembly:网络数据包分片重组模块。
Routing:路由转发表管理模块。
ICMP:ICMP协议处理模块。
ACL:包过滤模块,通过KNI旁路控制面数据流到linux kernel。
UDP Termination:UDP协议栈处理模块。
TCP Termination:TCP协议栈处理模块。
SOCKET:是ANS和上层应用程序的接口层,和标准linux SOCKET API兼容。
配置管理:通过CLI配置Device、IP、Route、Neigh、ACL、Log;从linux kernel同步IP和route到ANS;查看IP统计。
1.4 zeroc ice
ZeroC ICE 是指ZeroC公司的ICE(Internet Communications Engine)中间件平台。
1.4.1 简介
ZeroC ICE 是指ZeroC公司的ICE(Internet Communications Engine)中间件平台。对于客户端和服务端程序的开发提供了很大的便利。
目前ICE平台中包括Ice,Ice-E,Ice Touch。
Ice为主流平台设计,包括Windows和Linux,支持广泛的语言,包括C++,Java,C#(和其他.Net的语言,例如Visual Basic),Python,Ruby,PHP和ActionScript。也包括所有的ICE服务,例如Ice Grid,IceStorm等。
Ice-E是Ice在资源受限的平台上的一个实现,支持C++和嵌入式操作系统,例如Windows CE,Linux。Ice-E本身不包含任何服务,但是可以利用在Ice上提供的各种服务。因此,通过Ice-E,移动设备也能无缝的集成到分布式系统中。
Ice Touch是为iphone和ipod touch开发的版本,包括Object-C映射,支持Iphone OS,并为MAC OS X开发图形界面应用程序提供完整的Cocoa框架的访问。 [1]