infiniband SDP协议

http://www.dbaleet.org/about_infiniband_sdp_protocol/

在前面的文章 Infiniband可以运行哪些协议?中介绍了基于infiniband的各种协议。引入infiniband架构的目的在于解决传统以太网遇到的一系列问题,并且提供高速的互联技术。在一个数据中心,互联并非仅仅指的是数据库节点之间的互联。有时你会发现瓶颈并不在数据库,而在于中间件与数据库之间的互联。本文要将的SDP协议就是为了解决中间件与数据库连接的短板而诞生的。

SDP的全称是Sockets Direct Protocol,它是InfiniBand Trade Association (IBTA)制定的基于infiniband的一种协议,它允许用户已有的使用TCP/IP协议的程序运行在高速的infiniband之上。所以引入SDP的目的无非有两点:

第一是能够将已有的运行基于sockets的程序透明的运行在infiniband之上;

第二是充分利用infiniband的高带宽的同时保持很低的开销。

基于以上两点,SDP的整体架构图如下:

 

 

SDP 协议提供可靠的字节流、类似于TCP的流量控制双向数据传输。InfiniBand开发通过libsdp C 库使用 SDP,这个库支持应用程序的基于套接字的 SOCK_STREAM 接口。

ORACLE支持两种不同版本的SDP协议,transparent SDP和Native SDP。

transparent SDP是指在应用程序端无须任何修改就能使用的SDP协议。它的实现方式是将TCP连接转化为SDP连接, 故在应用程序层面无需任何修改,在数据库层面也只需要进行一些很简单的配置,其配置方法可以参考这篇文章。 Native SDP是Oracle Database 10gR2的新特性,是指在listener和TNS中显式指定使用protocol=sdp,在10gR2的Net Services Admin Guide文档中,有提到具体如何进行配置,这里不赘述。从以上信息可知,实际上从Oracle Database10gR2开始, Oracle支持Native SDP。如果更早的版本需要使用SDP协议,就只能使用transparent SDP。除此以外,transparent SDP和Native SDP的一个最大的区别就是: transparent SDP只支持synchronous I/O, Native SDP则支持asynchronous I/O。也就是Native SDP可以提供更好的性能,而Transparent SDP相对其性能较差,但是其优势在于无需应用程序端做任何修改,即便如此, 目前使用Transparent SDP的infiniband依然要比基于TCP/IP的以太网提供了更高的带宽/速率。

SDP在传输数据的过程中也有两种I/O模式, 即Buffer Copy(Bcopy)和Zero Copy(Zcopy)

 

 

那么到底什么是Buffer-Copy,什么是Zero-Copy,两者有什么区别呢?当然需要回顾一下操作系统中的知识。

以下以Linux操作系统为例进行说明,当然其它操作系统也是类似的。 Linux的传统I/O操作实际上是一种缓冲I/O, I/O 操作过程中产生的数据传输通常需要在缓冲区中进行多次的拷贝。

 

传统的操作系统将数据发送到网卡的过程中所有的数据都需要经过两次CPU Copy。(实际上将数据从hard driver拷贝到kernel buffer需要一次DMA copy, 将数据从socket buffer拷贝到protocol engine也需要一次DMA copy。所以这个整个过程一共需要进行四次copy操作。)

1. 先是在应用程序态开辟一段user buffer,然后将位于内核态的kernel buffer拷贝过来,这个过程是通过调用read()函数来完成的。


2.  然后再将user buffer的数据拷贝发送到网络堆栈相关的socket buffer,socket buffer是位于内核态。这个过程是通过write()函数来完成的。

每进行一次CPU Copy操作, CPU都需要为此进行一次上下文切换(context switch)。 而这些上下文操作在操作系统中的开销是比较高的,大量数据的传输必然会带来一定程度的CPU消耗。

Zero Copy则可以绕过内核态与用户态的交互,直接是内核态与内核态的拷贝。

 

 

以上图示只是Zero Copy最简单的一种情况: 将数据发送到网卡的过程中,只需要一次CPU Copy。即直接从kernel buffer拷贝到socket buffer,这个过程相比Buffer Copy,能节省两次CPU的上下文切换(context switch)。所以Zero Copy不仅能利用infiniband的介质提高带宽和传输速率的同时,降低了CPU的功耗。

目前Transparent/Native SDP支持的驱动包括:

Oracle Call Interface drivers
JDBC OCI driver
JDBC thin driver (10g的Native sdp不支持JDBC thin driver)

以上

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号