[发明专利]一种零拷贝接收报文的方法和系统有效
申请号: | 201110361904.3 | 申请日: | 2011-11-15 |
公开(公告)号: | CN102402487A | 公开(公告)日: | 2012-04-04 |
发明(设计)人: | 刘彤 | 申请(专利权)人: | 北京天融信科技有限公司 |
主分类号: | G06F12/08 | 分类号: | G06F12/08;H04L12/56 |
代理公司: | 工业和信息化部电子专利中心 11010 | 代理人: | 梁军 |
地址: | 100085 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 拷贝 接收 报文 方法 系统 | ||
技术领域
本发明涉及高速网络收包领域,尤其涉及一种零拷贝接收报文的方法和系统。
背景技术
在Linux操作系统中,用户态程序捕获网卡接收到的数据包一般是通过套接字相关的系统调用:网卡通过DMA(Direct Memory Access,直接内存存取)机制将网络数据包接收到内核空间,进程通过读套接字将数据从内核空间复制到用户空间。在这种模式下,用户进程接收数据需要一次从内核到用户空间的数据复制。在高速网络中,大量的数据拷贝极大的消耗了CPU资源,系统调用会引起操作系统上下文切换,降低了系统性能。
为了解决这个问题,目前存在一种零拷贝技术,该零拷贝的思想是:数据包在从网卡到达用户空间的过程中,通过硬件DMA技术和操作系统MMAP(Memory Map)技术,将报文直接送到用户空间,实现CPU的零参与,彻底消除CPU在这方面的损耗。上述零拷贝技术需要修改网卡驱动,当网卡驱动升级时,还需要做相应的修改。
具体地,现在的零拷贝普遍采用的做法,如图1所示,包括:先在内核中分配一片固定的空间,将这块空间分成多个固定长度的数据块,组成一个队列;然后修改网卡驱动程序,更改为接收缓冲区分配内存的函数,所有内存都从上述队列中分配;调用MMAP系统调用将上述队列映射到用户空间;网卡驱动收到数据后,给数据块设置标记,表示数据接收完成;用户空间根据标记,直接读取数据。
然而,上述零拷贝技术存在以下缺陷:
上述的零拷贝技术可以应用于IDS(Intrusion Detection System,入侵检测系统)等监听性质的应用中。因为IDS只需要简单的将报文送到IDS检测引擎,不需要经过其他模块。但是在UTM(Unified Threat Management,企业上网安全隐患)中,由于数据在送到运行于用户空间的IPS(Intrusion Protection System,互联网协议群)等引擎时,要经过TCP/IP协议栈,在协议栈里完成IP碎片重组等操作,导致报文长度、位置发生变化,不再处于上述的队列中,从用户空间就无法读取这段数据。且上述的固定空间由于大小受限制,在网络突发高峰的时候,会产生缓冲区不足导致丢包的情况。
发明内容
本发明提供一种零拷贝接收报文的方法和系统,用以解决现有技术中采用的零拷贝技术不能读取缓冲区中变化的数据,以及在网络高峰期时由于缓冲区不足导致丢包等问题。
为了解决上述技术问题,本发明采用的技术方案如下:
一方面,本发明提供一种零拷贝接收报文的方法,包括:
用户态进程打开预先创建的虚拟字符设备,调用所述虚拟字符设备提供的mmap方法;内核态进程在所述mmap方法被调用时,将所有内核低端空间映射到用户空间,并为所述内核低端空间的结构vm_area_struct设置nopage方法;
内核态进程在网卡设备接收到数据包时,基于所述数据包在所述内核低端空间中的地址,得到数据包存储偏移地址后传递给用户态进程;
用户态进程根据所述偏移地址计算得到待访问的虚拟地址,并在访问所述虚拟地址时,触发CPU缺页异常,使得操作系统调用所述nopage方法得到要访问的物理地址对应的页目录和页表项;
用户态进程基于所述页目录和页表项,读取存储在所述内核低端空间内的所述数据包。
进一步地,本发明所述方法中,所述用户态进程根据所述偏移地址计算得到待访问的虚拟地址的方式包括:
所述用户态进程将所述数据包的存储偏移地址加上映射的用户空间地址,得到读取所述数据包所需访问的虚拟地址。
进一步地,本发明所述方法中,所述操作系统调用所述nopage方法得到要访问的物理地址对应的页目录和页表项,具体包括:
操作系统将要访问的所述虚拟地址减去所述用户空间的起始虚拟地址,得到一个偏移地址,并根据该偏移地址得到要访问的物理地址;
操作系统将所述物理地址右移PAGE_SHIFT位转换成页帧号,再调用pfn_to_page函数返回page结构指针;
操作系统取得所述page结构指针后,为所述物理地址设置页目录和页表项。
进一步地,本发明所述方法中,所述操作系统调用所述nopage方法得到要访问的物理地址对应的页目录和页表项前,还包括:
所述操作系统调用缺页异常处理函数检测所述虚拟地址所在用户空间的合法性,当所述用户空间合法时,调用所述nopage方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京天融信科技有限公司,未经北京天融信科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110361904.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:多穴位高精密注塑模具
- 下一篇:塑料排水板热熔式自动剪切机