当前位置: 技术问答>linux和unix
一个纯技术问题困扰我很久,望热心的高手和斑竹解答!!
来源: 互联网 发布时间:2016-11-06
本文导语: 这个问题是高速抓包的问题,将其分解为如下(PS:本人是在校学生自己盘东西,和方滨兴还有gfw无任何关系): 1.现在存在一个系统通过改动过的linux内核和驱动进行高速收包并且通过mmap映射到用户空间进行处理,...
这个问题是高速抓包的问题,将其分解为如下(PS:本人是在校学生自己盘东西,和方滨兴还有gfw无任何关系):
1.现在存在一个系统通过改动过的linux内核和驱动进行高速收包并且通过mmap映射到用户空间进行处理,但是用户空间和网卡收包不同步(不存在通信),只是不停得通过while循环去读映射过来的那段内存,有包就拿,没包就空转,所以CPU一直是100%的使用率非常不划算,有没有一种可以动态读取这片映射过来的内存的机制(或者一种动态通信机制),让包过来以后就收而不需要一直监视这片内存。
2.假如用while循环进行poll内存的这个poll的间隙有什么讲究,可以自己设置吗?
3.epoll可以使用在这种情况下吗,但是最好不使用系统调用太费资源了。
最后谢谢大家的帮助。
1.现在存在一个系统通过改动过的linux内核和驱动进行高速收包并且通过mmap映射到用户空间进行处理,但是用户空间和网卡收包不同步(不存在通信),只是不停得通过while循环去读映射过来的那段内存,有包就拿,没包就空转,所以CPU一直是100%的使用率非常不划算,有没有一种可以动态读取这片映射过来的内存的机制(或者一种动态通信机制),让包过来以后就收而不需要一直监视这片内存。
2.假如用while循环进行poll内存的这个poll的间隙有什么讲究,可以自己设置吗?
3.epoll可以使用在这种情况下吗,但是最好不使用系统调用太费资源了。
最后谢谢大家的帮助。
|
1. poll机制。
2. 可以。影响poll()的行为。
3. 应该可以。http://blogold.chinaunix.net/u3/94284/showart_1917208.html
有事,问google。
2. 可以。影响poll()的行为。
3. 应该可以。http://blogold.chinaunix.net/u3/94284/showart_1917208.html
有事,问google。
|
没用sleep的问题
|
用同步机制试试,包来的同时给负责收包的进程发一个信号!让它立即收包
|
在驱动中加入poll,有数据在读取。