DPDK系列之四十二DPDK应用网络编程

这篇具有很好参考价值的文章主要介绍了DPDK系列之四十二DPDK应用网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、网络编程

DPDK的源码分析的很多了,也应该让他发挥一些作用了。前面的分析可以知道,DPDK的优势在于网络通信,那么它可不可以替代传统的Socket网络通信的底层协议栈呢?答案是肯定的。
一个框架最重要的意义就在能为上层所应用并且达到一个新的性能上的高度,DPDK正是如此。网络编程中常用的是TCP编程和UDP编程,本篇就用DPDK模拟实现网络通信的一个简单框架流程的分析说明。为下一步的TCP/UDP等网络编程进行一个基础的准备。

二、实现方式

利用DPDK实现网络编程,主要需要实现通过DPDK的相关接口来模拟实现与网卡的网络通信Socket编程。包括相关的设备初始化、通过DPDK与网卡进行数据交互、应用层的模拟通信接口和上层应用的数据收发处理。

三、源码分析

下面看一下主体框架的代码:

void init()
{
  int ret;
  ret = rte_eal_init(argc,argv);
  // create devices
  struct rte_eth_conf port_conf;
  memset(&port_conf, 0, sizeof(struct rte_eth_conf));
  //set config
  ......
  // get port
  uint16_t port;
  port = rte_eth_find_next_owned_by(0, RTE_ETH_DEV_NO_OWNER);
  //init port
  ret = rte_eth_dev_configure(port, 1, 1, &port_conf);
  //start port
  rte_eth_macaddr_get(port,&server_port->mac_addr);
  ......
}

void createSocket()
{
......
  listenFd_ = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP);

  //set pars
  ......
  bind(listenFd_, (struct sockaddr*)&serv_addr,sizeof(serv_addr));
  listen(listenFd_, 3);
}
void accept()
{
  while(!bStop) {
      ......
      int connfd = accept(listenFd_, (struct sockaddr *)&clientaddr, &len, SOCK_NONBLOCK | SOCK_CLOEXEC);
      if(connfd >= 0) {
          rte_eth_rx_burst(portid, 0, pkts_burst, BURST_SIZE); // recv package
          pthread_create(&tid,NULL,&recv,connfd);
          pthread_detach(tid);
      }
  }
}

void recv()
{
    while(!bStop){
        ......
        rx = rte_eth_rx_burst(portid, 0, mbuf, BURST_SIZE);
        for(int i=0;i<rx;i++){
            char * pdata = rte_pktmbuf_mtod(mbuf[i], char * );
            int len = rte_pktmbuf_data_len(mbuf[i]);
            cb(pdata,len);//callback data
            rte_pktmbuf_free(mbuf[i]);
        }
        ......
    }
}

上面只是一个基本的使用DPDK的网络通信框架,具体的实现都没有完成,但基本上整体的流程都清晰了。细一看,和前面分析的fwd的代码基本没有什么大差别。但真正的差别就在实现的细节里,这些放到下一篇再分析。

四、总结

DPDK的应用还是有些复杂,不过从费效比看还是相当不错的。特别是在某些大型网络通信应用中,使用DPDK的优势还是很明显的。至于普通的网络编程还是老实的使用系统自带的Socket会更简单方便。在后面会对网络通信中使用DPDK进行具体的TCP/UDP应用分别分析说明。
要善于利用技术而不是让技术成为一种思想上的拖累。文章来源地址https://www.toymoban.com/news/detail-841078.html

到了这里,关于DPDK系列之四十二DPDK应用网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 网络编程学习笔记——十二、高性能 I/O 框架库 Libevent

    在处理 I/O 事件、信号和定时事件时,需要考虑如下三个问题: 统一事件源:很明显,统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。 可移植性:不同的操作系统具有不同的 I/O 复用方式,比如 Solaris 的 dev/poll 文件,FreeBSD 的 kqueue 机制,Linux 的

    2023年04月08日
    浏览(56)
  • 【网络编程系列】网络编程实战

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月10日
    浏览(42)
  • 网络编程(JavaEE初阶系列10)

    目录 前言: 1.网络编程的基础 1.1为什么需要网络编程 1.2什么是网络编程 1.3网络编程中的基本概念 1.3.1发送端和接收端 1.3.2请求和响应 1.3.3客户端和服务端 2.Socket套接字 2.1概念 2.2分类 3.UDP数据报套接字编程 3.1DataGramSocket API 3.2DatagramPacket API 3.3基于UDP的回显服务器(echo s

    2024年02月13日
    浏览(33)
  • Linux网络编程系列之UDP组播

            1、 Linux网络编程系列之网络编程基础         2、 Linux网络编程系列之TCP协议编程         3、 Linux网络编程系列之UDP协议编程         4、 Linux网络编程系列之UDP广播         5、 Linux网络编程系列之UDP组播         6、 Linux网络编程系列之服务器编程——阻塞IO模型

    2024年02月04日
    浏览(46)
  • Linux网络编程系列之UDP广播

            1、 Linux网络编程系列之网络编程基础         2、 Linux网络编程系列之TCP协议编程         3、 Linux网络编程系列之UDP协议编程         4、 Linux网络编程系列之UDP广播         5、 Linux网络编程系列之UDP组播         6、 Linux网络编程系列之服务器编程——阻塞IO模型

    2024年02月04日
    浏览(38)
  • C++中的网络编程和安全性:实现安全的Web应用程序和网络应用程序

    作者:禅与计算机程序设计艺术 《67. C++中的网络编程和安全性:实现安全的Web应用程序和网络应用程序》 1.1. 背景介绍 随着互联网的快速发展,网络应用程序在人们的生活和工作中扮演着越来越重要的角色,网络编程和安全性也成为了现代应用程序的重要组成部分。在网络

    2024年02月16日
    浏览(52)
  • 高并发应用:TCP网络编程

    Socket 很多系统都提供Socket作为TCP网络连接的抽象 Linux- internet domain socket - SOCK_STREAM Linux中Socket以“文件描述符”FD作为标识。 IO模型 IO模型指的是同时操作Socket的方案。 阻塞 非阻塞 多路复用 阻塞IO 同步读写Socket时,线程陷入内核态。 当读写成功后,切换回用户态,继续执行

    2024年03月14日
    浏览(45)
  • 第四十二回:DateRangePickerDialog Widget

    我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍 DateRangePickerDialog Widget .闲话休提,让我们一起Talk Flutter吧。 我们在这里说的 DateRangePickerDialog 是一种弹出窗口,只不过窗口的内容固定显示为日期,它和DatePickerDialog类似,也是用来让用户选择日期,选择

    2024年02月07日
    浏览(55)
  • Mariadb高可用MHA (四十二)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述     1.1 概念  1.2 组成   1.3  特点   1.4  工作原理 二、构建MHA 2.1 ssh免密登录 2.2 主从复制 2.3 MHA安装  2.3.1所有节点安装perl环境 2.3..2 node 2.3.3 manager (只在mgt上装) 2.3.4 测试 2.

    2024年02月12日
    浏览(40)
  • OpenCV(四十二):Harris角点检测

    1.Harris角点介绍 什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。 Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包