Linux 和FreeBSD libnet 发送机制对比

2009-05-13 10:55:31来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

研究libnet代码以及实际测试:
发现在Freebsd中,实际发送的数据帧不能超过2034,加上14字节正好是2048了
在Linux中,LibNet采取了RAW SOCKET的方式发送数据socket(PF_SOCKET,SOCK_RAW,htons(ETH_P_ALL))
Freebsd中换了机制,使用的是bpf驱动方式。
查看BPF源代码,发现内核实现时
bpf.c:248
    if ((unsigned)len > MCLBYTES)
        return (EIO);
而MCLBYTE宏缺省定义为2048,在内核配置文件sys/params.h:144行
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
#ifndef    MSIZE
#define MSIZE        256        /* size of an mbuf */
#endif    /* MSIZE */
#ifndef    MCLSHIFT
#define MCLSHIFT    11        /* convert bytes to mbuf clusters */
#endif    /* MCLSHIFT */
#define MCLBYTES    (1 << MCLSHIFT)    /* size of an mbuf cluster */
#define    MJUMPAGESIZE    PAGE_SIZE    /* jumbo cluster 4k */
#define    MJUM9BYTES    (9 * 1024)    /* jumbo cluster 9k */
#define    MJUM16BYTES    (16 * 1024)    /* jumbo cluster 16k */
在配置内核时应该可以通过配置
MCLSHIFT     12 来将缓冲区提高到4096
但是我想发送8K的数据包怎么办??
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
专门有一个提示要求不能大于PAGE_SIZE,难道我还要改动PAGE_SIZE?改动后对系统会不会造成较大影响??
看了系统源码,在IA64中,PAGE_SIZE默认为8K,在其其他体系中,包括AMD64,都是4096
为何?待研究
看来RAW SOCKET性能是要高。
下来再研究bfp源码吧
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54895/showart_431948.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:freebsd 中的libnet发送性能**

下一篇:OpenBSD SAMBA OpenLDAP