一种节点之间的数据传输系统和装置及方法

文档序号:6613860阅读:160来源:国知局
专利名称:一种节点之间的数据传输系统和装置及方法
技术领域
本发明涉及计算机网络通信技术,特别涉及在非一致内存访问(Non Uniform Memory Access Architecture, NUMA)平台中节点之间数据传输的系 统、装置和方法。
背景技术
现有技术中,在非一致内存访问(冊MA)平台上的各个多核处理器或者多 个处理器上运行的操作系统之间,通常有两种数据传输方式 一种是通过共享 内存,采用内存拷贝的方式来实现数据传输;另一种是通过消息传递的方式, 采用基于通信硬件的通信方式传输数据。目前最常用的是采用消息传递的方式,它是基于通信硬件(比如硬件网卡) 来传输数据的。这种通信方式的数据传输过程为发送方将待传送的消息经过 直接内存存取(Direct Memory Access, DMA)从内存拷贝到硬件网卡缓冲区, 再经过通信硬件网络传输到接收方的硬件网卡缓冲区,再由接收方从接收方硬 件缓冲区将消息拷贝到内存。可见,上述传统的消息传递方式传输数据的一个 不足是通信过程繁琐。同时,由于传统的消息传递方式在传输数据时系统节点要访问慢速的外部 总线(如PCI总线上的硬件网卡),使得通信速度较慢。现有技术的另一方面 不足是,通信数据经过基于硬件的通信网络的传输,其可靠性较低。发明内容本发明的目的是克服现有技术在非一致内存访问平台上的各节点之间以 消息传递方式传输数据必须通过硬件网卡,从而导致传输速度较慢的不足,提 供在非一致内存访问平台中的节点之间以消息传递方式进行数据传输,并且传 输速度快的数据传输系统和装置及方法。为了达到上述目的,本发明采取如下技术方案
一种节点之间的数据传输系统,用于基于非一致内存访问平台上的至少两 个节点之间数据传输,所述节点包括至少一个处理器核和/或至少一个处理器、 操作系统和操作系统中的协议栈;所述节点还包括与所述协议栈连接的数据传 输装置;所述数据传输装置包括用于在内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述 共享通信缓冲区的位置和大小公告给其它节点的共享通信缓冲区分配模块;用于节点之间通过共享通信缓冲区进行消息传递的底层通信模块,所述底层通信模块控制所述共享通信缓冲区和所述共享通信缓冲区控制区;和 将所述底层通信模块模拟为网卡并与节点的协议栈连接的虚拟网卡。 优选地,所述公告包括通过在一个节点所管理的内存中建立一个公告区,所有所述节点将所述共享通信缓冲区的位置和大小在所述公告区公告。优选地,所有所述节点的所述共享通信缓冲区都集中在其中一个节点上进行管理。优选地,所有所述节点的所述共享通信缓冲区分布在各自节点上进行管理。优选地,所述协议栈是TCP/IP协议栈。 优选地,所述底层通信模块包括共享通信缓冲区管理模块,用于在所述共享通信缓冲区中为其他节点分别 分配一个缓冲部分,并将所述缓冲部分的位置和大小进行公告,还用于监控所述共享通信缓冲区的状态并将其状态记录在所述共享通信缓冲区控制区中; 端口地址映射模块,用于将消息传输的接收方节点号映射到所述共享通信缓冲区的所述缓冲部分并在所述缓冲部分中寻找消息传输位置;消息传递模块,用于在传输消息时从所述共享通信缓冲区的缓冲部分中完成消息发送和消息接收。优选地,共享通信缓冲区管理模块采用如下流控方法当共享通信缓冲区的相应缓冲部分满,消息发送请求失败时,共享通信缓冲区管理模块将阻止继续产生消息传输事件,直到检査到共享通信缓冲区的相应缓冲部分是不满才重新启动消息传输。优选地,所述消息传递模块在每个消息发送后立即进行完成操作。 优选地,所述消息传递模块使用流水的消息复制方法,使多个消息的发送
和接收操作并行进行。优选地,所述消息传递模块在发送消息时将消息传递到接收方的共享通信 缓冲区中,在接收消息时将消息从接收方的共享通信缓冲区中取出。优选地,所述消息传递模块在发送消息时将消息传递到发送方的共享通信 缓冲区中,在接收消息时将消息从发送方的共享通信缓冲区中取出。优选地,所述底层通信模块还包括消息探询模块,用于探询所述共享通信 缓冲区中是否有新的消息到达,如果有新消息到达则通知协议栈接收消息。优选地,所述消息探询模块周期性地逐一探询其他节点的所述共享通信缓 冲区控制区,确定在给本节点分配的所述共享通信缓冲区的缓冲部分中是否有 新的消息到达;当有新消息到达时,消息探询模块触发一个软中断,通知协议 栈接收消息,当没有新消息到达时,消息探询模块等待一个周期,再次执行探 询操作。优选地,所述周期设为一次时钟中断的时间周期。优选地,所述节点设置为在所述软中断期间,所述消息探询模块执行一 次探询操作。优选地,所述虚拟网卡包括设备控制模块,用于对虚拟网卡设备初始化,并向节点注册虚拟网卡的打 开和关闭;消息分析模块,用于对需要发送的消息分析发送和接收地址;消息发送模块,用于根据所述接收地址,传递给所述底层通信模块;消息接收模块,用于将所述底层通信模块接收到的消息,封装为系统内核 的数据包,传递给所述协议栈。为了实现发明目的,本发明还提供一种数据传输装置,用于基于非一致内 存访问平台上的至少两个节点之间传输数据,该装置与所述节点的协议栈连 接;其特征在于,包括用于在内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述 共享通信缓冲区的位置和大小公告给其它节点的共享通信缓冲区分配模块;用于节点之间通过共享通信缓冲区进行消息传递的底层通信模块,所述底 层通信模块控制所述共享通信缓冲区和所述共享通信缓冲区控制区;和将所述底层通信模块模拟为网卡并与节点的协议栈连接的虚拟网卡。 优选地,所述公告包括通过在一个节点所管理的内存中建立一个公告区将 所述共享通信缓冲区的位置和大小在所述公告区公告。优选地,所有所述节点的所述共享通信缓冲区分布在各自节点上进行管理。优选地,所述协议栈是TCP/IP协议栈。 优选地,所述底层通信模块包括共享通信缓冲区管理模块,用于在所述共享通信缓冲区中为其他节点分别 分配一个缓冲部分,并将所述缓冲部分的位置和大小进行公告,还用于监控所 述共享通信缓冲区的状态并将其状态记录在所述共享通信缓冲区控制区中;端口地址映射模块,用于将消息传输的接收方节点号映射到所述共享通信缓冲区的所述缓冲部分并在所述缓冲部分中寻找消息传输位置;消息传递模块,用于在传输消息时从所述共享通信缓冲区的缓冲部分中完成消息发送和消息接收。优选地,共享通信缓冲区管理模块采用如下流控方法当共享通信缓冲区的相应缓冲部分满,消息发送请求失败时,共享通信缓冲区管理模块将阻止继 续产生消息传输事件,直到检查到共享通信缓冲区的相应缓冲部分是不满才重 新启动消息传输。优选地,所述消息传递模块在每个消息发送后立即进行完成操作。优选地,所述消息传递模块使用流水的消息复制方法,使多个消息的发送 和接收操作并行进行。优选地,所述消息传递模块在发送消息时将消息传递到接收方的共享通信 缓冲区中,在接收消息时将消息从接收方的共享通信缓冲区中取出。优选地,所述消息传递模块在发送消息时将消息传递到发送方的共享通信 缓冲区中,在接收消息时将消息从发送方的共享通信缓冲区中取出。优选地,所述底层通信模块还包括消息探询模块,用于探询所述共享通信 缓冲区中是否有新的消息到达,如果有新消息到达则通知协议栈接收消息。优选地,所述消息探询模块周期性地逐一探询其他节点的所述共享通信缓 冲区控制区,确定在给本节点分配的所述共享通信缓冲区的缓冲部分中是否有新的消息到达;当有新消息到达时,消息探询模块触发一个软中断,通知协议 栈接收消息,当没有新消息到达时,消息探询模块等待一个周期,再次执行探
询操作。优选地,所述周期设为一次时钟中断的时间周期。 优选地,所述虚拟网卡包括设备控制模块,用于对虚拟网卡设备初始化,并向节点注册虚拟网卡的打 开和关闭;消息分析模块,用于对需要发送的消息分析发送和接收地址; 消息发送模块,用于根据所述接收地址,传递给所述底层通信模块; 消息接收模块,用于将所述底层通信模块接收到的消息,封装为系统内核的数据包,传递给所述协议栈。为了实现发明目的,本发明还提供一种节点之间的数据传输方法,用于非一致内存访问平台上的多个节点之间传输数据,每个所述节点中包括至少一个处理器核和/或至少一个处理器以及其上运行的操作系统,包括如下步骤步骤Sl,在所管理的内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述共享通信缓冲区的位置和大小公告给其它节点;步骤S2,当发送方发送消息时,通过虚拟网卡将消息传送到共享通信缓冲区;步骤S3,当接收方接收消息时,将消息从所述共享通信缓冲区中取出并 将取出的消息通过虚拟网卡传送给操作系统的协议栈。优选地,在所述步骤S1中,所述公告包括通过在内存中建立一个公告区, 所有所述节点将所述共享通信缓冲区的位置和大小在所述公告区公告。优选地,所述步骤S1中的所有所述节点的所述共享通信缓冲区都集中在 其中一个节点上进行管理。优选地,所述歩骤S1中的所有所述节点的所述共享通信缓冲区分布在各 自节点上进行管理。优选地,步骤Sl中还包括在所述共享通信缓冲区中分别为其他节点分配 一个缓冲部分,并将所述缓冲部分的位置和大小进行公告。优选地,所述步骤S2中包括流控方法当所述共享通信缓冲区的相应缓 冲部分满,系统的消息发送请求失败时,将阻止协议栈继续产生消息传输事件, 直到检査到共享通信缓冲区的相应缓冲部分不满才重新启动消息传输。优选地,步骤S2中,在每个消息发送后立即进行相应的完成操作。
优选地,步骤S2中发送方采用流水方法发送消息。 优选地,所述协议栈为TCP/IP协议栈。优选地,步骤S3中还包括探询步骤探询所述共享通信缓冲区中是否有 新的消息到达,如果有新消息到达则通知接收方协议栈接收消息。优选地,所述探询是周期地逐一探询其它节点的共享通信缓冲区中是否有 新的消息到达,如果有新消息到达则通过发起一个软中断来通知接收方协议栈 接收消息通知接收方协议栈接收消息。优选地,所述周期为一次时钟中断的时间周期。优选地,在所述软中断期间,所述探询步骤只执行一次探询操作。优选地,在步骤S3中接收方采用流水方法接收消息。优选地,歩骤S2中发送方发送消息时将消息传递到接收方的共享通信缓 冲区中;步骤S3中接收方在接收消息时将消息从接收方的共享通信缓冲区中 取出。优选地,步骤S2中发送方在发送消息时将消息传递到发送方的共享通信 缓冲区中,步骤S3中接收方在接收消息时将消息从发送方的共享通信缓冲区 中取出。与现有技术相比,本发明产生了如下的有益效果(1) 本发明的数据传输系统和装置,实现于操作系统的协议栈下层,对 操作系统协议栈透明,保证了对用户程序的二进制级兼容。(2) 本发明具有高性能的特点。通过基于系统总线级的采用消息传递方式的数据传输系统及其多种优化方法,本发明为应用程序提供了低延迟高带宽 的传输性能。(3) 本发明具有良好的可移植性。由于本发明的数据传输装置向协议栈 提供标准的网络接口,同时仅使用内存操作完成所有功能,因此具有良好的可 移植性。(4) 本发明具有较高的安全性。本发明基于系统总线级的数据传输系统 和装置,重要的数据结构和操作都需要进入操作系统完成,保证了系统的安全 性。(5) 本发明不需要特殊的硬件支持,比如不需要通信协处理器。在本发 明的一个实施方式中可以在通用的多核心非一致内存访问平台上,透明、高效、
安全的支持TCP/IP协议。


