CN106790599B - 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 - Google Patents
一种基于多核无锁环形缓冲区的共生虚拟机通信方法 Download PDFInfo
- Publication number
- CN106790599B CN106790599B CN201611245529.5A CN201611245529A CN106790599B CN 106790599 B CN106790599 B CN 106790599B CN 201611245529 A CN201611245529 A CN 201611245529A CN 106790599 B CN106790599 B CN 106790599B
- Authority
- CN
- China
- Prior art keywords
- data
- read
- local
- buffer area
- multicore
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0823—Configuration setting characterised by the purposes of a change of settings, e.g. optimising configuration for enhancing reliability
- H04L41/083—Configuration setting characterised by the purposes of a change of settings, e.g. optimising configuration for enhancing reliability for increasing network speed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于多核无锁环形缓冲区的共生虚拟机通信方法,实施步骤包括:预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。本发明具有能够支持接收方高效并发读取,缓冲区读写并发性好,共生虚拟机通信效率高、能够充分利用处理的多核处理性能的优点。
Description
技术领域
本发明涉及网络虚拟化技术的共生虚拟机的通信加速技术,具体涉及一种基于多核无锁环形缓冲区的共生虚拟机通信方法。
背景技术
当前,云计算已经成为了学术界和工业界的研究热点。作为云平台的重要支撑技术之一,虚拟化技术提供了资源隔离、容错、提高资源利用率等诸多重要功能。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表示全局尾指针back的地址,min{local_read[0...N-1]}表示取所有局部变量的最小值,N为CPU核心个数,local_read[i]表示读者i的局部变量,data_len表示通信数据的数据长度;
2.3.3)判定存在局部变量local_read[i]使得式(3)成立,缓冲区的剩余空间不是连续的,存在着读者j已经完成此次读任务而读者i尚未完成,i < j < N,跳转执行步骤2.1);
RING_SIZE - (back - local_read[i]) <= data_len (3)
式(3)中,RING_SIZE表示缓冲区的空间大小,back表示全局尾指针back的地址,local_read[i]表示第i个局部变量,data_len表示通信数据的数据长度。
优选地,步骤3)中读者读取多核无锁环形缓冲区中的通信数据的步骤包括:
3.1)判断缓冲区是否为空,若是,则直接结束退出;否则,跳转执行下一步;
3.2)将全局读指针front_r记录在当前读者i的局部变量local_read[i]中;
3.3)更新全局读指针front_r的值,使得全局读指针front_r的值在原值的基础上增加通信数据的数据长度data_len;
3.4)将当前读者i的局部变量local_read[i]的值为起始地址、通信数据的数据长度data_len对应的区域中的数据拷贝至上层应用提供的缓冲区中;
3.5)更新全局写指针front_w的值,使得全局写指针front_w的值在原值的基础上增加通信数据的数据长度data_len;
3.6)将当前读者i的局部变量local_read[i]更新为0。
本发明基于多核无锁环形缓冲区的共生虚拟机通信方法通过预先在共享内存中申请固定大小的缓冲区并构建多核无锁环形缓冲区;当共生虚拟机需要通信时,通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;然后通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作,能够支持接收方高效并发读取,具有下述优点:(1)无锁。缓冲区的读写无需使用锁机制,这保证了读者或者写者在操作缓冲区时可以在有限步完成;(2)多读者并发读。本发明的多核无锁环形缓冲区允许多个读者同时读取缓冲区中的数据,在多核的环境中,每个核可以运行一个读者进程,相比经典的环形缓冲区模型,能够提升多核环境下缓冲区的读写效率。
附图说明
图1为现有技术的共生虚拟机间采用共享内存进行通信加速的结构示意图。
图2为现有技术的经典无锁环形缓冲区模型示意图。
图3为本发明实施例的基本流程示意图。
图4为本发明实施例中多核无锁环形缓冲区的模型示意图。
图5为本发明实施例中的读者读操作流程图。
图6为本发明实施例中的写者写操作流程图。
具体实施方式
如图3所示,本实施例基于多核无锁环形缓冲区的共生虚拟机通信方法的实施步骤包括:
1)预先在共享内存中申请固定大小的缓冲区,将缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,跳转执行步骤2);
2)通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;
3)通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。
本实施例中,步骤1)中将缓冲区等分划分为元数据区域具体是指通过对缓冲区的内存地址的取余操作将缓冲区等分划分为元数据区域。将缓冲区等分划分为元数据区域时,指定第一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,本实施例中,缓冲区的描述信息具体包括缓冲区大小。
本实施例中,步骤2)中同一时刻只允许一个写者执行写操作的实现,可通过标志位、信号量等技术实现,写者当前写的位置记录在一个指示变量中。步骤3)中读者与读者间允许同时读取缓冲区中的数据,每个读者都使用的一个指示变量标识了此次读任务开始时的位置。对应的,另外采用了一个指示变量标识了所有读者完成的读取任务的总量。
如图4所示,步骤1)中的缓冲区的标识变量包括全局尾指针back、全局读指针front_r、全局写指针front_w和局部变量local_read[0...N-1],其中N为CPU核心个数,每一个局部变量对应一个CPU并用于记录该CPU对应的读或者写的首地址,且多核无锁环形缓冲区的每次读写任务都由一个CPU完成。此外,本实施例的缓冲区大小为一固定值,记为RING_SIZE;通信数据的数据长度(某一次写任务需要拷贝到缓冲区的数据长度)记为data_len;缓冲区剩余空间remain_space表示缓冲区中没有数据覆盖的区域的长度总和,缓冲区剩余空间remain_space在逻辑上不一定连续,这是因为当多个读者在并发读数据时,各个读者的任务完成顺序是不确定的,缓冲区剩余空间remain_space可由全局写指针front_w与全局尾指针back计算出:remain_space = RING_SIZE - (back - front_w)。读者在每次读任务开始前,将当前front_r的值记录在局部变量中,记为local_read[0...N-1](0...N-1为读者编号);全局写指针front_w表示所有进行中的读者任务的完成情况,每个读者在完成此次读取任务后会更新全局写指针front_w。参见图4可知,数据读写方向为顺时针方向,全局读指针front_r、全局尾指针back之间的区域为待读取数据区域, local_read[B]为读者B读取中的数据区域,local_read[A]为读者A读取中的数据区域,且读者B和读者A的读操作为并发进行。
如图5所示,步骤2)中写者往多核无锁环形缓冲区中写通信数据的详细步骤包括:
2.1)检查缓冲区剩余空间remain_size是否大于通信数据的数据长度data_len(即判断data_len > remain_size是否成立),如果小于通信数据的数据长度data_len,则直接结束退出(由上层应用处理,上层应用会决定下一步的操作);否则,跳转执行下一步;
2.2)比较所有读者对应的局部变量local_read[i]与back,若存在某个读者i的局部变量local_read[i]使得式(1)成立且该局部变量local_read[i]不等于0(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(即判断RING_SIZE - (back - front_w) > data_len是否成立),如果大于缓冲区剩余空间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表示全局尾指针back的地址,min{local_read[0...N-1]}表示取所有局部变量的最小值,N为CPU核心个数,local_read[i]表示读者i的局部变量,data_len表示通信数据的数据长度;
2.3.3)判定存在局部变量local_read[i]使得式(3)成立,缓冲区的剩余空间不是连续的,存在着读者j已经完成此次读任务而读者i尚未完成,i < j < N,跳转执行步骤2.1);
RING_SIZE - (back - local_read[i]) <= data_len (3)
式(3)中,RING_SIZE表示缓冲区的空间大小,back表示全局尾指针back的地址,local_read[i]表示第i个局部变量,data_len表示通信数据的数据长度。
由式(3)推导得式(4)成立。
back + data_len >= local_read[i] + RING_SIZE (4)
式(4)中,RING_SIZE表示缓冲区的空间大小,back表示全局尾指针back的地址,local_read[i]表示第i个局部变量,data_len表示通信数据的数据长度。因此,在步骤2.3.3)时写者会进入循环等待,此循环等待在读者i将local_read[i]赋值为0时终止。由于在共生虚拟机通信加速机制的环境中,读者的读操作由一个CPU在中断的下半文完成,而读者数据的数据接收算法能够正确完成,可以保证local_read[i]在有限时间内会被赋值为0.因此,写者能够在有限时间内完成写入操作。
如图6所示,步骤3)中读者读取多核无锁环形缓冲区中的通信数据的步骤包括:
3.1)判断缓冲区是否为空(即判断remain_space == RING_SIZE是否成立),若是,则直接结束退出(由上层应用处理,上层应用会决定下一步的操作);否则,跳转执行下一步;
3.2)将全局读指针front_r记录在当前读者i的局部变量local_read[i]中;
由于全局读指针front_r的值指示了最早开始读取数据任务的读者在读取任务完成后的位置,因此,若全局读指针front_r = 全局尾指针back成立,则说明所有存在数据的区域都已经有读者负责读取;读者i在开始读取任务前,会将任务起始地址记录在局部变量local_read[i]。对于其他读者而言,由于每个读者在读任务开始前都能计算出待读取的数据的长度,因此各个读者读取的数据区域不会重叠。对于写者而言,局部变量local_read[0...N-1]能保证写者待写的区域与所有读者待读区域不会重叠。
3.3)更新全局读指针front_r的值,使得全局读指针front_r的值在原值的基础上增加通信数据的数据长度data_len(即:front_r = front_r + data_len);
3.4)将当前读者i的局部变量local_read[i]的值为起始地址、通信数据的数据长度data_len对应的区域中的数据拷贝至上层应用提供的缓冲区中;
3.5)更新全局写指针front_w的值,使得全局写指针front_w的值在原值的基础上增加通信数据的数据长度data_len(即:front_w = front_w + data_len);读者读任务完成后,将front_w更新为front_w + data_len,这保证了写者在计算剩余空间时能够准确的计算出未使用的空间,避免写者进程饥饿;
3.6)将当前读者i的局部变量local_read[i]更新为0。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (5)
1.一种基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于实施步骤包括:
1)预先在共享内存中申请固定大小的缓冲区,将所述缓冲区等分划分为元数据区域,指定一个元数据区域存储缓冲区的描述信息以及缓冲区的标识变量,将其余的元数据区域在逻辑上组织成环形得到多核无锁环形缓冲区;当共生虚拟机需要通信时,跳转执行步骤2);所述缓冲区的标识变量包括全局尾指针back、全局读指针front_r、全局写指针front_w和局部变量local_read[0...N-1],其中N为CPU核心个数,每一个局部变量对应一个CPU并用于记录该CPU对应的读或者写的首地址,且所述多核无锁环形缓冲区的每次读写任务都由一个CPU完成;
2)通信发送方作为写者,往多核无锁环形缓冲区中写通信数据,且同一时刻只允许一个写者执行写操作;
3)通信接收方作为读者,读者读取多核无锁环形缓冲区中的通信数据,且多个读者可并发执行读取操作。
2.根据权利要求1所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤1)中将所述缓冲区等分划分为元数据区域具体是指通过对缓冲区的内存地址的取余操作将所述缓冲区等分划分为元数据区域。
3.根据权利要求1所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤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表示通信数据的数据长度。
4.根据权利要求3所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤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表示全局尾指针back的地址,min{local_read[0...N-1]}表示取所有局部变量的最小值,N为CPU核心个数,local_read[i]表示读者i的局部变量,data_len表示通信数据的数据长度;
2.3.3)判定存在局部变量local_read[i]使得式(3)成立,缓冲区的剩余空间不是连续的,存在着读者j已经完成此次读任务而读者i尚未完成,i < j < N,跳转执行步骤2.1);
RING_SIZE - (back - local_read[i]) <= data_len (3)
式(3)中,RING_SIZE表示缓冲区的空间大小,back表示全局尾指针back的地址,local_read[i]表示第i个局部变量,data_len表示通信数据的数据长度。
5.根据权利要求1所述的基于多核无锁环形缓冲区的共生虚拟机通信方法,其特征在于,步骤3)中读者读取多核无锁环形缓冲区中的通信数据的步骤包括:
3.1)判断缓冲区是否为空,若是,则直接结束退出;否则,跳转执行下一步;
3.2)将全局读指针front_r记录在当前读者i的局部变量local_read[i]中;
3.3)更新全局读指针front_r的值,使得全局读指针front_r的值在原值的基础上增加通信数据的数据长度data_len;
3.4)将当前读者i的局部变量local_read[i]的值为起始地址、通信数据的数据长度data_len对应的区域中的数据拷贝至上层应用提供的缓冲区中;
3.5)更新全局写指针front_w的值,使得全局写指针front_w的值在原值的基础上增加通信数据的数据长度data_len;
3.6)将当前读者i的局部变量local_read[i]更新为0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611245529.5A CN106790599B (zh) | 2016-12-29 | 2016-12-29 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611245529.5A CN106790599B (zh) | 2016-12-29 | 2016-12-29 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106790599A CN106790599A (zh) | 2017-05-31 |
CN106790599B true CN106790599B (zh) | 2019-06-28 |
Family
ID=58929108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611245529.5A Active CN106790599B (zh) | 2016-12-29 | 2016-12-29 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106790599B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107562550B (zh) * | 2017-09-01 | 2020-09-22 | 成都瀚蓝科技有限公司 | 一种数据分发方法 |
CN107846328B (zh) * | 2017-12-01 | 2021-03-12 | 上海市共进通信技术有限公司 | 基于并发无锁环形队列的网络速率实时统计方法 |
US11151037B2 (en) * | 2018-04-12 | 2021-10-19 | International Business Machines Corporation | Using track locks and stride group locks to manage cache operations |
US10831597B2 (en) | 2018-04-27 | 2020-11-10 | International Business Machines Corporation | Receiving, at a secondary storage controller, information on modified data from a primary storage controller to use to calculate parity data |
US10884849B2 (en) | 2018-04-27 | 2021-01-05 | International Business Machines Corporation | Mirroring information on modified data from a primary storage controller to a secondary storage controller for the secondary storage controller to use to calculate parity data |
CN109933438B (zh) * | 2019-01-31 | 2022-12-20 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 高速共享内存数据收发系统 |
CN110555056B (zh) * | 2019-07-23 | 2021-12-07 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
CN112565474B (zh) * | 2019-09-25 | 2024-02-06 | 无锡江南计算技术研究所 | 面向分布式共享spm的批量数据传输方法 |
CN113806239A (zh) * | 2020-06-11 | 2021-12-17 | 中兴通讯股份有限公司 | 一种内存操作控制方法、设备及存储介质 |
CN111767154B (zh) * | 2020-06-19 | 2024-06-25 | 北京思特奇信息技术股份有限公司 | 用于无阻塞通讯的无锁环形队列实现方法 |
CN111538607B (zh) * | 2020-06-22 | 2020-10-20 | 北京翼辉信息技术有限公司 | 一种基于边界保护的消息通信方法及装置 |
CN113064743A (zh) * | 2021-04-15 | 2021-07-02 | 张荣晋 | 一种环形缓冲区读写方法和装置 |
CN117407148B (zh) * | 2022-07-08 | 2024-06-18 | 华为技术有限公司 | 数据写入方法、读取方法、装置、电子设备以及存储介质 |
CN115357212B (zh) * | 2022-10-20 | 2023-01-13 | 瀚博半导体(上海)有限公司 | 用于环形缓冲器的参数生成方法、装置和人工智能芯片 |
CN117407356B (zh) * | 2023-12-14 | 2024-04-16 | 芯原科技(上海)有限公司 | 基于共享内存的核间通信方法、装置、存储介质及终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101706742A (zh) * | 2009-11-20 | 2010-05-12 | 北京航空航天大学 | 一种基于多核动态划分的非对称虚拟机i/o调度方法 |
CN102073535A (zh) * | 2011-01-11 | 2011-05-25 | 华中科技大学 | 基于硬件计数器虚拟化的多虚拟机性能分析方法 |
CN102122256A (zh) * | 2011-03-28 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 一种用于进程间通信的管道式通信方法及系统 |
CN105868000A (zh) * | 2016-06-14 | 2016-08-17 | 上海交通大学 | 一种针对网络i/o虚拟化的并行化可扩展数据处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008234059A (ja) * | 2007-03-16 | 2008-10-02 | Fujitsu Ltd | データ転送装置および情報処理システム |
-
2016
- 2016-12-29 CN CN201611245529.5A patent/CN106790599B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101706742A (zh) * | 2009-11-20 | 2010-05-12 | 北京航空航天大学 | 一种基于多核动态划分的非对称虚拟机i/o调度方法 |
CN102073535A (zh) * | 2011-01-11 | 2011-05-25 | 华中科技大学 | 基于硬件计数器虚拟化的多虚拟机性能分析方法 |
CN102122256A (zh) * | 2011-03-28 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 一种用于进程间通信的管道式通信方法及系统 |
CN105868000A (zh) * | 2016-06-14 | 2016-08-17 | 上海交通大学 | 一种针对网络i/o虚拟化的并行化可扩展数据处理方法 |
Non-Patent Citations (1)
Title |
---|
《一种面向Xen虚拟计算环境的运行时内存泄露检测方法》;肖如良等;《计算机研究与发展》;20131115;第2406-2417页 |
Also Published As
Publication number | Publication date |
---|---|
CN106790599A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106790599B (zh) | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 | |
CN104965757B (zh) | 虚拟机热迁移的方法、虚拟机迁移管理装置及系统 | |
US9053068B2 (en) | RDMA-based state transfer in virtual machine live migration | |
US8819345B2 (en) | Method, apparatus, and computer program product for inter-core communication in multi-core processors | |
CN103714026B (zh) | 一种支持原址数据交换的存储器访问方法及装置 | |
CN106095604A (zh) | 一种多核处理器的核间通信方法及装置 | |
EP2662771A1 (en) | Scheduling method, and multi-core processor system | |
CN103077132B (zh) | 一种高速缓存处理方法及协议处理器高速缓存控制单元 | |
WO2007112635A1 (fr) | Système d'exploitation intégré pour carte à puce et procédé de traitement de tâche | |
US8692832B2 (en) | Para-virtualized asymmetric GPU processors | |
CN103593306A (zh) | 一种协议处理器Cache控制单元的设计方法 | |
CN108021449A (zh) | 一种协程实现方法、终端设备及存储介质 | |
US20240256477A1 (en) | Method and apparatus for processing dma, and computer-readable storage medium | |
US10481957B2 (en) | Processor and task processing method therefor, and storage medium | |
US20190012245A1 (en) | Failover Method, Apparatus and System | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
CN102855214A (zh) | 实现数据一致性的方法和一种多核系统 | |
WO2020156797A1 (en) | Handling an input/output store instruction | |
US8909892B2 (en) | Method, apparatus, and computer program product for fast context switching of application specific processors | |
CN114697194B (zh) | 阻塞式事件通知方法及装置 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
CN115756767A (zh) | 一种用于多核cpu原子操作内存的装置及方法 | |
CN103559166A (zh) | 一种多核之间的高速数据传输的方法 | |
US10198784B2 (en) | Capturing commands in a multi-engine graphics processing unit | |
US9311225B2 (en) | DMA channels |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |