Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1405611
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2014-10-29 21:50:52

        linux内核处理网络包并不如想象的那么快,且不说包经过内核的层次很多,内核中还有诸多的定时器,零拷贝技术,就是避免了数据包经过太多的拷贝,缩短时间。
        网卡驱动收到包后,如果没有上层来取,如果持续发包,网卡或会丢弃或者出现包的淹没现象。
        一般来说,都是生产者将包放到某个地方,然后消费者去取。一般的网卡驱动都是收包都是放到ring buffer,类似环形队列。消费者通过某些标识取走这些包。
        网卡数据的流向,从网卡的内存到系统的物理内存,可以通过DMA的方式来转移,最后数据如果要做进一步处理,需要再将系统内存中的数据预取到Cache,这里可以是L1 Cache,L2 Cache,L0 Cache,CPU计算时,总是优先使用Cache,这里说的都是数据Cache,还有iCache,专门用来加载指令。
         数据计算后,这个结果可能还要临时write-back系统内存,最后再从系统内存出去,可见处理器的一次能处理的数据多少,取决于Cache大小。
        Cache的预取prefetcht0,prefetcht1,prefetcht2都是针对地址的进行的,完成之后,我们怎么才知道后续的代码真正使用的是Cache呢?
        真正Cache的使用,在编程的层面是看不到的,只能说当使用同一个指针(也就是地址)去访问这部分数据时,就会使用这个Cache.
        处理器会优先从Cache中查找,但是尚不清楚Cache的设计是否通过地址来作为Key来判断数据是否已经在Cache中。
以及Cache与系统物理内存的关联。
       
阅读(5078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~