图1为本发明一个实施例的数据传输系统结构示意图;图2为本发明一个实施例中的底层通信模块102的结构示意图;图3为本发明一个实施例中的虚拟网卡103的结构示意图;图4为本发明一个实施例中的集中式通信缓冲区组织方式的示意图;图5为本发明一个实施例中的分布式通信缓冲区组织方式的示意图;图6为本发明一个实施例中的消息复制流水方法示意图;图7为共享通信缓冲区位于消息接收方时消息传递的访存过程示意图;图8为共享通信缓冲区位于消息发送方时消息传递的访存过程示意图;图9为本发明一个实施例中的数据传输方法流程图;图10为本发明的通信过程示意图。
具体实施方式
下面结合附图与具体实施方式
对本发明作进一歩详细描述。 在非一致内存访问(NUMA)平台环境下,各个操作系统节点之间可以共享 物理内存, 一个操作系统节点管理的处理器和/或处理器核可以访问其他操作 系统节点的物理内存区域。本发明所述的操作系统节点,或者简称为节点,为 在非一致内存访问平台环境下包括至少一个处理器核和/或至少一个处理器, 以及在处理器核和/或处理器上运行的操作系统。作为一种具体实施方式
,本发明实施例以在各节点上运行Linux操作系统 和数据传输支持TCP/IP协议为例来详细描述本发明,但应当说明的是,本发 明不限于此,其也可以应用在其它操作系统以及其它的数据传输协议上。如图l、 2所示, 一种节点之间的数据传输系统,用于基于非一致内存访 问平台上的至少两个节点之间数据传输,图中用标号l、 2表示出其中的两个 节点,每个所述节点中包括操作系统和操作系统中的TCP/IP协议栈11以及在 操作系统上运行的TCP/IP应用程序。所述TCP/IP协议栈11用于向操作系统提供TCP/IP协议的支持; 所述节点还包括与所述TCP/IP协议栈11连接的数据传输装置100;所述
数据传输装置100包括用于在内存中划分出共享通信缓冲区12及共享通信缓冲区控制区13,并 将所述共享通信缓冲区12的位置和大小公告给其它节点的共享通信缓冲区分 配模块101;共享缓冲区分配模块101在节点的操作系统启动时就被加载,从 而完成划分共享通信缓冲区12及共享通信缓冲区控制区13,并将所述共享通 信缓冲区12的位置和大小公告给其它节点的功能;用于节点之间通过共享通信缓冲区12进行消息传递的底层通信模块102;所述底层通信模块102控制用于存放消息的所述共享通信缓冲区12和用于存储所述共享通信缓冲区的控制信息和状态的共享通信缓冲区控制区13;和将所述底层通信模块102模拟为网卡并与节点的协议栈11连接的虚拟网 卡103。本发明中,数据是采用消息传递的方式来传输的,所以所述消息即为传输 的数据。较佳地,所述公告包括通过在一个节点所管理的内存中建立一个公告区, 所有所述节点将所述共享通信缓冲区12的位置和大小在所述公告区公告。例 如,在其中一个节点所管理的内存中建立一个公告区,其它节点都将自身的所 述共享通信缓冲区12位置和大小在该公告区公告并在该公告区査询其它节点 的共享通信缓冲区12的位置和大小。较佳地,作为一种可实施的方式,各节点的所述共享通信缓冲区12是集 中式共享通信缓冲区。如图4所示是集中式共享通信缓冲区12示意图,这种 方式在其中一个通信节点(比如通信节点l)的本地内存中划分出一块较大的 物理内存用做共享通信缓冲区12,并为每一个节点1、 2……N分别分配一个 缓冲部分l、 2……N,所有节点间的通信都使用该缓冲区的一部分。这种方式 的好处是缓冲区的管理比较简单,实现容易。较佳地,作为另一种可实施的方式,各节点的所述共享通信缓冲区12是 分布式共享通信缓冲区。如图5所示是分布式共享通信缓冲区示意图,其中多 个通信节点1-N就是前面介绍的节点,每个节点上都包括共享通信缓冲区12, 所有的共享通信缓冲区12都连接到内存总线。每个共享通信缓冲区12的大小 可以设置相同也可以不同。在分布式共享通信缓冲区的组织方式下,任意的两 个通信节点之间通信时,必然仅有一次本地内存访问,而另一次内存访问则为
速度较慢的远程内存访问,所以系统总体的访存速度快于集中式共享通信缓冲 区;同时这种方式的可扩展性也比较好,共享通信缓冲区的内存开销平均的分 布到各个通信节点中,每个通信节点都仅需要占用较小的内存。较佳地,参照图2,针对分布式共享通信缓冲区的组织方式来详细说明本发明的底层通信模块102。底层通信模块102控制用于存放消息的所述共享通 信缓冲区12和用于存储所述共享通信缓冲区的控制信息和状态的共享通信缓冲区控制区13;所述控制信息包括传输消息的位置等,传输消息的位置在数据结构中即数据指针;所述状态包括所述共享缓冲区12的相应部分是空或满 等状态。参照图2,所述底层通信模块102包括共享通信缓冲区管理模块201,用于在所述共享通信缓冲区12中分别为 其他节点分配一个缓冲部分,并将所述缓冲部分的位置和大小进行公告;共享 通信缓冲区管理模块201还在操作系统运行中监控所述共享通信缓冲区12的状态并将其状态记录在所述共享通信缓冲区控制区13中;该状态包括所述共享通信缓冲区12的相应部分即所述缓冲部分是空或满等状态。端口地址映射模块202,用于将消息传输的接收方节点号映射到所述共享 通信缓冲区12的所述接收方节点对应的缓冲部分,并在所述缓冲部分中寻找 消息传输位置。例如发送方的节点号为A,接收方的节点号为B,发送方在自 身的共享通信缓冲区中为节点B分配的缓冲部分的内存地址为address—B,则 该端口地址映射模块202能够在节点需要发送消息时将接收方节点号B映射到 内存地址address—B,并在该缓冲部分中找到数据指针,即可以用于传输消息 的位置。节点号是指用户为了识别不同节点而编的号,并使每个节点能够获得 通信另一方的节点号,这可由操作系统中的信息获得。消息传递模块203,采用处理器内存拷贝功能从所述共享通信缓冲区12 的缓冲部分中完成消息发送和从发送方所述共享通信缓冲区12的缓冲部分中 完成消息接收。例如所述消息传递模块203根据端口地址映射模块202映射的 内存地址和找到的消息传输位置,将需要发送的消息拷贝到相应的缓冲部分 中,等待接收方接收消息;消息传递模块203接收消息时,则从发送方所述共 享通信缓冲区12的缓冲部分中将消息拷贝出来。较佳地,共享通信缓冲区管理模块201实现一个简单的流控方法,g卩当 共享通信缓冲区12的相应缓冲部分满,消息发送请求失败时,共享通信缓冲 区管理模块201将阻止继续产生消息传输事件,直到检查到共享通信缓冲区 12的相应缓冲部分是可用(即共享通信缓冲区12的相应缓冲部分不满)才重新启动消息传输。例如,当共享通信缓冲区12中对应于一个节点的缓冲部分 满,消息发送请求失败时,共享通信缓冲区管理模块201将通知虚拟网卡103 接口消息发送失败,并使用接口,如Linux接口 netif_stop—queue函数,阻 止虚拟网卡13继续产生消息传输事件,在等待一个预定的超时时间(比如可 以预定为一次时钟中断的时间周期)后,共享通信缓冲区管理模块201重新检 査共享通信缓冲区12是否可用(即共享通信缓冲区12的相应缓冲部分不满), 如果可用,则调用netif—wake—queue重新启动消息传输;如果仍然不可用, 则继续等待下一次超时。通过这种方式,可以避免消息发送方在共享通信缓冲 区的缓冲部分满的情况下不断发送消息,使得大量消息被丢弃重发。较佳地,在消息传递模块203中,在每个消息发送后进行相应的完成操作, 而对于消息发送失败的情况则交由上层核心TCP协议栈11的重发机制实现。 也就是说,本发明认为在消息传递模块203中发送消息一定是正常完成的,所 以并不等待完成事件就进行相应的完成操作,而对于消息发送失败的情况则交 由上层核心TCP协议栈11的重发机制实现。由于消息发送失败的概率非常小, 所以这种开销是比较小的。然而在现有技术中,当消息发送完成后,传统的网 络硬件驱动程序需要立刻进行相应的处理,释放发送缓冲区,更新设备状态, 准备发送下一个消息,这样才能使得消息的发送尽量的连续进行。可见,现有 技术会使得操作系统被中断的次数大幅增加,而本发明采用简单方式使得消息 发送连续进行,是具有优越性的。较佳地,所述消息传递模块203采用流水方法来发送消息和接收消息。在 全局共享物理内存的条件下,通信双方都可以访问到对方的物理内存。本发明 针对TCP/IP协议的通信特点——数据包大小较小,采用了基于共享通信缓冲 区的通信方式,提出了一种基于消息流水的免握手数据通信方法,利用通信消 息的发送方和接收方异步操作的特点,使用流水的消息复制技术。如图6所示, 采用流水方法发送和接收消息是指,发送方在发送完一个消息后接着发送下一 个消息,接收方在接收一个消息后接着接收下一个消息,这样发送和接收操作 分别是连续进行的并且是并行进行,如图6中所示连续发送消息1、发送消息 2……,连续接收消息l、接收消息2……。这种流水方法的消息发送和消息接
收方式加快了数据传输的速度。由于TCP/IP协议会将上层应用的大消息分片为最大传输单元(Maximum Transmission Unit, MTU)大小,所以在底层通信的过程中,需传递的消息大小 有限,同时,TCP协议中每个消息都有一个确认回复消息,所以通信网络中小 消息数量较多,小消息的延迟性能是底层网络更重要的性能指标。本发明通过 基于消息流水的免握手数据通信方法,使底层通信模块102在保持了底层较低 的通信延迟的情况下,底层通信带宽基本接近了基于握手协商的通信方式,取 得了较好的效果。较佳地,作为一种可实施方式,所述消息传递模块203在发送消息时将消 息数据传递到接收方的共享通信缓冲区12中,在接收消息时将消息从接收方 的共享通信缓冲区12中取出。这种方式可以称为接收方缓冲方法。较佳地,作为另一种可实施方式,所述消息传递模块203在发送消息时将 消息数据传递到发送方的共享通信缓冲区12中,在接收消息时将消息从发送 方的共享通信缓冲区12中取出。这种方式可以称为发送方缓冲方法。下面介绍发送方缓冲方法的优点在底层通信模块102中,访存操作是系 统最频繁的操作之一,而系统的内存为非一致内存访问(NUMA)结构,访存 速度并不均一,所以应该组织共享通信缓冲区以减少访存次数。下面仅介绍在 AMD x86—64的cc-NUMA平台上进行数据传输时的共享通信缓冲区位置问 题。在AMDx86一64的带有高速缓存一致性的非一致内存访问(cc-NUMA)平台 上实现的基于监听的高速缓存(Cache) —致性协议——M0ESI协议,为了维 护内存一致性,在任何一个处理器(CPU)要高速缓存的物理内存时,都需要 首先获得该内存最近的正确的复本。而这个复本有可能在主存中,也有可能在 别的处理器的高速缓存中。这种情况下,当一个处理器发生了读高速缓存不命 中或写高速缓存不命中时,它会在高速缓存总线上探査是否有别的处理器高速 缓存了正确的消息。如果有别的处理器的高速缓存中的消息是最新并且正确 的,它会通过高速缓存总线复制该复本到本地高速缓存中使用,如果不存在正 确的高速缓存数据,则再通过存储器总线从主存中复制该数据到本地高速缓存 中使用。从这个过程中可以明显看出,如果其他处理器中高速缓存命中,那么 读写数据的速度会明显快于主存储器中的读写操作。在采用分布式共享通信缓
冲区时,共享通信缓冲区位于发送方还是接收方时,共享通信缓冲区的访存模 式是不同的。分别讨论如下当选择使用位于消息接收方的共享通信缓冲区时,如下图7所示, 一次通 信过程中消息传递的访存操作为① 本地高速缓存命中读② 远地高速缓存不命中写③ 本地高速缓存不命中读 本地高速缓存不命中写当选择使用位于消息发送方的共享通信缓冲区时,如下图8所示, 一次通 信过程中消息传递的访存操作为① 本地高速缓存命中读② 本地高速缓存不命中写③ 远地高速缓存不命中读④ 本地高速缓存不命中写。分析这4步操作,两种共享通信缓冲区组织方式下,步骤①、 的速度相 同。步骤②由于系统为NUMA结构,读写本地内存的速度要快于读写远地内存 的速度,所以共享通信缓冲区位于发送方使得步骤②速度更快。对于歩骤③, 原本应与步骤②类似,使得两种共享通信缓冲区组织方式的性能基本相同,但 根据上文讨论的AMD x86_64高速缓存一致性协议的特性,远地高速缓存不命 中后并没有真正从远地内存中读取,而是从远地处理器的高速缓存中读取,所 以速度基本相同。这样综合考虑,共享通信缓冲区位于发送方的缓冲区策略的 整体通信性能更优。根据上面的分析,采用基于发送方缓冲的分布式共享通信缓冲区组织方 式,并且在发送消息时是将消息拷贝到发送方本地节点的共享通信缓冲区中, 再由接收方处理器从上述共享通信缓冲区取走。即通过将专有共享的通信缓冲 区分布到各个通信节点上,保证了系统的访存速度和可扩展性,同时基于发送 方缓存的缓存策略,更进一步优化了通信关键路径上的访存性能。较佳地,所述底层通信模块102还包括消息探询模块204,用于探询其它 节点的所述共享通信缓冲区控制区13,确定在给本节点分配的缓冲部分中是 否有新的消息到达,如果有新消息到达则通知协议栈11接收消息。
较佳地,消息探询模块204主动周期性地逐一探询其它节点的共享通信缓 冲区控制区13,确定是否有新的消息到达;当有新消息到达时,消息探询模 块203触发一个软中断,通知协议栈ll接收消息,当没有新消息到达时,消息探询模块203则等待一段预定时间,再次执行探询操作。较佳地,所述预定时间比如可以设为一次时钟中断的时间周期。较佳地,在所述软中断期间,所述消息探询模块203只执行一次探询操作。 这样做的原因是:通过分析现有技术的Linux内核下Tasklet机制的实现发现, 在一次软中断处理函数do一softirq中,处理函数会反复检査是否有新的 Tasklet被调度,如果存在新的Tasklet被调度,则调度执行该Tasklet处理 函数,直到一个预定义的査询阀值次数。现有技术的这种机制是为了保证尽快 地处理Tasklet请求,而不断地调度自身使得Tasklet处理函数多次空执行, 实际上延误了消息的接收操作。所以本发明中消息探询模块206采用稀疏 Tasklet技术,使得每次软中断do—softirq期间只执行一次探询操作。这样 做的好处是减少了空探询操作的次数,在通信效果上进一步降低了通信延迟。由上面的描述可见,共享通信缓冲区12和共享通信缓冲区控制区13形成 一个通信共享区域以用于消息发送方和接收方进行数据通信;共享通信缓冲区 管理模块201和端口地址映射模块202形成对所述通信共享区域进行管理的管 理模块区域;消息传递模块203和消息探询模块204形成与虚拟网卡连接的向 上接口区域。底层通信模块102的工作方式为消息的发送方和接收方共享所述共享通 信缓冲区12及所述共享通信缓冲区控制区13;当发送方要发送消息时,发送 方首先根据共享通信缓冲区控制区13的指示,计算出接收方在共享通信缓冲 区12中的缓冲部分的地址,使用处理器内存拷贝功能,将要传送的消息复制 到共享通信缓冲区12的与发送方对应的缓冲部分中,随后更新共享通信缓冲 区控制区13的控制信息和共享通信缓冲区状态,消息发送即可完成;各节点 的消息探询模块204周期性地探询其它节点的共享通信缓冲区控制区13中的 相应缓冲部分确定是否有新的消息发来;当接收方探询到有新消息发来需要收 取消息时,接收方也根据发送方共享通信缓冲区控制区13中的控制信息计算 出共享通信缓冲区12中相应缓冲部分的地址,再使用处理器做内存复制,将 消息数据从共享通信缓冲区取出,并更新共享通信缓冲区控制区13,即完成
了消息的接收操作。因此,底层通信模块102基于共享内存操作,实现了传统 的底层通信硬件在通信过程中起到的最重要功能,实现了在无通信协处理器环 境下的消息传递语义。从上面对底层通信模块的工作过程的介绍可以看出由于发送方和接收方 是异步操作,即发送方并不是直接将消息发送给接收方,而是将消息拷贝到共 享通信缓冲区中等待接收方来去,接收方也不是在对方将消息发送完成后立刻 接收消息的,而是在探询到有新消息到来时才开始接收消息。所以接收方可以 在发送方发送第二个消息的同时执行接收操作,这种流水线方法就加快了数据 传输的速度。较佳地,虚拟网卡103用于将底层通信模块模拟为一个向上层Li皿X内核协议栈11提供了传统网络接口所需要的功能。参照图3,所述虚拟网卡103包括设备控制模块301,用于对虚拟网卡设备初始化,并向节点注册虚拟网卡的打幵和关闭,以及状态査询(如查询发送或接收了多少个消息)等其它操作;消息分析模块302,用于对来自上层TCP/IP协议栈的每一个需要发送的 消息,分析消息的发送和接收地址,实现IP地址与MAC地址的映射,填充消 息包的包头字段,同时,根据接收方IP地址分析接收方节点的节点号,并传 递消息发送模块303;消息发送模块303,用于将TCP/IP协议栈需要发送的消息,根据所述接 收方节点的节点号,传递给底层通信模块发送;消息接收模块304,用于将所述底层通信模块接收到的消息,封装为系统 内核的数据包,向上传递给所述TCP/IP协议栈101进行处理。本实施例通过虚拟网卡103,虚拟出了一个功能完备的以太网卡,使 TCP/IP与用户进程不能察觉底层网络硬件缺失,达到完全透明支持上层 TCP/IP应用的发明目的。根据图9的流程图, 一种节点之间的数据传输方法,用于非一致内存访问 (NUMA)平台上的多个节点之间传输数据,每个所述节点中包括至少一个处理 器核和/或至少一个处理器以及其上运行的操作系统,包括如下步骤歩骤Sl,通过共享缓冲区分配模块划分出共享通信缓冲区及共享通信缓 冲区控制区,并将所述共享通信缓冲区的位置和大小公告给其它节点。
较佳地,所述公告包括通过在内存中建立一个公告区将所述共享通信缓冲 区的位置和大小在所述公告区公告。例如,在其中一个节点所管理的内存中建 立一个公告区,其它节点都将自身的所述共享通信缓冲区位置和大小在该公告 区公告并在该公告区査询其它节点的共享通信缓冲区位置和大小。较佳地,作为一种可实施的方式,所述共享通信缓冲区是集中式共享通信 缓冲区。如图4所示是集中式共享通信缓冲区示意图,这种方式在其中一个通 信节点(比如通信节点l)的本地内存中划分出一块较大的物理内存用做共享通信缓冲区,并为每一个节点l、 2……N分别分配一个缓冲部分l、 2……N, 所有节点间的通信都使用该缓冲区的一部分。这种方式的好处是缓冲区的管理 比较简单,实现容易。较佳地,作为一种可实施的方式,所述共享通信缓冲区是分布式共享通信 缓冲区。如图5所示是分布式共享通信缓冲区示意图,其中多个通信节点1-N 就是前面介绍的节点,每个节点上都包括共享通信缓冲区12,所有的共享通 信缓冲区12都连接到内存总线。每个共享通信缓冲区的大小可以设置相同也 可以不同。在分布式共享通信缓冲区的组织方式下,任意的两个通信节点之间 通信时,必然仅有一次本地内存访问,而另一次内存访问则为速度较慢的远地 内存访问,所以系统总体的访存速度快于集中式共享通信缓冲区;同时这种方 式的可扩展性也比较好,共享通信缓冲区的内存开销平均的分布到各个通信节 点中,每个通信节点都仅需要占用较小的内存。较佳地,步骤S1中还包括在所述共享通信缓冲区中分别为其他节点分配 一个缓冲部分,并将所述缓冲部分的位置和大小进行公告。步骤S2,当发送方发送消息时,通过虚拟网卡将消息传送到共享通信缓 冲区。较佳地,所述步骤S2中包括流控方法当所述共享通信缓冲区12的相应 缓冲部分满,系统的消息发送请求失败时,共享通信缓冲区管理模块201将阻 止继续产生消息传输事件,直到检査到共享通信缓冲区12的相应缓冲部分是 可用(即共享通信缓冲区12的相应缓冲部分不满)才重新启动数据传输。较佳地,步骤S2中,在每个消息发送后立即进行相应的完成操作;这样 对于消息发送失败的情况交由操作系统协议栈的重发机制实现。较佳地,发送方采用流水方法来发送消息。
歩骤S3,当接收方接收消息时,将消息从所述共享通信缓冲区中取出并 将取出的消息通过虚拟网卡传送给操作系统的协议栈。 较佳地,所述协议栈为TCP/IP协议栈。较佳地,步骤S3中还包括探询步骤探询所述共享通信缓冲区控制区, 确定在共享通信缓冲区中是否有新的消息到达,如果有消息到达则通知接收方 协议栈接收消息。较佳地,所述探询是周期性地逐一探询其它节点的共享通信缓冲区,当有 新消息到达时通过发起一个软中断来通知接收方协议栈接收消息。 较佳地,所述周期比如可以设为一次时钟中断的时间周期。 较佳地,在所述软中断期间,所述探询步骤只执行一次探询操作。 较佳地,接收方采用流水方法来接收消息。较佳地,作为一种可实施方式,步骤S2中发送方发送消息时将消息数据传递到接收方的共享通信缓冲区中;步骤S3中接收方在接收消息时将消息从 接收方的共享通信缓冲区中取出。较佳地,作为一种可实施方式,步骤S2中发送方在发送消息时将消息数 据传递到发送方的共享通信缓冲区中,步骤S3中接收方在接收消息时将消息 从发送方的共享通信缓冲区中取出。以上详细介绍了本发明的数据传输系统和装置及方法。总体来说,如图 10所示,本发明是基于共享通信缓冲区及共享通信缓冲区控制区,通过底层 通信模块进行地址映射和转换操作,消息由处理器核或者处理器从发送方套接 字缓冲区复制到共享通信缓冲区的、专门为接收方分配的缓存位置;接收方周 期性地探询各个操作系统节点的共享通信缓冲区中专门为其分配的缓冲位置, 当在该位置处探询到消息时,则由接收方处理器从该位置取出消息并复制到接 收方套接字缓冲区中,实现了网络数据在通信双方操作系统节点之间的传输。 并且传输的消息都通过一个虚拟网卡来发送和接收,从而避免了采用硬件来传 输数据。与基于通信硬件的通信流程相比,本发明在通信的关键路径上不需要经过 DMA从内存到硬件缓冲区,再经过通信硬件网络传输,再从对方硬件缓冲区到 内存的三个步骤,减少了通信的开销;同时避免了通信数据访问慢速的外部总 线(如PCI总线),而是通过高速内存总线直接从本地内存复制到远地内存,
速度较快;另一方面,通信数据仅经过内存总线的传输,不需要特殊硬件支持的条件下,可以透明、高效的支持TCP/IP协议,相比于通过通信网络的传输,也具有更高的可靠性和良好的可移植性以上所述内容,仅为本发明具体的实施方式,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易 想到的变化或替换,都应涵盖在本发明的保护范围内。
权利要求
1、一种节点之间的数据传输系统,用于基于非一致内存访问平台上的至少两个节点之间数据传输,所述节点包括至少一个处理器核和/或至少一个处理器、操作系统和操作系统中的协议栈;其特征是,所述节点还包括与所述协议栈连接的数据传输装置;所述数据传输装置包括用于在内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述共享通信缓冲区的位置和大小公告给其它节点的共享通信缓冲区分配模块;用于节点之间通过共享通信缓冲区进行消息传递的底层通信模块;所述底层通信模块控制所述共享通信缓冲区和所述共享通信缓冲区控制区;和将所述底层通信模块模拟为网卡并与节点的协议栈连接的虚拟网卡。
2、 根据权利要求1所述的数据传输系统,其特征是,所述公告包括通过 在一个节点所管理的内存中建立一个公告区,所有所述节点将所述共享通信缓 冲区的位置和大小在所述公告区公告。
3、 根据权利要求1所述的数据传输系统,其特征是,所有所述节点的所 述共享通信缓冲区都集中在其中一个节点上进行管理。
4、 根据权利要求1所述的数据传输系统,其特征是,所有所述节点的所 述共享通信缓冲区分布在各自节点上进行管理。
5、 根据权利要求1所述的数据传输系统,其特征是,所述协议栈是TCP/IP 协议栈。
6、 根据权利要求1至5任一项所述的数据传输系统,其特征是,所述底 层通信模块包括共享通信缓冲区管理模块,用于在所述共享通信缓冲区中为其他节点分别 分配一个缓冲部分,并将所述缓冲部分的位置和大小进行公告,还用于监控所 述共享通信缓冲区的状态并将其状态记录在所述共享通信缓冲区控制区中;端口地址映射模块,用于将消息传输的接收方节点号映射到所述共享通信 缓冲区的所述缓冲部分并在所述缓冲部分中寻找消息传输位置;消息传递模块,用于在传输消息时从所述共享通信缓冲区的缓冲部分中完 成消息发送和消息接收。
7、 根据权利要求6所述的数据传输系统,其特征是,共享通信缓冲区管 理模块采用如下流控方法当共享通信缓冲区的相应缓冲部分满,消息发送请 求失败时,共享通信缓冲区管理模块将阻止继续产生消息传输事件,直到检查 到共享通信缓冲区的相应缓冲部分是不满才重新启动消息传输。
8、 根据权利要求6所述的数据传输系统,其特征是,所述消息传递模块在每个消息发送后立即进行完成操作。
9、 根据权利要求6所述的数据传输系统,其特征是,所述消息传递模块 使用流水的消息复制方法,使多个消息的发送和接收操作并行进行。
10、 根据权利要求6所述的数据传输系统,其特征是,所述消息传递模块 在发送消息时将消息传递到接收方的共享通信缓冲区中,在接收消息时将消息 从接收方的共享通信缓冲区中取出。
11、 根据权利要求6所述的数据传输系统,其特征是,所述消息传递模块在发送消息时将消息传递到发送方的共享通信缓冲区中,在接收消息时将消息 从发送方的共享通信缓冲区中取出。
12、 根据权利要求6所述的数据传输系统,其特征是,所述底层通信模块 还包括消息探询模块,用于探询所述共享通信缓冲区中是否有新的消息到达, 如果有新消息到达则通知协议栈接收消息。
13、 根据权利要求12所述的数据传输系统,其特征是,所述消息探询模 块周期性地逐一探询其他节点的所述共享通信缓冲区控制区,确定在给本节点 分配的所述共享通信缓冲区的缓冲部分中是否有新的消息到达;当有新消息到 达时,消息探询模块触发一个软中断,通知协议栈接收消息,当没有新消息到 达时,消息探询模块等待一个周期,再次执行探询操作。
14、 根据权利要求13所述的数据传输系统,其特征是,所述周期设为一 次时钟中断的时间周期。
15、 根据权利要求13所述的数据传输系统,其特征是,所述节点设置为 在所述软中断期间,所述消息探询模块执行一次探询操作。
16、 根据权利要求6所述的数据传输系统,其特征是,所述虚拟网卡包括 设备控制模块,用于对虚拟网卡设备初始化,并向节点注册虚拟网卡的打开和关闭;消息分析模块,用于对需要发送的消息分析发送和接收地址; 消息发送模块,用于根据所述接收地址,传递给所述底层通信模块;消息接收模块,用于将所述底层通信模块接收到的消息,封装为系统内核 的数据包,传递给所述协议栈。
17、 一种数据传输装置,用于基于非一致内存访问平台上的至少两个节点 之间传输数据,该装置与所述节点的协议栈连接;其特征在于,包括用于在内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述 共享通信缓冲区的位置和大小公告给其它节点的共享通信缓冲区分配模块;用于节点之间通过共享通信缓冲区进行消息传递的底层通信模块,所述底 层通信模块控制所述共享通信缓冲区和所述共享通信缓冲区控制区;和将所述底层通信模块模拟为网卡并与节点的协议栈连接的虚拟网卡。
18、 根据权利要求17所述的数据传输装置,其特征是,所述公告包括通 过在一个节点所管理的内存中建立一个公告区将所述共享通信缓冲区的位置 和大小在所述公告区公告。
19、 根据权利要求17所述的数据传输装置,其特征是,所有所述节点的 所述共享通信缓冲区分布在各自节点上进行管理。
20、 根据权利要求17所述的数据传输装置,其特征是,所述协议栈是 TCP/IP协议栈。
21、 根据权利要求17至20中任一项所述的数据传输装置,其特征是,所 述底层通信模块包括共享通信缓冲区管理模块,用于在所述共享通信缓冲区中为其他节点分别 分配一个缓冲部分,并将所述缓冲部分的位置和大小进行公告,还用于监控所 述共享通信缓冲区的状态并将其状态记录在所述共享通信缓冲区控制区中;端口地址映射模块,用于将消息传输的接收方节点号映射到所述共享通信 缓冲区的所述缓冲部分并在所述缓冲部分中寻找消息传输位置;消息传递模块,用于在传输消息时从所述共享通信缓冲区的缓冲部分中完 成消息发送和消息接收。
22、 根据权利要求21所述的数据传输装置,其特征是,共享通信缓冲区 管理模块采用如下流控方法当共享通信缓冲区的相应缓冲部分满,消息发送 请求失败时,共享通信缓冲区管理模块将阻止继续产生消息传输事件,直到检 査到共享通信缓冲区的相应缓冲部分是不满才重新启动消息传输。
23、 根据权利要求21所述的数据传输装置,其特征是,所述消息传递模 块在每个消息发送后立即进行完成操作。
24、 根据权利要求21所述的数据传输装置,其特征是,所述消息传递模块使用流水的消息复制方法,使多个消息的发送和接收操作并行进行。
25、 根据权利要求21所述的数据传输装置,其特征是,所述消息传递模 块在发送消息时将消息传递到接收方的共享通信缓冲区中,在接收消息时将消 息从接收方的共享通信缓冲区中取出。
26、 根据权利要求21所述的数据传输装置,其特征是,所述消息传递模 块在发送消息时将消息传递到发送方的共享通信缓冲区中,在接收消息时将消 息从发送方的共享通信缓冲区中取出。
27、 根据权利要求21所述的数据传输装置,其特征是,所述底层通信模 块还包括消息探询模块,用于探询所述共享通信缓冲区中是否有新的消息到 达,如果有新消息到达则通知协议栈接收消息。
28、 根据权利要求27所述的数据传输装置,其特征是,所述消息探询模 块周期性地逐一探询其他节点的所述共享通信缓冲区控制区,确定在给本节点 分配的所述共享通信缓冲区的缓冲部分中是否有新的消息到达;当有新消息到 达时,消息探询模块触发一个软中断,通知协议栈接收消息,当没有新消息到 达时,消息探询模块等待一个周期,再次执行探询操作。
29、 根据权利要求28所述的数据传输装置,其特征是,所述周期设为一 次时钟中断的时间周期。
30、 根据权利要求21所述的数据传输装置,其特征是,所述虚拟网卡包括设备控制模块,用于对虚拟网卡设备初始化,并向节点注册虚拟网卡的打 开和关闭;消息分析模块,用于对需要发送的消息分析发送和接收地址; 消息发送模块,用于根据所述接收地址,传递给所述底层通信模块; 消息接收模块,用于将所述底层通信模块接收到的消息,封装为系统内核 的数据包,传递给所述协议栈。
31、 一种节点之间的数据传输方法,用于非一致内存访问平台上的多个节 点之间传输数据,每个所述节点中包括至少一个处理器核和/或至少一个处理 器以及其上运行的操作系统,包括如下步骤  步骤Sl,在所管理的内存中划分出共享通信缓冲区及共享通信缓冲区控 制区,并将所述共享通信缓冲区的位置和大小公告给其它节点;步骤S2,当发送方发送消息时,通过虚拟网卡将消息传送到共享通信缓 冲区;步骤S3,当接收方接收消息时,将消息从所述共享通信缓冲区中取出并 将取出的消息通过虚拟网卡传送给操作系统的协议栈。
32、 根据权利要求31所述的数据传输方法,其特征是,在所述歩骤Sl 中,所述公告包括通过在内存中建立一个公告区,所有所述节点将所述共享通 信缓冲区的位置和大小在所述公告区公告。
33、 根据权利要求31所述的数据传输方法,其特征是,所述歩骤S1中的 所有所述节点的所述共享通信缓冲区都集中在其中一个节点上进行管理。
34、 根据权利要求31所述的数据传输方法,其特征是,所述步骤S1中的 所有所述节点的所述共享通信缓冲区分布在各自节点上进行管理。
35、 根据权利要求34所述的数据传输方法,其特征是,步骤S1中还包括 在所述共享通信缓冲区中分别为其他节点分配 一个缓冲部分,并将所述缓冲部 分的位置和大小进行公告。
36、 根据权利要求35所述的数据传输方法,其特征是,所述步骤S2中包 括流控方法当所述共享通信缓冲区的相应缓冲部分满,系统的消息发送请求 失败时,将阻止协议栈继续产生消息传输事件,直到检査到共享通信缓冲区的 相应缓冲部分不满才重新启动消息传输。
37、 根据权利要求31所述的数据传输方法,其特征是,步骤S2中,在每 个消息发送后立即进行相应的完成操作。
38、 根据权利要求31所述的数据传输方法,其特征是,步骤S2中发送方 采用流水方法发送消息。
39、 根据权利要求31所述的数据传输方法,其特征是,所述协议栈为 TCP/IP协议栈。
40、 根据权利要求31所述的数据传输方法,其特征是,步骤S3中还包括 探询步骤探询所述共享通信缓冲区中是否有新的消息到达,如果有新消息到 达则通知接收方协议栈接收消息。
41、 根据权利要求40所述的数据传输方法,其特征是,所述探询是周期 地逐一探询其它节点的共享通信缓冲区中是否有新的消息到达,如果有新消息 到达则通过发起一个软中断来通知接收方协议栈接收消息通知接收方协议栈 接收消息。
42、 根据权利要求41所述的数据传输方法,其特征是,所述周期为一次 时钟中断的时间周期。
43、 根据权利要求41所述的数据传输方法,其特征是,在所述软中断期间,所述探询歩骤只执行一次探询操作。
44、 根据权利要求31所述的数据传输方法,其特征是,在步骤S3中接收 方采用流水方法接收消息。
45、 根据权利要求31所述的数据传输方法,其特征是,步骤S2中发送方 发送消息时将消息传递到接收方的共享通信缓冲区中;步骤S3中接收方在接 收消息时将消息从接收方的共享通信缓冲区中取出。
46、 根据权利要求31所述的数据传输方法,其特征是,步骤S2中发送方 在发送消息时将消息传递到发送方的共享通信缓冲区中,步骤S3中接收方在 接收消息时将消息从发送方的共享通信缓冲区中取出。
全文摘要
本发明公开了一种在非一致内存访问平台上的各节点之间以消息传递方式的数据传输系统和装置及方法。该数据传输系统,用于在非一致内存访问平台上的各节点之间传输数据,所述节点包括与操作系统的协议栈连接的数据传输装置;其特征是,所述数据传输装置包括用于在内存中划分出共享通信缓冲区及共享通信缓冲区控制区,并将所述共享通信缓冲区的位置和大小公告给其它节点的共享通信缓冲区分配模块;用于节点之间通过共享通信缓冲区进行消息传递的底层通信模块;和将所述底层通信模块模拟为网卡并与节点的协议栈连接的虚拟网卡。本发明的有益效果是不需要特殊的硬件支持,透明、高效、安全的传输数据。
文档编号G06F15/16GK101158936SQ200710177879
公开日2008年4月9日 申请日期2007年11月21日 优先权日2007年11月21日
发明者翔 张, 苗艳超, 捷 马 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1