dpdk kni例子程序分析

dpdk课程学习之练习笔记五(kni理解及测试) dpdk有关kni的练习: kni模块可以实现把不用dpdk处理的相关协议报文扔给内核处理,并接受返回结果用dpdk接管的网卡进行发送出去。 1:kni概述(内核网卡接口Kernel NIC Interface) dpdk提供了kni模块,实现了dpdk应用程序与内核数据的交互。 dpdk接管网卡数据后,内核其实就无法识别到网卡数据了。 dpdk提供了kni模块,用虚拟网络适配器(模拟了一个网卡),实现了dpdk应用程序和内核网络模块的交互。 所以kni的模块主要就是提供了一个中间虚拟网络适配器,把dpd 阅读详情

整体的流程:

    1.rte_eal_init():环境初始化

    2.parse_args():参数解析

    3.rte_pktmbuf_pool_create():Create the mbuf pool

    4.init_kni():

    5.循环调用init_port()和kni_alloc():

    6.rte_eal_mp_remote_launch():注册主循环

    7.RTE_LCORE_FOREACH_SLAVE(i) {
        if (rte_eal_wait_lcore(i) < 0)
            return -1;
    }    等待处理完成

    8.kni_free_kni(),rte_kni_close(),rte_free();

DPDK KNI原理和实现 分配struct net_device结构使用kni_net_init进行初始化,并将struct kni_dev作为net_device的private,并使用入参初始化net_device,入参我们从DPDK用户态部分知道为struct rte_kni_device_info,而其又是存放kni设备对应的rte_kni_memzone_slot信息。而kni_net_rx又进一步调用kni_net_rx_func,kni_net_rx_func被初始化为kni_net_rx_normal。 阅读详情

相关推荐

dpdkkni模块实现原理

一、kni虚拟网卡与物理网卡的对比 相同点: kni虚拟网卡驱动与物理网卡驱动一样,需要在linux内核申请虚拟网卡设备的struct net结构体,并注册到网络命名空间,交由linux内核net模块进行网卡资源的操作; 其与网卡驱动一样,kni内核模块需要对该其网卡队列分配用于收发包的mbuf内存,要实现虚拟网卡的收发包方法,已经通过ethtool对虚拟网卡进行管理的接口; 不同点: 与物理网卡驱动不同的是,kni虚...

qq_29044159的博客 888

DPDK KNI介绍

DPDK KNI接口的说明,rte_kni内核模块的使用方式和原理。

jacicson1987的专栏 1405

dpdkkni实现

一、为什么要用kni 通常情况下dpdk用于二三层报文转发,接收到来自网卡的报文后,如果是二层报文则查找fdb表; 如果是三层报文,则进行dnat, snat处理后,查找路由表, 将报文转发给下一跳路由。这些二三层转发操作都是直接转发到另一台设备上,不需要经过内核,无需内核协议栈的参与。 然而有些场景下报文是直接发给运行dpdk程序的这台设备本身的。例如ping...

ApeLife技术博客 8641

编写一个属于自己的DPDK应用程序DPDK入门向)

