当前位置: 首页 > news >正文

重庆网站制作公司多少钱摩托车网站建设

重庆网站制作公司多少钱,摩托车网站建设,国外网站建设官网,教育网站建站需求目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载: DPDK 下载版本:DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…

目录

1、编译

2、设置运行环境

3、使用dpdk接收udp报文

3.1、设置发送端arp信息

3.2、测试

3.3、代码

4、其他


1、编译

代码下载:

DPDK

下载版本:DPDK 19.08.2

export RTE_SDK=/root/dpdk-stable-19.08.2/

export RTE_TARGET=x86_64-native-linux-gcc

cd /root/dpdk-stable-19.08.2

./usertools/dpdk-setup.sh

选择39 x86_64-native-linux-gcc,回车后自动开始编译

2、设置运行环境

1、添加一个网卡,作为dpdk抓包网卡,设置桥接模式

2、修改虚拟机vmx文件将抓包网卡的virtualDev 由 e1000 修改 vmxnet3,因为 vmware 的 vmxnet3 支持多队列网卡

单队列网卡:在单队列网卡中,所有的网络中断和处理任务通常都由单个CPU核心处理,这可能会导致该核心的高负载和瓶颈。

多队列网卡:多队列网卡可以将网络流量分散到多个CPU核心上,这样可以避免单个核心过载,并提高整体系统的性能。

cat /proc/interrupts | grep 网卡名称

可以查看该网卡是多队列还是单队列,单队列只有一行,多队列有多行

3、设置巨页内存

dpdk巨页一般配置为2M和1G

修改/etc/default/grub文件,增加图中的内容

物理机:

default_hugepages=1G hugepagesz=1G hugepages=20 isolcpus=0-7

虚拟机:

default_hugepages=1G hugepagesz=2M hugepages=1024 isolcpus=0-2

执行update-grup,重启

4、

cd /root/dpdk-stable-19.08.2

./usertools/dpdk-setup.sh

执行43、44、45、46(填512)、47(填512)、49,执行49前,要把dpdk抓包网卡down掉(ifconfig ens160 down)

当使用DPDK绑定网卡后,该网卡会从Linux内核网络栈中解绑,并交由DPDK控制。这意味着网卡不再由操作系统的网络栈管理,因此使用ip a或ifconfig这样的命令将看不到这块网卡。

./usertools/dpdk-devbind.py --status可以看到dpdk绑定的网卡

3、使用dpdk接收udp报文

3.1、设置发送端arp信息

查看绑定网卡的ip和mac地址,加到报文发送端的arp中

在指定网卡上加上对应的arp信息

netsh -c i i add neighbors 19 192.168.1.5 00-0c-29-f2-de-8d

执行arp -a

3.2、测试

发送报文,dpdk可以接收到

3.3、代码

#include <rte_eal.h>
#include <rte_ethdev.h>
#include <rte_mbuf.h>
#include <stdio.h>
#include <arpa/inet.h>#define NUM_MBUFS (4096-1) // 内存池中 mbuf 的数量
#define BURST_SIZE 32int gDpdkPortId = 0;static const struct rte_eth_conf port_conf_default = {.rxmode = {.max_rx_pkt_len = RTE_ETHER_MAX_LEN}
};static void ng_init_port(struct rte_mempool *mbuf_pool) {//dpdk绑定的网卡数量uint16_t nb_sys_ports = rte_eth_dev_count_avail();if (nb_sys_ports == 0) {rte_exit(EXIT_FAILURE, "not support eth\n");}struct rte_eth_dev_info dev_info;/*获取以太网设备的配置和状态信息。它通常用于初始化网络设备、*配置网络设备或者获取网络设备的状态信息。*这里的端口号和网卡是一一对应的*/rte_eth_dev_info_get(gDpdkPortId, &dev_info);const int num_rx_queues = 1;	//接收队列个数const int num_tx_queues = 0;	//发送队列个数struct rte_eth_conf port_conf = port_conf_default;rte_eth_dev_configure(gDpdkPortId, num_rx_queues, num_tx_queues, &port_conf);// 0是0号接收队列// 128是队列长度if (rte_eth_rx_queue_setup(gDpdkPortId, 0, 128, rte_eth_dev_socket_id(gDpdkPortId), NULL, mbuf_pool) < 0) {rte_exit(EXIT_FAILURE, "Could not setup RX queue\n");}if (rte_eth_dev_start(gDpdkPortId) < 0) {rte_exit(EXIT_FAILURE, "Could not start\n");}}int main(int argc, char *argv[]) {/*dpdk初始化资源*用于初始化 Environment Abstraction Layer (EAL)。EAL 是 DPDK 的一个核心组件,*负责抽象和管理硬件和操作系统依赖性,使得上层应用可以在不同的硬件和操作系统上*以统一的方式运行。*/if (rte_eal_init(argc, argv) < 0) {rte_exit(EXIT_FAILURE, "Error with EAL initialization\n");}//内存池,接收的数据存在该内存池中struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NUM_MBUFS,0, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());if (mbuf_pool == NULL) {rte_exit(EXIT_FAILURE, "Could not create mbuf pool\n");}ng_init_port(mbuf_pool);while(1) {struct rte_mbuf *mbufs[BURST_SIZE] = {0};unsigned num_recvd = rte_eth_rx_burst(gDpdkPortId, 0, mbufs, BURST_SIZE);if (num_recvd > BURST_SIZE) {rte_exit(EXIT_FAILURE, "Error receive from eth\n");}unsigned int i = 0;for (i = 0; i < num_recvd; i++) {struct rte_ether_hdr *ehdr = rte_pktmbuf_mtod(mbufs[i], struct rte_ether_hdr*);if (ehdr->ether_type != rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4)) {rte_pktmbuf_free(mbufs[i]);continue;}struct rte_ipv4_hdr *iphdr = rte_pktmbuf_mtod_offset(mbufs[i], struct rte_ipv4_hdr*, sizeof(struct rte_ether_hdr));if (iphdr->next_proto_id == IPPROTO_UDP) {struct rte_udp_hdr *udphdr = (struct rte_udp_hdr *)(iphdr + 1);//两个字节以上的变量是需要大小端转换uint16_t length = ntohs(udphdr->dgram_len);*((char*)udphdr + length) = '\0';struct in_addr addr;addr.s_addr = iphdr->src_addr;printf("src: %s:%d, ", inet_ntoa(addr), ntohs(udphdr->src_port));addr.s_addr = iphdr->dst_addr;printf("dst: %s:%d, %s\n", inet_ntoa(addr), ntohs(udphdr->dst_port), (char *)(udphdr+1));}rte_pktmbuf_free(mbufs[i]);}}return 0;
}

