CN102761489B - 基于流水线模式的数据包零拷贝的核间通信方法 - Google Patents
基于流水线模式的数据包零拷贝的核间通信方法 Download PDFInfo
- Publication number
- CN102761489B CN102761489B CN201210246928.9A CN201210246928A CN102761489B CN 102761489 B CN102761489 B CN 102761489B CN 201210246928 A CN201210246928 A CN 201210246928A CN 102761489 B CN102761489 B CN 102761489B
- Authority
- CN
- China
- Prior art keywords
- queue
- core
- packet
- cores
- bag
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于流水线模式的数据包零拷贝的核间通信方法,所述方法产生于通用多核平台核与核间,所述通用多核平台的核作为生产者或者消费者按照流水线模式进行核间通信,其特征在于进行核间通信时还包括在每一条流水线的相邻两个核之间设置一对长度相同的、独立的包缓冲区队列;通过包缓冲区队列在作为生产者的核与作为消费者的核之间交换空、满缓冲区的步骤;当作为生产者的核将装有数据包的满缓冲区***包缓冲区队列分发队列,作为消费者的核将回收的空缓存区***包缓冲区队列回收队列;当作为生产者的核每向分发队列中***一个满缓冲区,就从回收队列中取出一个空缓冲区填入其包缓冲区环中。该方法有效解决了流水并行模式下实现零拷贝的高速网络包处理面临的包内存管理问题,通过交换机制实现了每条单流水内的包缓存管理过程。
Description
技术领域
本发明属于多核平台的核间通信技术领域,具体涉及一种基于流水线模式的数据包零拷贝的核间通信方法。
背景技术
网络设备一直以来面临着灵活性和高性能不可兼得的难题。通用多核处理器的出现为解决这个问题提供了一种可行的方案,多核处理器强大的计算能力使得利用软件获得高性能成为可能。另外,熟悉的开发平台和丰富的第三方软件资源也使得该方案极具吸引力。
流水线(Pipelining)模式是基于通用多核平台的网络***采用的并行处理技术之一。它将数据包的处理过程划分为若干个阶段,每个阶段映射到不同的物理核上完成,核与核间使用某种核间通信机制进行通信。一般,通过在流水不同阶段间传递数据包元信息实现流水处理过程中的通信过程,避免直接的数据包拷贝过程,且高速网络***中实现零拷贝的好处是显而易见的,它对于减小包处理延迟、降低CPU和总线压力、减少cache污染等有明显作用,但是也给包缓冲区管理带来了困难,尤其是采用多条流水线的多核并行包处理***,低效的包缓冲区管理的额外开销可能完全抵销零拷贝带来的好处。图1所示多条流水并行包处理***中,P0核负责从网卡接收数据包,然后通过某种负载均衡机制将数据包发送到第二级核(有n个)上处理,其中P0分配包缓冲区,P1-Pn释放包缓冲区,整个处理过程中数据包不发生包内存拷贝。
以上并行模型中的零拷贝包缓冲区管理算法的实现难点在于两个方面:(1)在10Gbps链路上,包缓冲区的分配速度应达到每秒千万量级,但目前没有一种通用多核多线程内存分配器可以达到这个速度,因此通用动态分配包缓冲区的方法不可行;(2)由于不同流水线上数据包的处理速度不同,包缓冲区释放的顺序与在P0核上分配的顺序不同,因此,如果采用多核共享缓冲队列来实现包内存管理,将导致P0核上的环缓冲器出现队头阻塞问题,影响P0核的接收速度或产生丢包。
消除队头阻塞最直接的方法是数据包拷贝,数据包拷贝可以消除生产者(P0)和消费者(P1-Pn)之间的速度耦合,并避免动态包缓冲区分配的压力,然而这与零拷贝的初衷要求不符。目前工业界的做法是分配一个巨大的包缓冲区环,环的长度保证其回绕时间大于包的生命期,这样生产者可以不断地向环中填充数据包而不用顾虑队头阻塞的问题。该方法要求很大的内存空间,且随着网络流量的增大迅速增大。另外,netmap采用交换(swap)机制解决零拷贝下包转发的包内数据缓存区管理问题,表现为源包缓冲区和目的包缓冲区的相互交换过程,但是其性能一定程度上依赖于网卡硬件缓冲区,而且单向(非包转发接收、发送构成的双向结构)结构的性能有限。因此,上述基本的流水并行结构下,解决高速网络面临的包内存管理压力仍然存在挑战,本发明因此而来。
发明内容
本发明目的在于提供一种基于流水线模式的数据包零拷贝的核间通信方法,解决了基于流水并行模型的核间通信提供满足零拷贝的高效包内存管理方法。
为了解决现有技术中的这些问题,本发明提供的技术方案如下:
一种基于流水线模式的数据包零拷贝的核间通信方法,所述方法产生于通用多核平台核与核间,所述通用多核平台的核作为生产者或者消费者按照流水线模式进行核间通信,其特征在于进行核间通信时还包括在每一条流水线的相邻两个核之间设置一对长度相同的、独立的包缓冲区队列;通过包缓冲区队列在作为生产者的核与作为消费者的核之间交换空、满缓冲区的步骤;当作为生产者的核将装有数据包的满缓冲区***包缓冲区队列分发队列,作为消费者的核将回收的空缓存区***包缓冲区队列回收队列;当作为生产者的核每向分发队列中***一个满缓冲区,就从回收队列中取出一个空缓冲区填入其包缓冲区环中。
优选的,所述方法中包缓冲区队列采用并发无锁队列(ConcurrentLock-free Queue,CLF)实现。
优选的,所述方法中分发队列用于传输要处理的包缓冲区元信息,回收队列用于传输空闲的包缓冲区元信息。
优选的,所述方法中回收队列中预填充的空闲缓冲区数量设置为回收队列大小减去批处理长度或一个Cache line长度。
优选的,所述方法中包缓冲区元信息进行压缩处理。
优选的,所述方法中当元信息包含至少两个地址时,对出(入)队指令进行优化处理。
本发明提供了支持零拷贝的高效包缓冲区管理方法,通过设计称为BIFIFO(Bi-First In First Out Queues,BIFIFO)的高性能包缓存管理算法,该算法通过独立管理每条流水线的包缓冲区。这么做的目的是避免引入全局的包缓冲区管理机制,以免在生产者一侧产生队头阻塞问题和加剧核间通信冲突。
对于每条流水线,使用两条长度相同的、独立的包缓冲区队列在生产者和消费者之间交换空、满缓冲区(因此取名为BIFIFO)。采用空、满缓冲区交换是为了避免动态分配包缓冲区的开销,每对生产者-消费者单独使用一条回收队列是为了避免使用共享回收队列(池)而产生的多生产者-单消费者问题。本发明优选采用高性能高速缓存优化的并发无锁队列(ConcurrentLock-free Queue,CLF)实现包缓冲区队列,以提高生产者和消费者之间的通信效率。每一条流水线的相邻两个阶段用一对无锁队列(BIFIFO)连接,分发队列用于传输要处理的包缓冲区元信息,回收队列用于传输空闲包缓冲区元信息。
相对于现有技术中的方案,本发明的优点是:
本发明有效解决了流水并行模式下实现零拷贝的高速网络包处理面临的包内存管理问题,它通过无锁先进先出队列避免了不同流水阶段包内存分配和释放的显示同步过程,通过划分流水并行全局包内存管理为多条独立的单流水包内存管理避免了全局的包管理竞争,通过交换机制实现了每条单流水内的包缓存管理过程,同时精心设计的回收队列的填充度不仅保证了单生产者可以在某个消费者阻塞时也能顺利的完成数据包的分配,而且优化了无锁先进先出队列的高速缓存性能。
实验显示,由BIFIFO构成的七条并发流水***最高实现了67Mpps(Million Packets per Second)的数据包分发速度,意味着采用BIFIFO的单生产者可以同时为七条流水提供67Mpps的数据包分配速度,远远超过了传统的内存分配器性能。
附图说明
下面结合附图及实施例对本发明作进一步描述:
图1为现有技术中基本流水并行策略;
图2为本发明基于流水线模式的数据包零拷贝的核间通信方法的BIFIFO结构;
图3为由BIFIFO构成多核并行网络处理***。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例
本实施例高性能包缓存管理算法通过独立管理每条流水线的包缓冲区。这么做的目的是避免引入全局的包缓冲区管理机制,以免在生产者一侧产生队头阻塞问题和加剧核间通信冲突。对于每条流水线,使用两条长度相同的、独立的包缓冲区队列在生产者和消费者之间交换空、满缓冲区(因此取名为BIFIFO)。如图2所示,生产者将装有数据包的缓冲区***分发队列Q0,消费者将回收的包缓存区***回收队列Q1;生产者每向Q0中***一个满缓冲区,就从Q1中取出一个空缓冲区填入其包缓冲区环中。采用空、满缓冲区交换是为了避免动态分配包缓冲区的开销,每对生产者-消费者单独使用一条回收队列是为了避免使用共享回收队列(池)而产生的多生产者-单消费者问题。
本发明优选采用高性能高速缓存优化的并发无锁队列(ConcurrentLock-free Queue,CLF)实现包缓冲区队列,以提高生产者和消费者之间的通信效率。图3是利用BIFIFO建立的多核并行网络处理***的示意图。每一条流水线的相邻两个阶段用一对无锁队列(BIFIFO)连接,分发队列用于传输要处理的包缓冲区元信息,回收队列用于传输空闲包缓冲区元信息。
(1)BIFIFO回收队列填充度
在1-n型流水线模型中,一个生产者要向多个消费者分发数据包。为避免某个较慢的消费者阻塞生产者,应消除生产者和消费者之间的速度耦合。由于生产者每向分发队列中写入一个满缓冲区,就要从回收队列中取回一个空缓冲区,要消除生产者和消费者之间的速度耦合,就是要保证生产者每写入一个满缓冲区,总是能够从回收队列中取到一个空缓冲区。因此,回收队列中应预先填充一定数量的空闲缓冲区,而且空闲缓冲区数量越多,越能够弥补生产者和消费者之间的速度差异。但是根据并发无锁队列的研究成果,当队列接近空或接近满时,都容易产生cache颠簸,因此回收队列不能填满。为避免cache颠簸,回收队列中预填充的空闲缓冲区数量可设置为回收队列大小减去批处理长度或一个Cache line长度。
(2)BIFIFO元素压缩存储
BIFIFO中传输的包缓冲区元信息一般包括两类数据包地址和包长度,因此为优化访存开销,我们对包缓冲区元信息进行压缩,减少访存次数,优化处理器cache利用效率。在目前的64位机器中,地址实际上只使用了48位,为此将数据包长度(16位)的两个字节分别填充到两个地址的高位,这样每个包缓冲区元信息只使用16B,一个cache行可以容纳4个包缓冲区元信息。
优化出(入)队指令数目和BIFIFO队列元素访存局部性。BIFIFO采用的无锁先进先出队列算法部分实现只能支持单地址元素信息的传输,因此当大元素(元信息包含两个地址甚至更多)作为队列元素,本实施例采取了两类对比方案:
A)如下所示为调用两次基本出入队函数的操作示意代码:
该调用两次基本出入队函数算法利用基本无锁队列的出入对操作依次连续入(出)队两个地址信息。这种方法可以确保BIFIFO算法的正确性,因为基本无锁算法的正确性确保了数据传递的正确性。但是,这种方法使得每次出(入)队操作需要执行两次基本的数据出(入)队操作。
B)如下所示为优化后的连续读写两个元素的操作示意代码:
该方法修改基本无锁队列(Lock Free FIFO)出(入)队算法,使其支持大元素数据包的出(入)队操作。这种优化了BIFIFO大元素出(入)对操作的平均开销。经比较试验证实,出(入)队同一大元素,A方法要求两次独立的出队(入)队操作,执行入队指令数几乎是B方法的两倍;B方法比A方法具有更优的BIFIFO队列元素访存局部性,因为B方法中集中连续读/写BIFIFO队列元素。实验显示,这种优化对BIFIFO***性能约有10%性能的提升。
在实际实施时,可以首先通过静态数组方式或者运行时动态内存分配机制实现BIFIFO的内存分配任务。每条流水对应两个BIFIFO队列,分别为分发队列Q0和回收队列Q1,1-n的流水共分配n条BIFIFO队列。每对BIFIFO队列具体分配内存大小依据队列元素字节大小和预分配的队列长度(元素总数),总队列大小等于队列长度乘以队列元素字节大小的两倍。
由于BIFIFO两个无锁队列元素内容根据实际的应用环境不同而不同,且分发队列Q0和回收队列Q1内的队列元素分别代表了有效数据包和空闲数据包,因此内容也不相同,此处假定BIFIFO的分发队列元素Q0包含两个数据包地址信息和一个数据包长度信息,Q1队列包含两个地址信息。
BIFIFO队列初始化时,重点在于初始化通信队列Q0和回收队列Q1两个队列,其中Q0队列用于流水两个阶段的通信过程,即从第一流水阶段传输有效数据包到下一流水阶段,因此初始化时清空Q0队列,表明初始化时无有效数据包;而对于回收队列Q1,根据BIFIFO优化原则和选择的无锁队列算法进行初始化,利用空闲数据包内存单元信息最大限度填充Q1队列元素,其中具体的填充度的原则是(1)避免生产者和消费者之间的无锁队列访存伪共享,且保证无锁算法的不出现死锁现象;(2)满足(1)条件后,最大限度填充回收队列Q1。对该发明的保护不能仅限于该填充度,略少于或者其他填充度均应在保护范围,不可以通过设置不同的填充度来规避保护范围。
当数据包从流水线到下一阶段处理时,***有效数据包元信息到通信队列数据包Q0,为了提高通信队列Q0的空间利用效率来优化性能,采用数据包元信息压缩的办法,把数据包长度信息压缩到64位地址信息的高位,用压缩后的数据包元信息填充数Q0通信队列。作为Q0队列的生产者,它在***有效数据包到Q0队列后,通过从Q0对应的BIFIFO的回收队列Q1的出队操作完成空闲数据包内存的分配过程。当数据包在Q0的消费者端被处理完后,构造并***空闲数据包元信息到Q1队列中实现数据包的回收过程。
具体BIFIFO队列操作(出队和入队操作)通过基本的无锁队列算法队列操作构造完成。对于支持两个地址大小的队列元素的无锁队列算法,其队列操作(出队和入队操作)无需任何修改即可作为BIFIFO的队列操作;对于仅支持一个地址元素大小的无锁队列算法,可以通过封装两次基本的连续入(出)队操作,构成BIFIFO的出(入)队操作,为了进一步提高效率可以通过修改基本无锁队列算法使其支持两个地址大小的队列操作,从而应用到BIFIFO环境中。
以FastForward无锁队列算法为例,当队列传输元素字节大小不超过data数据类型字节大小,BIFIFO队列操作完全可以采用不经修改的基本FastForward队列的队列操作;相反,当队列传输元素字节大小超过data数据类型字节大小,BIFIFO队列操作过程可以通过封装连续多次基本出(入)队操作来实现,或者直接改动FastForward的data数据类型,使得支持BIFIFO队列元素类型。其典型的入队操作代码如下所示:
典型的出队操作代码如下所示:
上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
Claims (6)
1.一种基于流水线模式的数据包零拷贝的核间通信方法,所述方法产生于通用多核平台核与核间,所述通用多核平台的核作为生产者或者消费者按照流水线模式进行核间通信,其特征在于进行核间通信时还包括在每一条流水线的相邻两个核之间设置一对长度相同的、独立的包缓冲区队列;通过包缓冲区队列在作为生产者的核与作为消费者的核之间交换空、满缓冲区的步骤;当作为生产者的核将装有数据包的满缓冲区***包缓冲区队列分发队列,作为消费者的核将回收的空缓存区***包缓冲区队列回收队列;当作为生产者的核每向分发队列中***一个满缓冲区,就从回收队列中取出一个空缓冲区填入包缓冲区环中。
2.根据权利要求1所述的方法,其特征在于所述方法中包缓冲区队列采用并发无锁队列Concurrent Lock-free Queue实现。
3.根据权利要求1所述的方法,其特征在于所述方法中分发队列用于传输要处理的包缓冲区元信息,回收队列用于传输空闲的包缓冲区元信息。
4.根据权利要求1所述的方法,其特征在于所述方法中回收队列中预填充的空闲缓冲区数量设置为回收队列大小减去批处理长度或一个Cacheline长度。
5.根据权利要求1所述的方法,其特征在于所述方法中包缓冲区元信息进行压缩处理。
6.根据权利要求1所述的方法,其特征在于所述方法中当元信息包含至少两个地址时,对出/入队指令进行优化处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210246928.9A CN102761489B (zh) | 2012-07-17 | 2012-07-17 | 基于流水线模式的数据包零拷贝的核间通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210246928.9A CN102761489B (zh) | 2012-07-17 | 2012-07-17 | 基于流水线模式的数据包零拷贝的核间通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102761489A CN102761489A (zh) | 2012-10-31 |
CN102761489B true CN102761489B (zh) | 2015-07-22 |
Family
ID=47055815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210246928.9A Expired - Fee Related CN102761489B (zh) | 2012-07-17 | 2012-07-17 | 基于流水线模式的数据包零拷贝的核间通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102761489B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103995689A (zh) * | 2013-02-16 | 2014-08-20 | 长沙中兴软创软件有限公司 | 一种实现信息接收后分发的流水线并行计算的方法 |
CN104639525A (zh) * | 2014-06-30 | 2015-05-20 | 北京阅联信息技术有限公司 | 一种用于数据处理通道缓冲匹配的属性标识方法 |
CN105094751B (zh) * | 2015-07-20 | 2018-01-09 | 中国科学院计算技术研究所 | 一种用于流式数据并行处理的内存管理方法 |
US9838321B2 (en) * | 2016-03-10 | 2017-12-05 | Google Llc | Systems and method for single queue multi-stream traffic shaping with delayed completions to avoid head of line blocking |
CN107786320B (zh) * | 2016-08-25 | 2021-06-22 | 华为技术有限公司 | 一种发送和接收业务的方法、装置和网络*** |
CN107729057B (zh) * | 2017-06-28 | 2020-09-22 | 西安微电子技术研究所 | 一种在多核dsp下的数据块多缓冲流水处理方法 |
CN107864391B (zh) * | 2017-09-19 | 2020-03-13 | 北京小鸟科技股份有限公司 | 视频流缓存分发方法及装置 |
CN107682424A (zh) * | 2017-09-23 | 2018-02-09 | 湖南胜云光电科技有限公司 | 一种针对海量数据高效缓存及管理的方法 |
CN109683962B (zh) * | 2017-10-18 | 2023-08-29 | 深圳市中兴微电子技术有限公司 | 一种指令集模拟器流水线建模的方法及装置 |
CN108170758A (zh) * | 2017-12-22 | 2018-06-15 | 福建天泉教育科技有限公司 | 高并发数据存储方法及计算机可读存储介质 |
CN110297719A (zh) * | 2018-03-23 | 2019-10-01 | 北京京东尚科信息技术有限公司 | 一种基于队列传输数据的方法和*** |
CN110147254A (zh) * | 2019-05-23 | 2019-08-20 | 苏州浪潮智能科技有限公司 | 一种数据缓存处理方法、装置、设备及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012791A (zh) * | 2010-10-15 | 2011-04-13 | 中国人民解放军国防科学技术大学 | 基于Flash的数据存储PCIE板卡 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8737417B2 (en) * | 2010-11-12 | 2014-05-27 | Alcatel Lucent | Lock-less and zero copy messaging scheme for telecommunication network applications |
-
2012
- 2012-07-17 CN CN201210246928.9A patent/CN102761489B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012791A (zh) * | 2010-10-15 | 2011-04-13 | 中国人民解放军国防科学技术大学 | 基于Flash的数据存储PCIE板卡 |
Also Published As
Publication number | Publication date |
---|---|
CN102761489A (zh) | 2012-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102761489B (zh) | 基于流水线模式的数据包零拷贝的核间通信方法 | |
CN100403739C (zh) | 基于链表的进程间消息传递方法 | |
CN100573497C (zh) | 一种多核多操作***之间的通信方法及*** | |
CN105577567B (zh) | 基于Intel DPDK的网络数据包并行处理方法 | |
CN103914399B (zh) | 一种并行计算***中的磁盘缓存方法及装置 | |
CN107679621A (zh) | 人工神经网络处理装置 | |
CN104126179B (zh) | 用于多核处理器中的核心间通信的方法和装置 | |
US20150127880A1 (en) | Efficient implementations for mapreduce systems | |
CN104394096B (zh) | 一种基于多核处理器的报文处理方法及多核处理器 | |
US11496419B2 (en) | Reliable transport offloaded to network devices | |
CN102331923A (zh) | 一种基于多核多线程处理器的功能宏流水线实现方法 | |
CN106537858B (zh) | 一种队列管理的方法和装置 | |
CN105389277A (zh) | Gpdsp中面向科学计算的高性能dma部件 | |
CN102541803A (zh) | 数据发送方法和计算机 | |
CN102880587A (zh) | 基于嵌入式加速核心的独立显卡架构 | |
CN108984280A (zh) | 一种片外存储器的管理方法和装置、计算机可读存储介质 | |
CN102375789B (zh) | 一种通用网卡非缓存的零拷贝方法及零拷贝*** | |
CN102571580A (zh) | 数据接收方法和计算机 | |
CN105426260A (zh) | 一种支持分布式***的透明进程间通信***及方法 | |
Nicolae et al. | Towards memory-optimized data shuffling patterns for big data analytics | |
CN109964211A (zh) | 用于半虚拟化网络设备队列和存储器管理的技术 | |
CN103731364A (zh) | 基于x86平台实现万兆大流量快速收包的方法 | |
US9304706B2 (en) | Efficient complex network traffic management in a non-uniform memory system | |
CN104769553A (zh) | 用于支持集群中的工作共享复用的***和方法 | |
CN104468417B (zh) | 一种堆叠交换机报文传输方法、***及堆叠交换机 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150722 Termination date: 20180717 |
|
CF01 | Termination of patent right due to non-payment of annual fee |