一种基于多核无锁环形缓冲区的共生虚拟机通信方法技术

技术编号:15520571 阅读:85 留言:0更新日期:2017-06-04 10:06
本发明专利技术公开了一种基于多核无锁环形缓冲区的共生虚拟机通信方法,实施步骤包括:预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。本发明专利技术具有能够支持接收方高效并发读取,缓冲区读写并发性好,共生虚拟机通信效率高、能够充分利用处理的多核处理性能的优点。

Symbiotic virtual machine communication method based on multi-core non lock ring buffer

The invention discloses a method of symbiosis virtual machine communication lock ring buffer based on multi-core, implementation steps include: pre application sharing in fixed size buffers in memory, the buffer is divided into metadata area, specify the identity of variables in a metadata storage area of the buffer area and buffer description information the metadata area other logically organized into multiple nuclear ring lock free ring buffer; when symbiosis virtual machine communication is required, as the sender to write, to multi core lock free ring buffer in written communication data, and at the same time only allows a write write operation is carried out communication; receiver as a reader, the reader reads the communication data of multi-core lock free ring buffer, and multiple readers can read concurrent operation. The invention has the advantages that the receiver can efficiently read concurrently, the read and write of the buffer is good, the communication efficiency of the symbiotic virtual machine is high, and the multi-core processing performance of the processing can be fully utilized.

【技术实现步骤摘要】
一种基于多核无锁环形缓冲区的共生虚拟机通信方法
本专利技术涉及网络虚拟化技术的共生虚拟机的通信加速技术,具体涉及一种基于多核无锁环形缓冲区的共生虚拟机通信方法。
技术介绍
当前,云计算已经成为了学术界和工业界的研究热点。作为云平台的重要支撑技术之一,虚拟化技术提供了资源隔离、容错、提高资源利用率等诸多重要功能。Xen是目前主流的开源虚拟化平台之一。在Xen平台上,每个虚拟机称为一个域;通常称处于同一台物理机上的虚拟机为共生虚拟机。当前的云计算环境中,硬件水平的提升使得每台物理机上所能容纳的虚拟机数量越来越多,共生虚拟机间通信的频率也越来越高。Xen平台上,任意的两台虚拟机,无论是否存在共生关系,都是使用传统的TCP/IP协议栈进行通信。这种通信方式存在着通信路径长、数据拷贝次数多、虚拟机域切换频繁等问题,因此通信性能存在很大的优化空间。目前一种广泛采用的通信加速思路是:为共生虚拟机之间建立共享内存数据通道,当通信双方是共生虚拟机时,通信数据通过共享内存通道进行交换。由于数据旁路减少了通信路径和数据拷贝次数,同时也避免虚拟机管理器频繁地在多个域之间切换,这种优化思路通常能够大幅度提高通信吞吐率。大部分共生虚拟机通信优化机制的共享内存数据通道采用环形缓冲区实现。数据通信过程中,发送方是缓冲区的生产者,也是缓冲区的写者;接收方是缓冲区的消费者,也是缓冲区的读者。环形缓冲区的读写过程是一个生产者-消费者模型。图1表示了一个共生虚拟机间采用共享内存环形缓冲区通信加速的示意,虚拟机A和虚拟机B之间进行通信,则需要使用两个共享内存环形缓冲区以及两个事件通道。Lamport于1977年提出了经典的无锁环形缓冲区模型用于解决生产者-消费者问题。经典的无锁环形缓冲区设置为固定大小,并设置了一个头指针(front指针)指示写者位置,一个尾指针(back指针)指示读者位置。写者写入数据时,必须保证back<read+BUFFER_SIZE;读者读取数据时,必须保证read<back。经典无锁环形缓冲区的模型示意图如图2所示,无锁环形缓冲区的front指针和back指针作为待读取数据区域、无数据区域两者的分界线。目前已有一些研究工作采用了共享内存环形缓冲区来加速共生虚拟机间通信。XWay为每对共生虚拟机间的通信连接设置了一组环形缓冲区,发送方在传输层将发送的数据写入环形缓冲区中。XWay的环形缓冲区采用了经典的lock-free环形缓冲区设计,同一时刻只允许一个读者或者一个写者操作缓冲区。XenSocket以socket为模板,设计了一套专用于共生虚拟机间通信的API。上层应用在使用这套API通信时,数据会直接在双方建立的共享内存中读写。XenSocket的共享内存在逻辑上设计成环形,每对通信连接对应一个环形缓冲区。缓冲区同样采用了经典的lock-free环形缓冲区设计,因此同一时刻只允许一个读者或者一个写者操作缓冲区。XenLoop借助Linux内核提供的netfilter编程接口,在协议栈的网络层截获IP数据包,并将发往共生虚拟机的数据包写入共享缓冲区中。XenLoop的共享缓冲区并不是面向连接的,而是每一对共生虚拟机间共用一个环形缓冲。环形缓冲区的设计依然采用的是经典的lock-free模型。XenLoop在环形缓冲区的数据组织上使用了一致大小的数据单元,因此可以供多个连接共同使用。综上所述,上述相关工作的环形缓冲区设计,无论是面向连接的还是面向共生虚拟机的,都采用的是经典的lock-free环形缓冲区模型。这种模型只支持一个写者和一个读者同步读写。随着多核技术的发展,虚拟机普遍分配了多个虚拟CPU。在多核的环境中,经典的无锁环形缓冲区无法充分利用多核带来的优势,存在着优化空间。
技术实现思路
本专利技术要解决的技术问题:针对共生虚拟机通信加速机制中经典无锁环形缓冲区在多核支持方面的不足,提供一种能够支持接收方高效并发读取,缓冲区读写并发性好,共生虚拟机通信效率高、能够充分利用处理的多核处理性能的基于多核无锁环形缓冲区的共生虚拟机通信方法。为了解决上述技术问题,本专利技术采用的技术方案为:一种基于多核无锁环形缓冲区的共生虚拟机通信方法,实施步骤包括:1)预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,跳转执行步骤2);2)通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;3)通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。优选地,步骤1)中将所述缓冲区等分划分为元数据区域具体是指通过对缓冲区的内存地址的取余操作将所述缓冲区等分划分为元数据区域。优选地,步骤1)中的所述缓冲区的标识变量包括全局尾指针back、全局读指针front_r、全局写指针front_w和局部变量local_read[0...N-1],其中N为CPU核心个数,每一个局部变量对应一个CPU并用于记录该CPU对应的读或者写的首地址,且所述多核无锁环形缓冲区的每次读写任务都由一个CPU完成。优选地,步骤2)中写者往多核无锁环形缓冲区中写通信数据的详细步骤包括:2.1)检查缓冲区剩余空间remain_size是否大于通信数据的数据长度data_len,如果小于通信数据的数据长度data_len,则直接结束退出;否则,跳转执行下一步;2.2)比较所有读者对应的局部变量local_read[i]与back,若存在某个读者i的局部变量local_read[i]使得式(1)成立且该局部变量local_read[i]不等于0,则循环等待跳转执行步骤2.2);否则,跳转执行步骤2.3);back+data_len>=local_read[i]+RING_SIZE(1)式(1)中,back表示全局尾指针back的地址,data_len表示通信数据的数据长度,local_read[i]表示读者i的局部变量,RING_SIZE表示缓冲区的空间大小;2.3)将通信数据拷贝至缓冲区起始位置为back,长度为data_len的区域,其中back表示全局尾指针back的地址,data_len表示通信数据的数据长度。优选地,步骤2.3)的详细步骤包括:2.3.1)判断通信数据的数据长度data_len是否大于缓冲区剩余空间remain_size,如果大于缓冲区剩余空间remain_size,则结束并退出;否则,跳转执行下一步;2.3.2)判断式(2)是否成立,如果式(2)成立则判定缓冲区剩余空间remain_size富余,将通信数据拷贝至缓冲区起始位置为back,长度为data_len的区域,其中back表示全局尾指针back的地址,data_len表示通信数据的数据长度;跳转执行步骤3);如果式(2)不成立,则跳转执行步骤2.3.3);RING_SIZE-(back-min{local_read[0...N-1]})>data_len(2)式(2)中,RING_SIZE表示缓冲区的空间大小,back表示全局尾指针bac本文档来自技高网
...
一种基于多核无锁环形缓冲区的共生虚拟机通信方法

