我对基于设备轮询,PF

    技术2022-05-12  28

    我们在试验中,采用了NAPI技术,PF_RING技术,MMAP技术,RTIRQ技术。在网卡抓包的时候,未采用NAPI的程序在每个包到达时,由网卡硬件触发内核中断。这样,如果在高流量gbit情况下,内核忙于处理由频繁的中断而引发的现场保存和恢复,而无暇处理其他,导致包的丢失。现在采用NAPI技术(需要网卡支持和版本在2.4.23以上的内核),由操作系统采用轮询的方式来处理中断,即中断的控制权交给操作系统,网卡在判断出有一个包到达时,不会引发中断,只用当操作系统轮询到该设备时,网卡中断才有效。当内核设备轮询队列未轮询到该网卡时,在此期间,到来的包都被放入网卡的环形缓冲区中。直到轮询到来,对于未采用PF_RING技术的内核,操作系统将包拷贝到内核协议栈缓冲区中进行排队,而采用PF_RING技术,操作系统将包采用DMA方式拷贝到内核缓冲区的环形队列中,再把网卡缓冲区中收到的这些包丢弃,不把他们传入内核协议栈缓存区中进行排队。环形缓存区在每个套接字被建立时分配,直到套接字关闭时,环形缓存区才被释放。每次由网卡缓存区拷入内核环形缓存区时,不会进行分配和去配的操作,而是新到的包按环形的方式,将原有的包覆盖。PF_RING技术提供了对MMAP技术的支持。该技术将用户应用程序空间映射到内核缓存区,从而省略了将数据从内核缓存区向用户缓存区的拷贝操作。即所说的零拷贝技术。这样可以节省一次拷贝所占用的系统资源,和缩短包处理的时间。RTIRQ技术是用来确定内核中断的时间片的。当操作系统每次将包从网卡缓存拷贝到内核环形缓存时,都会引发一个中断,这个中断会要求调用用户程序对内核中的数据进行处理,当在大流量网络环境下,这样的中断也是很频繁的。会消耗大量的系统资源,所以我们采用合适的时间片,使内核“睡眠”一小段时间,即在内核“睡眠”过程中,每次将包拷贝到内核缓存区时,不会引发中断,直到度过了这个时间片,内核就会使由内核包拷贝引发的中断生效,如果这时有数据包被拷贝到内核,则引发中断,如果等待了一定的时间,还没有包拷贝到内核,则内核继续睡眠。该技术就被称为RTIRQ

    以上是我对这些技术的理解。不知道分析的对不对。希望有高人更正和补充。

    TAG:

    引用 删除 netarchon   /   2009-05-27 05:21:12 楼主对RTIRQ的解释不对,你的理解其实指的是device polling,在一个中断期间禁用该设备的中断,并一直poll该设备中接收的数据包,直到没有了或超过一定的数量或超过一定的时间,才重新使能该设备。而RTIRQ是为了保证系统调用有一个time上的constraint,在pf_ring中主要是为了解决poll开销太大的问题,不过最近采用adaptive 的poll已经解决了这个问题。

    采用PF_RING技术,操作系统将包采用DMA方式拷贝到内核缓冲区的环形队列中,再把网卡缓冲区中收到的这些包丢弃,不把他们传入内核协议栈缓存区中进行排队。环形缓存区在每个套接字被建立时分配,直到套接字关闭时,环形缓存区才被释放。每次由网卡缓存区拷入内核环形缓存区时,不会进行分配和去配的操作,而是新到的包按环形的方式,将原有的包覆盖。PF_RING技术提供了对MMAP技术的支持。该技术将用户应用程序空间映射到内核缓存区,从而省略了将数据从内核缓存区向用户缓存区的拷贝操作。即所说的零拷贝技术。这样可以节省一次拷贝所占用的系统资源,和缩短包处理的时间。

     

    最新回复(0)