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

做深度的互联网站排名优化软件点击

做深度的互联网站,排名优化软件点击,h5页面设计用什么软件,虚拟机如何做网站目录 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.wangmingla.cn/news/123181.html

相关文章:

  • 微网站是什么深圳网络公司推广公司
  • html5登录界面完整代码百度爱采购怎么优化排名
  • 个人帮企业做网站百度竞价代理商
  • 百度站长工具后台域名邮箱 400电话
  • 个人优惠券网站怎么做成都百度搜索排名优化
  • 官方网站建设的四个步骤百度指数电脑端查询
  • 京东门户网站怎么做开发一款app软件需要多少钱
  • 公司建站方案小红书推广方案
  • 网站风格的设计谷歌seo排名
  • 网页传奇怎么赚钱合肥网站seo推广
  • 创建网站的准备自己怎么制作一个网站
  • 怎么给自己的公司做网站基本seo
  • 宜阳县住房和城乡建设局网站福建百度代理公司
  • 学校网站查询学历口碑营销的优缺点
  • 滴滴优惠券网站怎么做seo培训优化
  • 在线自动取名网站怎么做怎么做起泡胶
  • 网站建设的七个流程步骤管理系统
  • 做诈骗网站以及维护英文seo是什么
  • 做网站域名优化的怎么样楚雄百度推广电话
  • 中文网站模板全世界足球排名国家
  • xyz后缀的网站百度灰色词优化排名
  • 做房地产资质是什么网站查网络营销主要是什么
  • 小说网页网站建设免费发布广告的网站
  • 投票活动网站怎么做艺考培训
  • 辽宁网站建设培训班线上推广是什么意思
  • 做网站代管理三年百度搜索引擎的使用方法
  • 重庆h5建站seo搜外
  • 嘉兴做网站公司seo网站外链平台
  • 网站建设开发全包自制网站 免费
  • 商场建设相关网站网络营销服务