【技术保护点】
一种基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于实施步骤包括:1)预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,跳转执行步骤2);2)通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;3)通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。

【技术特征摘要】
1.一种基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于实施步骤包括:1)预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,跳转执行步骤2);2)通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;3)通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。2.根据权利要求1所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤1)中将所述缓冲区等分划分为元数据区域具体是指通过对缓冲区的内存地址的取余操作将所述缓冲区等分划分为元数据区域。3.根据权利要求1所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤1)中的所述缓冲区的标识变量包括全局尾指针back、全局读指针front_r、全局写指针front_w和局部变量local_read[0...N-1],其中N为CPU核心个数,每一个局部变量对应一个CPU并用于记录该CPU对应的读或者写的首地址,且所述多核无锁环形缓冲区的每次读写任务都由一个CPU完成。4.根据权利要求3所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤2)中写者往多核无锁环形缓冲区中写通信数据的详细步骤包括:2.1)检查缓冲区剩余空间remain_size是否大于通信数据的数据长度data_len,如果小于通信数据的数据长度data_len,则直接结束退出;否则,跳转执行下一步;2.2)比较所有读者对应的局部变量local_read[i]与back,若存在某个读者i的局部变量local_read[i]使得式(1)成立且该局部变量local_read[i]不等于0,则循环等待跳转执行步骤2.2);否则,跳转执行步骤2.3);back+data_len>=local_read[i]+RING_SIZE(1)式(1)中,back表示全局尾指针back的地址,data_len表示通信数据的数据长度,local_read[i]表示读者i的局部变量,RING_SIZE表示缓冲区的空间大小;2.3)将通信数据拷贝至缓冲区起始位置为back,长度为data_len的区域,其中back表示全局尾指针back的地址,data_len表示通信数据的数据长度。5.根据权利要求4所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在...

【专利技术属性】
技术研发人员:任怡游资奇吴庆波戴华东谭郁松刘仁仕阳国贵
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1