发明名称 一种IP报文的硬件分流方法
摘要 本发明涉及一种IP报文的硬件分流方法,本方案利用网卡硬件对接收到的IP报文进行分流,网卡在接受IP报文的同时,抽取IP报文头中的源、目的地址,利用Hash算法计算出该IP报文所属的线程,然后DMA通道调度模块根据线程号启动DMA引擎将报文送到该线程所属的主存缓冲区中,为了支持IP报文的硬件分流策略,上层软件使得每个线程拥有一个专用的主存缓冲区,网卡启动多个接收IP包的线程与主机处理IP包的线程一一对应,主机处理IP包的线程直接从内存缓冲区获取数据进行处理,这中间的数据传输不需要CPU参与,可以降低CPU负载。本发明可支持高达1024甚至4096、8192个硬件线程,最佳配置为每个CPU核对应一个线程,这样每个线程独立工作,互不干扰,系统资源的共享竞争最少,达到最好性能。
申请公布号 CN101540727B 申请公布日期 2012.05.09
申请号 CN200910083155.5 申请日期 2009.05.05
申请人 曙光信息产业(北京)有限公司 发明人 刘朝辉;刘新春;贺志强;李永成;窦晓光
分类号 H04L12/56(2006.01)I;G06F9/50(2006.01)I;G06F13/28(2006.01)I 主分类号 H04L12/56(2006.01)I
代理机构 北京安博达知识产权代理有限公司 11271 代理人 徐国文
主权项 一种IP报文网卡硬件分流方法,所述网卡包括端口数据采集模块、DMA通道调度模块、DMA通道描述符模块、分流控制寄存器和DMA引擎,其特征在于,所述方法包括如下步骤:A、所述网卡驱动程序根据当前系统中的各个CPU的负载通过分流控制寄存器调节每个线程处理的IP报文比例,并为每个线程提供一套DMA寄存器,所述每个DMA寄存器包括缓冲区起始地址、缓冲区大小、硬件写指针和软件读指针;B、网卡驱动加载时为每个线程在内存中申请一块连续的缓冲区,并将缓冲区首地址、大小、缓冲区读写指针初始值写到网卡上每个DMA通道的对应寄存器中,使主内存与DMA寄存器形成映射关系;C、端口数据采集模块在接受IP报文的同时,抽取IP报文头中的源、目的地址,利用hash算法算出一个hash值,然后利用该hash值与对应的DMA寄存器、分流控制寄存器进行运算,最终决定每个IP报文的线程号,然后将线程号送到DMA通道调度模块;D、DMA通道调度模块根据当前报文的线程号选择相应的DMA寄存器,通过比较该DMA寄存器读写指针判断内存缓冲区是否已经用完,如果内存缓冲区有空间则启动DMA引擎将该线程号对应的报文写到对应的物理内存中,如果没有则丢弃该报文,然后将寄存器写指针增加相应的数目;E、软件每个处理线程在处理完当前数据后读网卡寄存器获取本线程的读写指针,通过比较DMA寄存器读写指针判断主机内存缓冲区是否有待处理的数据,若有数据待处理则从相应的缓冲区读出IP报文进行处理,处理完之后写DMA寄存器更新读指针,重复此步直到所有的数据都处理完毕。
地址 100084 北京市海淀区水磨西街64号