4、其他

1、设置中断对应的cpu

/proc/irq/是一个特殊的文件系统目录,它提供了一个接口来观察和配置内核中的中断请求(IRQ)相关信息。/proc/irq/目录下的每个子目录通常对应一个特定的IRQ号。

/proc/irq/57/smp_affinity文件允许你查看或设置中断号为57的IRQ在多处理器系统中的亲和性(affinity)。亲和性是指操作系统尝试将中断处理任务绑定到特定的CPU核心上,以提高处理效率和性能。

smp_affinity文件中的值是一个掩码(mask),用十六进制表示,它指定了处理该中断的CPU核心。每一个十六进制数字代表了4个位,因此一个数字可以表示4个CPU核心的开关状态。如果你看到smp_affinity文件中有32个十六进制数字,那么这表示该系统可能支持多达32 * 4 = 128个CPU核心。

例如,如果smp_affinity文件中的值是ff,那么它表示前8个CPU核心(因为ff在二进制中是11111111)都被允许处理这个中断。如果值是1,则只有第一个CPU核心被允许处理这个中断。

要绑定第5个cpu核心,则echo 10 > /proc/irq/57/smp_affinity

2、dpdk使用场景

dpdk+nginx,nginx不从内核协议栈收包,从dpdk收包,提升性能

dpdk+dns

提升路由器/交换机性能

防火墙

http://www.yayakq.cn/news/548528/

相关文章:

  • 网站可以放多少视频郑州短视频拍摄公司
  • 杨凌做网站的公司网站搬家
  • wordpress lampp建站wordpress增加会员中心
  • 网站用什么技术做的母婴网站模板
  • 网站开发工程师的工作描述上海找做网站公司好
  • 网站建设熊猫建站陕西省工程建设信息网官网
  • 招标网站平台有哪些成都专业网站建设机构
  • 如何免费制作企业网站渠道合作一站式平台
  • 统一企业官网厦门seo培训学校
  • php网站开发教程网logo设计图片免费 图案
  • 新区seo整站优化公司网站建设宣传预算
  • 网站网店建设滁州网站设计
  • 网站备案 前置审批号青海网站建设公司哪家好
  • 网站备案平台查询系统诸城网站建设公司排名
  • 网站产品展示宿迁网络科技有限公司
  • 小学学校网站美客多跨境电商平台
  • 网站开发三层架构蒙阴蜜桃
  • 王建设个人网站现代农业园网站建设方案
  • 福泉市建设局网站网站怎么黑
  • 开通网站的请示wordpress 附件管理
  • 做程序题的国外网站学校招聘教师网站建设
  • 网站建优化全国最好的计算机培训学校
  • 设计主题网站郑州网站建设乛汉狮网络
  • 网站网络拓扑图想自己做点飘纱素材到网站上买
  • 企业网站建设可以分为( )交互层次网站弹屏广告怎么做的
  • 青县网站建设公司做微整的网站
  • 江苏建设工程标准网站电脑网站设计制作
  • 临潼城市建设局网站网站开发 公司简介
  • 金融网站建设方案国外搜索引擎大全百鸣
  • 怎么自己做个免费网站在线制作头像模板