第371页<附录A tcpdump程序>底部:
    除了指明一个过滤器,BPF的每个用户还指明了一个超时定时器的值。因为网络的数据传输率可以很容易地超过cpu的处理能力,而且一个用户进程从内核中只读小块数据的代价昂贵,因此,BPF试图将多个帧装载进一个读缓存,只有缓存满了或者用户指明的超时到期才将读缓存保存的帧返回。...问题1:网络的数据传输率可以很容易地超过cpu的处理能力,那么是否也可以很容易地超过网卡的处理能力?也就是说当以太网数据链路上有许多份数据同时发送时,是否存在网卡只能读取一份数据,而不能读取其它的数据。问题2:为什么用户进程从内核中只读小块数据的代价昂贵?

解决方案 »

  1.   

    问题1:网络的数据传输率可以很容易地超过cpu的处理能力,那么是否也可以很容易地超过网卡的处理能力?也就是说当以太网数据链路上有许多份数据同时发送时,是否存在网卡只能读取一份数据,而不能读取其它的数据。 
    考虑到网络的模型,经常会发送阻塞及抖动的情况,既,某个时候,会有大量的数据到达,以至于网卡不能处理所有的数据问题2:为什么用户进程从内核中只读小块数据的代价昂贵?
    线程切换花费大量的cpu
      

  2.   

    网络的上的数据因为有其随机性,考虑到cpu处理I/o的效率,考虑设置buffer从而提升cpu的效率.关于这部分可以看,计算机组成原理cpu如何中断处理i/o的.    
      

  3.   


    如果网卡好,比如高端服务器网卡,自己就可以处理很多东西,不怎么占cpu,如果滥网卡,要占很多cpu
      

  4.   

    第371页 <附录A tcpdump程序>底部: 
        除了指明一个过滤器,BPF的每个用户还指明了一个超时定时器的值。因为网络的数据传输率可以很容易地超过cpu的处理能力,而且一个用户进程从内核中只读小块数据的代价昂贵,因此,BPF试图将多个帧装载进一个读缓存,只有缓存满了或者用户指明的超时到期才将读缓存保存的帧返回。... 问题1:
    没有所谓超过网卡的处理能力的说法,100M的网络就接100M的网卡,永远不会超过网卡的能力。
    不存在以太网数据链路上有许多份数据同时的情况。以太网也类似于总线,同时只有一份数据传输。问题2:
    因为通过系统调用从用户空间切换到系统空间是需要消耗很多CPU时间的,每次为读取小数据块就切换一次,代价太高。
    结合上面两个问题,就知道处理大量小数据报文容易超过CPU的处理能力了
      

  5.   

    呵呵,详解1很久以前就看过了,当时只是作为了解的状态来看,那时看得很快,现在想掌握每个细节,看得慢得很,因为要用tcpdump这个工具,所以先跳到附录把这里看了