Netmap分析(六)

Netmap分析(六)
netmap.c NIOCTXSYNC和NIOCRXSYNC 这两个使用相同的代码,同步ring case NIOCTXSYNC: case NIOCRXSYNC: nifp = priv->np_nifp; if (nifp == NULL) { error = ENXIO; break; } mb(); /* make sure following reads are not from cache */ na = priv->np_na; /* we have a reference */ if (na == NULL) { D("Internal error: nifp != NULL && n...

Netmap分析(五)

Netmap分析(五)
实际设置netmap配置的函数 /* * possibly move the interface to netmap-mode. * If success it returns a pointer to netmap_if, otherwise NULL. * This must be called with NMG_LOCK held. * * The following na callbacks are called in the process: * * na->nm_config() [by netmap_update_config] * (get current number and size of rings) * * We have a generic one...

Netmap分析(四)

Netmap分析(四)
netmap.c NIOCGINFO 用于返回netmap的基本信息 case NIOCGINFO: /* return capabilities etc */ if (nmr->nr_cmd == NETMAP_BDG_LIST) { error = netmap_bdg_ctl(nmr, NULL); break; } NMG_LOCK(); do { /* memsize is always valid */ struct netmap_mem_d *nmd = &nm_mem; u_int memflags; if (nmr->nr_name[0] != '\0') { /* get a refco...

Netmap分析(三)

Netmap分析(三)
Netmap_linux.c 两个重要的结构 struct miscdevice netmap_cdevsw = { /* same name as FreeBSD */ MISC_DYNAMIC_MINOR, "netmap", &netmap_fops, }; static struct file_operations netmap_fops = { .owner = THIS_MODULE, .open = linux_netmap_open, //malloc the private_data from memory .mmap = linux_netmap_mmap, //设置netmap内存映射...

Netmap分析(二)

Netmap分析(二)
netmap_linux.c: //初始化netmap static int linux_netmap_init(void) { int err; /* Errors have negative values on linux. */ /* 申请netmap的各个内存池,包括netmap_if,netmap_ring,netmap_buf以及内存池的管理结构 */ err = -netmap_init(); //netmap.c if (err) { return err; } /* * 驱动注册程序 * * Returns 0 on success, negative on failure */ err = nm_os_pt_memde...

Netmap分析(一)

Netmap分析(一)
工作原理 Netmap是基于零拷贝思想的高速网络I/O架构,它能够在千兆或万兆网卡上达到网卡的线速收发包速率。并且能够有效地节省cpu等计算机资源。 零拷贝(zero-copy)是指主机、路由器等设备与网卡交互时,CPU不需要将数据从和个内存区域拷贝到另一个内存区域。零拷贝通过减少数据拷贝或共享总线操作次数,消除通信数据的不必要的拷贝过程,能够有效地提高通信效率、节省存储空间和处理时间。因此,零拷贝技...
Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录