编写一个属于自己的DPDK应用程序DPDK入门向)1.前言2.DPDK 的示例 examples3.helloworld4.以skeleton(basicfwd)为基础,编写自己的应用程序。5.依葫芦画瓢+抛砖引玉6.编译自己的应用程序7.总结 1.前言 最近这几周在研究dpdk,测试性能,因为是从零开始需要找各种各样的资料,然后发现要自己编写一个dpdk应用程序,真正对自己帮助最大的还是官方的文档,一个是api文档,一个是gudides文档(http://doc.dpdk.org/api https:/

weixin_44524614的博客 1万+

DPDK多核多线程机制简析

DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能。 DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递配置参数给数据线程等;数据线程主要是处理数据包。 一、初始化 1、rte_eal_cpu_init()函数中,通过读取/sys/devices/system/cpu/cpuX/下的相关信息,确定...

weixin_30571465的博客 738

DPDK分析——KNI

目录 一、概述 二、KNI 2.1 应用场景 2.2 KNI内核模块 2.3 用户态使用 2.3.1rte_kni_init 2.3.2rte_kni_alloc 2.3.3rte_kni_update_link 2.3.4rte_kni_tx_burst 2.3.5rte_kni_rx_burst 2.3.6rte_kni_handle_request 三、参...

whenloce的专栏 1万+

DPDK KNI示例程序

Kernel NIC Interface (KNI)是DPDK提供的控制平面解决方案,运行DPDK用户层应用与Linux内核网络协议栈交换数据。DPDK用户层应用通过使用IOCTL系统调用在Linux内核中创建KNI虚拟设备实现此功能。此IOCTL调用提供接口和DPDK的物理地址空间信息,并且地址空间被KNI内核模块重映射到内核地址空间中,KNI内核模块还将相关信息保存在虚拟设备上下文中。DPDK...

redwingz的博客 7124

dpdk kni流程梳理和分析

学习新东西,首先问自己三个问题 kni是什么? 使用kni能解决什么问题?或者带来什么好处? 研究knidpdk中的api如何使用 探究dpdk kni的实现原理 一、KNIDPDK报文处理中,有些报文需要发送到内核协议栈进行处理,如GTP-C控制报文 如果报文数量较少,可以使用内核提供的TAP/TUN设备,但是鉴于这种设备使用的系统调用的方式,还涉及到copy_to_u...

脚踏实地,不断突破自我,每天有收获就OK 8442

DPDKKNI原理

DPDK是一个优秀的收发包kit,但它本身并不提供用户态协议栈,因此由将数据报文注入内核协议栈的需求,也就是KNI(Kernel NIC Interface)。作为用户态和内核的接口,其因为没有系统调用和内存拷贝,因此比传统的tun/tap设备要更高效。 借用DPDK文档的一个KNI的结构图。 图1. kni结构图 毫无疑问,KNI必然要也需要内核模块的支持,即rte_kni.ko...

~~ LINUX ~~ 5317

dpdk KNI技术详解

在加载kni模块时,可以设置它的内核线程模式::只在内核侧创建一个内核线程,来接收所有kni设备上的数据包,一个线程 vs 所有kni设备:每个kni接口创建一个内核线程,用来接收数据包,一个线程 vs 一个kni设备dpdk在加载kni模块时,默认是采用的single模式,同时还可以为此内核线程设置cpu亲和性。

china718419198的博客 1995

数据库修仙金丹篇八——dpdkkni使用

dpdkkni使用 什么是kni Kni(Kernel NIC Interface)内核网卡接口,是DPDK允许用户态和内核态交换报文的解决方案,模拟了一个虚拟的网口,提供dpdk的应用程序和linux内核之间通讯。kni接口允许报文从用户态接收后转发到linu协议栈去。 为什么要弄一个kni接口,虽然dpdk的高速转发性能很出色,但是也有自己的一些缺点,比如没有协议栈就是其中一项缺陷,当然也可能当时设计时就将没有将协议栈考虑进去,毕竟协议栈需要将报文转发处理,可能会使处理报文的能力大大降低。 当k

growdu的网络博客 7727

DPDK内核模块KNI

DPDK Kernel NIC Interface (KNI)接口允许DPDK用户程序访问Linux控制平面。 使用DPDK KNI的有点如下: 相较现存的Linux TUN/TAP接口更快的速度(消除了系统调用以及copy_to_user()/copy_from_user()内存拷贝的消耗) 允许标准Linux网络工具管理DPDK接口,如ethtool, ifconfig 和 tcpdum...

redwingz的博客 6321

DPDK kni模块分析

相关背景 dpdk缺少相应的协议栈,这提升了dpdk的入门门槛。如果我们采用dpdk来开发代码,当网卡被用户态驱动绑定之后,我们不仅需要处理业务报文,还需要对arp,ping,tcp握手等消息进行处理,对于笔者目前的一个业务场景(缺少协议栈,控制面和用户名共用一个网卡不同ip,数据面需要提升收包性能,因此采用了dpdk。为什么控制面和用户名不用两张网卡呢?产品经理决定的~)来说就比较头疼。幸运的是dpdk提供了kni模块,来解决相应的问题。这篇文章就是介绍dpdkkni模块的实现机制。建议先阅读下dpd

the_dog_tail_grass的博客 1587

dpdkkni介绍以及参考案例

一、KNI 技术背景与核心价值在传统网络架构中,用户态程序若要与内核协议栈交互,必须通过系统调用拷贝数据包,这一过程会带来显著的性能开销。正是为解决这一痛点而生的技术。它的核心是在用户态 DPDK 程序与内核协议栈之间,建立一个高性能的 “桥梁”。KNI 虚拟网卡(如vEth0)对内核来说,就是一个标准的net_device网络设备;对 DPDK 程序来说,则是一个可以直接收发mbuf数据包的接口。二、KNI 核心原理与数据流转。

m0_74186706的博客 946

dpdk-16.04 kni 示例程序分析

dpdk-16.04 kni 示例程序分析 kni 程序在实现 dpdk 程序基础转发功能的同时,通过共享队列建立起了 dpdk 程序与内核协议栈通信的桥梁。dpdk 收到的包能够通过 kni 共享队列上送协议栈,经协议栈处理后再通过共享队列发到 pmd 中通过物理网卡发送出去,它代表了与 l2fwd 颇为不同的一种数据转发模型。 l2fwd 仅进行最简单的转发,不能对网卡接口进行控制,如 down、up、set mtu 等,kni 程序依赖 rte_kni.ko 模块,能够通过 ifconfig、etht

龙瑜的博客 1216

dpdkkni模块

一,什么是kni,为什么要有kni Kni(Kernel NIC Interface)内核网卡接口,是DPDK允许用户态和内核态交换报文的解决方案,模拟了一个虚拟的网口,提供dpdk的应用程序和linux内核之间通讯。kni接口允许报文从用户态接收后转发到linu协议栈去。 为什么要弄一个kni接口,虽然dpdk的高速转发性能很出色,但是也有自己的一些缺点,比如没...

1039

DPDKKNI实现浅析

DPDKKNI实现浅析

hhd1988的专栏 2824
上一篇: dpdk源码分析 rte_eal_cpu_init()函数
下一篇: linux netlink机制
趁着d年轻
博客等级 码龄11年 8粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值