专利名称:内核间报文描述消息的传递方法
技术领域:
本发明涉及多内核处理器中内核间的通信方法,更具体的说,本发明涉及一种多内核处理器中内核间报文描述消息的传递方法。
背景技术:
随着信息技术的发展,处理器处理的数据流量越来越大。传统单个处理内核的处理器已无法满足处理性能的要求。因此出现了多个处理内核的处理器,在这种多内核的处理器中,习惯上把一个特定的功能模块在一个处理内核中实现,这一类处理器的内核使用公共的动态随机存取存储器(DRAM,Dynamic Random-Access Memory)、静态随机存取存储器(SRAM,SynchronousRandom-Access Memory)等资源存储处理的数据报文,这样不同的处理内核之间数据报文的传递,并不需要进行数据报文的完整传递,参考图1所示,只需要把数据报文的属性(如数据的存放索引等)等报文描述消息传送给下一个内核的相应模块即可。
良好的消息传送机制是发挥多内核处理器性能的重要因素,由于各个内核模块间的消息传递量很大,因此需要使用高效的消息传递方法,保证内核模块之间消息的高速和可靠传递。
参考图2所示,现有技术中采用ring的方法实现在内核间传送报文描述消息,以内核CPU和内核ME之间的通信为例进行说明,CPU和ME之间的通信是通过两个环形队列(ring)来实现的,两个环形队列的结构一致,由128个entry组成,每个ring由两个指针(读和写),其中ME和CPU各维护一个。
其中ring entry的结构如表一所示表一
ENTRY结构中各个长字详细定义如表二所示表二
根据上述的entry结构,具体的报文描述消息传递流程分为接收端和发送端分别描述如下接收端1)若read_ptr!=write_ptr,开始接收read_ptr指向的entry的报文描述消息。
2)若entry中的D字段为真,处理entry中的buffer pointer指向的报文描述消息,若D标志为假,等待发送端把entry中D字段设置为真。
3)当前entry接收处理完成,把entry中R字段置为真,D字段置为假,read_ptr加一。
4)返回1)继续接收。
发送端1)如果read_ptr!=write_ptr+1,向write_ptr指向的entry发送报文描述消息。
2)释放entry中上次接收完的buffer pointer,如果buffer pointer被接收端修改,可能导致buffer pointer丢失。
3)如果entry中的R字段为真,向entry中的相应消息字段填写报文描述消息,如果所述的R字段为假,等待接收端把R字段设置为真。
4)当前entry发送处理完成,把D字段置为真,R字段设置为假,write_ptr加一。
5)返回1)继续接收。
上述现有技术存在如下的缺点首先,根据上述的entry结构,报文描述消息读写控制域中包括R、D、S、E字段,在对所述的R、D、S字段的处理时会造成ring异常吊死。例如接收端内核如果发现read_ptr不等于write_ptr,认为消息需要接收,但是entry中的D字段(因为误操作)没有设置成真,则接收端内核会在当前entry一直等待,使ring吊死;反之如果发送端出现R字段设置错误,处理也会停止。
其次,上述现有技术中若对entry结构的R、D字段处理异常或buffer不释放,可能导致buffer丢失,使报文的处理出现问题。
再次,由于报文缓存地址buffer addr和R、D、S、E设置在一个长字中,具体处理时,内核读写该长字可能导致该长字错误(例如CPU通过PCI读写该长字),使报文缓存地址丢失。例如在对R、D、S、E等字段的操作中可能造成buffer pointer的错误(由于在一个长字中,误操作难以避免),正确的bufferpointer指向的缓存buffer将会丢失。
发明内容
本发明解决的技术问题是提供一种内核间报文描述消息的传递方法,以避免传递消息的环形队列异常吊死。
为解决上述问题,本发明提供的内核间报文描述消息的传递方法,包括A、在所述的环形队列的每项入口entry的报文描述消息读写控制域中仅设置标识一个报文结束的报文结束字段;
B、通过所述的报文结束字段将传递的各个报文的报文描述消息写入环形队列中;C、通过所述的报文结束字段从所述的环形队列中读取传递的各个报文的报文描述信息。
其中,步骤B包括B1、对环形队列进行初始化,分配该环形队列各个入口entry的缓存地址;B2、发送报文描述信息时,获取所述的环形队列写指针指向的entry的缓存地址;B3、获取报文描述信息内容;B4、将所述的报文描述信息内容写入写指针指向的entry的相应字段中;B5、一个报文的报文描述消息写入完毕,将缓存该报文最后一个报文描述消息的entry中报文结束字段置为真。
其中,步骤C包括C1、接收报文描述消息时,获取所述的环形队列读指针指向的entry的缓存地址;C2、从所述的读指针指向的entry的缓存地址的entry相应字段中读取报文描述消息;C3、检测到entry中报文结束字段为真,则接收该entry中的报文描述消息后,读取一个报文的报文描述消息完毕。
其中,所述的报文描述消息包括报文缓存地址、地址偏移、报文类型、报文长度和报文连接特性。
其中,所述的环形队列的每项入口entry中以一个长字标识所述的报文缓存地址。
其中,所述的环形队列的入口entry包括如下字段
长字0,标识报文结束的报文结束字段、保留字段和地址偏移字段;长字1,报文连接特性字段;长字2,报文类型字段和报文长度字段长字3,报文缓存地址字段。
与现有技术相比,本发明具有以下有益效果首先,本发明的环形队列ring的entry结构中报文描述消息读写控制域中仅设置标识一个报文结束的报文结束字段,各个内核都根据所述的报文结束字段进行报文描述消息的接收和发送,因此可避免现有技术中对R、D和S字段处理造成的ring异常吊死问题;其次,本发明中ring的entry结构中没有设置R、D字段,可避免现有技术中若R、D字段处理异常或buffer不释放,导致buffer丢失,进一步使报文处理出现的问题情况;再次,本发明中ring的entry结构中以一个单独的长字标识报文缓存地址,报文结束字段E设置在另一个长字中,由内核读写该E字段所在的长字时,即使读写该长字错误,也不会出现报文缓存地址buffer addr丢失的问题。
图1是现有技术多内核处理器中内核间传递报文描述消息的示意图;图2是现有技术中内核间以环形队列进行通信的示意图;图3是本发明内核间报文描述消息的传递方法中内核间以环形队列进行通信的示意图;图4是本发明内核间报文描述消息的传递方法中根据读写指针进行消息读写的示意图;
图5是本发明内核间报文描述消息的传递方法中向ring中写入报文描述消息的流程图;图6是本发明内核间报文描述消息的传递方法中从ring中读取报文描述消息的流程图。
具体实施例方式
参考图3,本发明中内核之间的报文描述消息传递通过ring进行,每个内核拥有一个ring供且仅供本内核取报文描述消息进行处理,但是每个ring的报文描述消息可以由多个内核提供,具体的,本发明中应用的ring是一种环形队列,一般由N个entry组成,访问N后归0。Ring的访问位置和许可由两个指针write_ptr、read_ptr维护,write_ptr为当前写的指针,read_ptr为当前读的指针。
参考图4,本发明中Ring满的状态为write_ptr=read_ptr-1。Ring空的状态为write_ptr=read_ptr。发送方只要ring不是满的状态就可以往write_ptr指向的ring entry中写消息。接收方只要ring不是空的状态就应该从read_ptr指向的ringentry中读数据。
本发明中所述的环形队列的每项入口entry的报文描述消息读写控制域中仅设置标识一个报文结束的报文结束字段;具体发送消息时,通过所述的报文结束字段将传递的各个报文的报文描述消息写入环形队列中;接收消息时,同样以所述的报文结束字段从所述的环形队列中读取传递的各个报文的报文描述信息。由于读写报文描述消息的内核都仅根据报文结束字段进行消息读写,各个内核的操作流程一致,不会出现ring异常问题。
通常在内核之间传送的是报文,传递一个报文需要的报文描述消息通常包括报文存放的buffer的地址、偏移,以便用于找到报文的内容;如果报文存放在多个buffer,报文的结束标志,用于定界一个完整报文。
报文类型、长度以及连接特性(对于ATM报文,连接特性包括PVC信息等)。
本发明中同样需要通过在ring的entry结构中设置相应的消息字段存储上述的报文描述消息。
下面以内核间传递ATM报文的具体例子进行说明。
本实施例中ring的entry可以设置如表三所示表三
其中各个长字的定义如表四所示表四
上述ring的entry结构中报文描述消息的控制指示域中仅设置报文结束字段E,另外,报文缓存地址Free_Buffer_Address单独设置在一个长字中(本实施例设置在长字3)。
下面具体说明根据上述ring的entry结构进行报文描述消息的传递流程。
本发明中需要对ring进行初始化操作,给ring的各个entry分配一个缓存buffer,并计算该缓存buffer的缓存地址buffer_addr,然后封装entry的缓存地址buffer_addr,设置该entry的其他字段为0。
参考图5,该图是本发明内核间报文描述消息的传递方法中向ring中写入报文描述消息的流程图,具体的,向ring中写入报文描述消息主要包括如下步骤在步骤10,发送报文描述信息时,获取所述的环形队列写指针指向的entry的缓存地址;然后在步骤11,获取报文缓存地址、地址偏移、报文类型和报文连接特性等的报文描述消息;进一步在步骤12,将报文缓存地址、地址偏移、报文类型和报文连接特性等的报文描述消息写入写指针指向的entry的相应消息字段中;最后在步骤13,一个报文的报文描述消息写入完毕,将缓存该报文最后一个报文描述消息的entry中报文结束字段置为真。
参考图6,该图是本发明内核间报文描述消息的传递方法中从ring中读取报文描述消息的流程图。从ring接收报文描述消息主要包括以下步骤在步骤20,接收报文描述信息时,获取所述的环形队列读指针指向的entry的缓存地址;在步骤21,从所述的读指针指向的entry的缓存地址的entry相应消息字段中读取报文描述信息;在步骤22,检测到entry中报文结束字段为真,则接收该entry中的报文描述信息后,读取一个报文的报文描述消息完毕。
以上所述仅为本发明的优选实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
权利要求
1.一种内核间报文描述消息的传递方法,所述的内核间以环形队列进行通信,通过所述的环形队列的读指针和写指针控制进行传递的各个报文的报文描述消息的接收和发送,其特征在于,包括A、在所述的环形队列的每项入口entry的报文描述消息读写控制域中仅设置标识一个报文结束的报文结束字段;B、通过所述的报文结束字段将传递的各个报文的报文描述消息写入环形队列中;C、通过所述的报文结束字段从所述的环形队列中读取传递的各个报文的报文描述信息。
2.根据权利要求1所述的内核间报文描述消息的传递方法,其特征在于,步骤B包括B1、对环形队列进行初始化,分配该环形队列各个入口entry的缓存地址;B2、发送报文描述信息时,获取所述的环形队列写指针指向的entry的缓存地址;B3、获取报文描述信息内容;B4、将所述的报文描述信息内容写入写指针指向的entry中;B5、一个报文的报文描述消息写入完毕,将缓存该报文最后一个报文描述消息的entry中报文结束字段置为真。
3.根据权利要求2所述的内核间报文描述消息的传递方法,其特征在于,步骤C包括C1、接收报文描述消息时,获取所述的环形队列读指针指向的entry的缓存地址;C2、从所述的读指针指向的entry中读取报文描述消息;C3、检测到entry中报文结束字段为真,则接收该entry中的报文描述消息后,读取一个报文的报文描述消息完毕。
4.根据权利要求1-3任一项所述的内核间报文描述消息的传递方法,其特征在于,所述的报文描述消息包括报文缓存地址、地址偏移、报文类型、报文长度和报文连接特性。
5.根据权利要求4所述的内核间报文描述消息的传递方法,其特征在于,所述的环形队列的每项入口entry中以一个长字标识所述的报文缓存地址。
6.根据权利要求5所述的内核间报文描述消息的传递方法,其特征在于,所述的环形队列的入口entry包括如下字段长字0,标识报文结束的报文结束字段、保留字段和地址偏移字段;长字1,报文连接特性字段;长字2,报文类型字段和报文长度字段长字3,报文缓存地址字段。
全文摘要
本发明公开一种内核间报文描述消息的传递方法,所述的内核间以环形队列进行通信,通过所述的环形队列的读指针和写指针控制进行待传送的各个报文的报文描述消息的接收和发送,该方法包括在所述的环形队列的每项入口entry的报文描述消息读写控制域中仅设置标识一个报文结束的报文结束字段;通过所述的报文结束字段将传递的各个报文的报文描述消息写入环形队列中;通过所述的报文结束字段从所述的环形队列中读取传递的各个报文的报文描述信息。本发明由于仅设置报文结束字段,可避免ring吊死问题。
文档编号H04L12/42GK1842056SQ20051006258
公开日2006年10月4日 申请日期2005年3月31日 优先权日2005年3月31日
发明者张少雄 申请人:华为技术有限公司