外贸营销型网站2018,网站建设与维护合同,h5怎么制作小程序,wordpress 爬虫 视频一#xff0e;什么是infiniband
InfiniBand架构是一种支持多并发链接的“转换线缆”技术#xff0c;它是新一代服务器硬件平台的I/O标准。由于它具有高带宽、低延时、 高可扩展性的特点#xff0c;它非常适用于服务器与服务器#xff08;比如复制#xff0c;分布式工作等…一什么是infiniband
InfiniBand架构是一种支持多并发链接的“转换线缆”技术它是新一代服务器硬件平台的I/O标准。由于它具有高带宽、低延时、 高可扩展性的特点它非常适用于服务器与服务器比如复制分布式工作等服务器和存储设备比如SAN和直接存储附件以及服务器和网络之间比如LAN WANs和the Internet的通信 。
二Infiniband产生的原因
随着CPU性能的飞速发展I/O系统的性能成为制约服务器性能的瓶颈。于是人们开始重新审视使用了十几年的PCI总线架构。虽然PCI总线结构把数据的传输从8位/16位一举提升到32位甚至当前的64位但是它的一些先天劣势限制了其继续发展的势头。PCI总线有如下缺陷
(1)由于采用了基于总线的共享传输模式在PCI总线上不可能同时传送两组以上的数据当一个PCI设备占用总线时其他设备只能等待
(2)随着总线频率从33MHz提高到66MHz甚至133MHzPCI-X信号线之间的相互干扰变得越来越严重在一块主板上布设多条总线的难度也就越来越大
(3)由于PCI设备采用了内存映射I/O地址的方式建立与内存的联系热添加PCI设备变成了一件非常困难的工作。目前的做法是在内存中为每一个PCI设备划出一块50M到100M的区域这段空间用户是不能使用的因此如果一块主板上支持的热插拔PCI接口越多用户损失的内存就越多
(4)PCI的总线上虽然有buffer作为数据的缓冲区但是它不具备纠错的功能如果在传输的过程中发生了数据丢失或损坏的情况控制器只能触发一个NMI中断通知操作系统在PCI总线上发生了错误 因此Intel、 Cisco、 Compaq、 EMC、 富士通等公司共同发起了infiniband架构其目的是为了取代PCI成为系统互连的新技术标准其核心就是将I/O系统从服务器主机中分离出来。
InfiniBand 采 用双队列程序提取技术,使应用程序直接将数据从适配器 送入到应用内存(称为远程直接存储器存取或RDMA), 反之依然。在TCP/IP协议中,来自网卡的数据先拷贝到 核心内存,然后再拷贝到应用存储空间,或从应用空间 将数据拷贝到核心内存,再经由网卡发送到Internet。这 种I/O操作方式,始终需要经过核心内存的转换,它不 仅增加了数据流传输路径的长度,而且大大降低了I/O 的访问速度,增加了CPU的负担。而SDP则是将来自网 卡的数据直接拷贝到用户的应用空间,从而避免了核心 内存参入。这种方式就称为零拷贝,它可以在进行大量 数据处理时,达到该协议所能达到的最大的吞吐量
三Infiniband的协议层次与网络结构 图1
Infiniband的协议采用分层结构各个层次之间相互独立下层为上层提供服务。其中,物理层定义了在线路上如何将比特信号组 成符号,然后再组成帧、 数据符号以及包之间的数据填 充等,详细说明了构建有效包的信令协议等链路层定义了数据包的格式以及数据包操作的协议,如流控、 路由选择、 编码、解码等网络层通过在数据包上添加一个40字节的全局的路由报头(Global Route Header,GRH)来进行路由的选择,对数据进行转发。在转发的过程中,路由 器仅仅进行可变的CRC校验,这样就保证了端到端的数据传输的完整性传输层再将数据包传送到某个指定 的队列偶(QueuePair,QP)中,并指示QP如何处理该数据 包以及当信息的数据净核部分大于通道的最大传输单 元MTU时,对数据进行分段和重组。 图2
Infiniband的网络拓扑结构如图2其组成单元主要分为四类
1HCAHost Channel Adapter它是连接内存控制器和TCA的桥梁
2TCA(Target Channel Adapter)它将I/O设备例如网卡、SCSI控制器的数字信号打包发送给HCA
3Infiniband link它是连接HCA和TCA的光纤InfiniBand架构允许硬件厂家以1条、4条、12条光纤3种方式连结TCA和HCA
4交换机和路由器
无论是HCA还是TCA其实质都是一个主机适配器它是一个具备一定保护功能的可编程DMADirect Memory Access直接内存存取 引擎 图3 如图3所示每个端口具有一个GUID(Globally Unique Identifier)GUID是全局唯一的类似于以太网MAC地址。运行过程中子网管理代理SMA会给端口分配一个本地标识LIDLID仅在子网内部有用。QP是infiniband的一个重要概念它是指发送队列和接收队列的组合用户调用API发送接收数据的时候实际上是将数据放入QP当中然后以轮询的方式将QP中的请求一条条的处理其模式类似于生产者-消费者模式。 图4
如图4所示图中Work queue即是QP中的send Queue或者receive QueueWQ中的请求被处理完成之后就被放到Work Completion中。
四如何使用IB verbs传送数据
Infiniband提供了VPI verbs API和RDMA_CM verbs API 这两个API集合用户使用其中的库函数就能很方便的在不同的机器之间传输数据。Infiniband建立连接的流程如下图所示 图5
其中buildcontext的流程如下 图6
连接建立完成之后就可以调用ibv_post_recv和ibv_post_send收发数据了发送和接收请求都被放在QP中后台需要调用ibv_poll_cq来逐条处理请求由于infiniband连接中一旦有一条数据发送或者接收失败其后所有的数据发送或者接收都会失败因此一旦检测到WC的状态不是成功需要立即处理此错误此时最好断开连接。
五常见错误 ibv_poll_cq处理完队列中的数据后WC会包含此次处理的全部信息包括wr_id、操作状态、错误码等等错误码包含的信息对于我们解决错误非常有用这里我就列举一下我在编写代码中遇到的错误。
1错误码为4IBV_WC_LOC_PROT_ERR 这种错误通常意味着用户对内存的操作权限不够需要检测在ibv_post_recv和ibv_post_send时scatter/gather list 中传入的内存地址与长度是否正确或者ibv_reg_mr操作是否成功。
2错误码为5IBV_WC_WR_FLUSH_ERR 在flush的时候出现错误通常是因为前一个操作出现了错误接下来的一系列操作都会出现
IBV_WC_WR_FLUSH_ERR的错误。
3错误码为13IBV_WC_RNR_RETRY_EXC_ERR 这种错误一般是因为本地post数据过快。在infiniband传输数据过程中接收端首选需要注册内存并ibv_post_recv将此内存放入receive queue中然后发送端才能发送数据如果接受端来不及完成这些操作发送端就发送数据就会出现上述错误。