第十周总结

第十周学习报告

学习要点

  Poll 函数,napi技术,interrupt coalescing机制

正文

Poll函数

poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。

第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。

  struct pollfd{

  int fd;              //descriptor to check

  short events;    //events of interest on fd

  short revents;   //events that occurred on fd

  };

要测试的条件由events成员指定,而返回的结果则在revents中存储。

napi中多次看到poll这个机制,先学习了下。Poll函数主要解决I/O复用,用到I/O复用的条件。

1.     一个客户同时处理多个描述符

2.     客户同时处理多个socket

3.     TCP服务器同时处理监听端口和连接端口

4.     服务器同时处理TCPUDP

5.     服务器同时处理多个服务或多个协议

Napi

传统的中断IO方法。

1.             网卡接收数据包

2.             将数据包DMA到环形数据缓冲区后,触发中断

3.             然后执行中断处理程序。

中断处理程序,将数据包推向上层协议栈。传统的IO方法是在中断处理函数中读取数据包。

NAPI Linux 上采用的一种提高网络处理效率的技术。主要是看着流程图学习的。

采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。虽然,读取数据不在中断中,并不意味着没有中断了。中断还是有的,并且还会触发中断处理函数。从 POLL 方法的本质意义上来说就在于尽量减少中断的数目,特别在于大量的小长度的数据包的时候,减少中断,以达到不要让整个操作系统花费太多的时间在中断现场的保护和恢复上,以便把赢得的时间用来在我网络层上的处理数据的传输。

例如在下面介绍的 8139CP 中断的处理过程中,目的就在于尽快把产生中断的设备挂在 poll_list,并且关闭接收中断,最后直接调用设备的POLL方法来处理数据包的接收,直到收到数据包收无可收,或者是达到一个时间片内的调度完成。

1.  网卡中断 关闭网卡接收中断,将设备挂在poll的队列上。

2.  对于网卡接收到包后

1>     检查网卡的环形队列rx_ring有需要处理的数据吗,这是一个阻塞。

2>     如果有数据就把数据sk_buffer提交到网络层,清除物理映射

3>     创建新的缓存,放到rx_ring的队列上,并且准备让网卡进行dma传输

4>     检查是否有新的数据包到来,如果有就一直放到队列上(可能使得内存溢出,如果包是不停的接收);没有包后把设备从poll队列中删除。

3.  对于软中断

1>     要在一个时间片和最大的限额内完成任务

2>     调用网卡的poll方法获得数据

       由于时间比较紧,晚上基本没有时间到实验室,没有在千兆的网卡具体看过。只是了解了一下流程。

Interrupt coalescing

       Interrupt coalescing is a feature implemented in today's network adapters to help mitigate interrupt overhead in Gigabit-network hosts. In interrupt-coalescing mode, a single interrupt is generated for multiple incoming packets. This is opposed to normal interruption mode in which an interrupt is generate for every incoming packet. It is widely asserted that interrupt coalescing decreases interrupt overhead at the expense of latency.

       普通中断就是将原来是一个包过来一个中断

       中断结合是多个包过来后才会一个中断,可以降低中断产生的开销

       这是对于网卡的一个技术,我这个的资料找到的很少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值