风一样的男孩 发表于 2014-8-17 10:00:56

关于网卡的接收/传送缓冲区引发无盘客户机无法启动问题

前几天我们收到一例用户反馈,某苹果一体机的网咖,上座率稍微高一点的时候(>50台机器在线)就会出现win7无盘客户机开机卡在花瓣界面,无法继续进入系统!经过无盘研发人员分析发现,是由于局域网内的广播包太多,而网卡的网络缓冲区太小,当客户机网卡接收到过多的垃圾广播包时,网卡处理不过来正常的网络请求,导致网络中断,最终出现问题现象!应该说这种情况并不多见,因此引发了我的一些好奇,这里和大家分享一下!网络缓冲区相关的资料并不太多,在搜狗百科找到一些介绍,大家可以移步搜狗百科看下介绍:http://baike.sogou.com/v61975618.htm根据搜狗百科介绍,网络缓冲区有3种模式:动态分配方式:指在准备接收下一新帧时通过系统调用为接收描述符分配缓冲区。只有在需要缓冲区时才进行分配,优点:内存开销小;缺点:因需调用内核函数动态地分配内存,因此它CPU开销相对较大。(据说目前是主流方式)预先分配方式:指在网络初始化时预先分配一定数量的缓冲块放入缓冲池中,准备接收下一新帧时,从缓冲池中为接收描述符分配缓冲区。优点:由于事先已分配好缓冲区,再进行缓冲区分配时只需进行指针的操作,因此它CPU开销小。缺点:需要在初始化时分配足够多的缓冲块,为帧的处置赢得足够的处置时间,未处理完前,保证它不会被新帧覆盖,因此,预先分配方式的内存开销大。覆盖方式:指在接收帧时,不再为接收描述符分配缓冲区,而是将缓冲区的数据拷贝到另一内存空间等待处理,重复利用此描述符所指向的缓存区接收新帧。优点(自己总结):内存开销固定;缺点:因为数据需要比预先分配方式多一层调度,所以CPU开销方面会更大。一知半解的了解了一些关于网络缓冲区的知识后,相信大家一定会有更多的疑问,比如说:哪种方式更好?怎么更改这些方式?网络缓冲区设置多大才好?这些方式是如何实现的?等等……但是目前,我还很难为大家解答这些疑惑,不过按照国际惯例来讲,要实现这些分配方式,至少要由网卡芯片+网卡驱动两者才能实现!熟悉网卡一点的朋友一定在修改网卡参数时发现网卡参数里有:传输缓冲区/接收缓冲区,如下图:http://121.40.132.225/wp-content/uploads/2014/08/2014-08-14_16-58-43-385x400.pngps:当然根据网卡品牌不同,叫法可能也会有点差异,大家就靠自己的“汉语”能力自己理解吧,如果是英文的那么就百度翻译一下!与此同时,你可能还会注意到网卡参数里会有:中断节流,终端节流率,其实这2个参数也是会配合网络缓冲区一起工作的,当缓冲区饱和时,中断节流功能就会生效,临时停止接收数据,而所谓的中断节流率的概念就是节流的频率了,比如是一旦慢了就100%节流,还是选择性的节流,记得以前测试网卡的时候,将中断节流关闭过,发现测速会提升4~5MB/S,但是目前知道原理之后,可能这么做并不好,在网络内广播包比较多的时候,可能就会出现一些奇怪的问题现象!http://121.40.132.225/wp-content/uploads/2014/08/2014-08-14_17-00-50-385x400.png
除此之外,网络缓冲区的知识还包括接收区缓冲列队,以及流量控制,其实他们都是优化缓冲区不够时该如何去处理这些数据,突然发现网卡里面的参数真的是太多知识不懂,这里就随便分享一下,可能会有些错误,或者我个人理解出错,如果有更加了解这一块知识的同学,也欢迎大家分享出来,大家一起进步!最后,给出一些结论性建议:1、局域网内广播包过多的时候,可以适当增大接收缓冲区大小,不过最大不要超过1024;2、缓冲区不是越大越好,所以没问题不要随意改动;转载自:死性不改's Blog
页: [1]
查看完整版本: 关于网卡的接收/传送缓冲区引发无盘客户机无法启动问题