dpdk
文章平均质量分 67
ygmdream
为人处世!
展开
-
(dpdk f-stack)-提升性能(耗cpu函数定位)
看进程哪个函数耗性能原创 2023-01-09 18:17:20 · 431 阅读 · 1 评论 -
(dpdk f-stack)-堆栈溢出-野指针-内存泄露(问题定位)
堆栈溢出 野指针 内存泄露问题。原创 2023-01-09 18:03:16 · 612 阅读 · 0 评论 -
(dpdk f-stack)-ipvs实现L3/L4层代理
L3/L4层代理参考: https://github.com/iqiyi/dpvsLVS 实现参考:https://cloud.tencent.com/developer/article/1792298LVS向Netfilter的3个阶段注册钩子函数改写数据包在 LOCAL_IN 阶段注册了 ip_vs_in() 钩子函数。在 FORWARD 阶段注册了 ip_vs_out() 钩子函数。在 POST_ROUTING 阶段注册了 ip_vs_post_routing() 钩子函数。ipvs原创 2022-05-14 17:33:38 · 795 阅读 · 0 评论 -
(dpdk f-stack)-dperf做压测
dperf 项目地址 https://github.com/baidu/dperf编译dpdkexport RTE_SDK=/root/dpdk-stable-19.11.10export RTE_TARGET=x86_64-native-linuxapp-gccmake install T=x86_64-native-linuxapp-gcc编译dperfcd /home/dperf-1.1.0make -j4假设fstack作为udp代理,测udp吞吐例如 1Mpps 每个包大小为原创 2022-05-14 16:57:08 · 1502 阅读 · 0 评论 -
(dpdk f-stack)-理解ff_api.symlist
ngx_ff_module.c中提供了被nginx中调用的socket相关API比如:socket/bind/connect/recv/send 接口的重新实现,这些socket接口底层基于FreeBSD协议栈和dpdk实现的,而非Linux协议栈。 #define SYSCALL(func) \ ({原创 2022-05-14 16:14:31 · 285 阅读 · 0 评论 -
(dpdk f-stack)-Nginx使用kqueue
概述kqueue 是 FreeBSD 上的一种的多路复用机制。它是针对传统的 select/poll 处理大量的文件描述符性能较低效而开发出来的。注册一堆描述符到 kqueue 以后,当其中的描述符状态发生变化时, kqueue 将一次性通知应用程序哪些描述符可读、可写。kqueue APIs - int kqueue(void) 生成一个内核事件队列,返回该队列的文件描述索。其它 API 通过该描述符操作这个 kqueue 。 - kevent() 提供三个主要的行为功能。在下面小节中原创 2022-05-14 15:52:52 · 503 阅读 · 0 评论 -
(dpdk f-stack)-Nginx使用kqueue
概述 kqueue 是 FreeBSD 上的一种的多路复用机制。 它是针对传统的 select/poll 处理大量的文件描述符性能较低效而开发出来的。 注册一堆描述符到 kqueue 以后,当其中的描述符状态发生变化时, kqueue 将一次性通知应用程序哪些描述符可读、可写或出错了。kqueue APIs int kqueue(void) 生成一个内核事件队列,返回该队列的文件描述索。其它 API 通过该描述符操作这个 kqueue 。 kev...原创 2021-09-26 17:27:38 · 602 阅读 · 0 评论 -
(dpdk f-stack)-通过kni与kernel上服务通信
fstack利用dpdk读取物理网卡通过kni虚拟网卡将数据包发给kernel协议栈: dpdk从物理网卡读取数据包--》将此数据包入ring--》kni_process_tx读取ring中数据包--》将数据包发给 kni虚拟网卡--》kernel协议栈将包给应用程序。fstack从kni虚拟网卡读取kernel协议栈发来的数据包再利用dpdk从物理网卡发出去: 应用程序发包给kernel协议栈--》将数据包发给 kni虚拟网卡--》ff_eth_tx_burst从kni虚拟网卡读取...原创 2021-06-14 12:07:37 · 843 阅读 · 0 评论 -
(dpdk f-stack)-tcp代理访问rser时本地lport选择方法
in_pcbconnect_setup{ ... if (lport == 0) { struct ifaddr *ifa; struct ifnet *ifp; struct sockaddr_in ifp_sin; unsigned loop_count = 0; bzero(&ifp_sin, sizeof(ifp_sin)); ifp_sin.sin_addr.s_add...原创 2021-06-14 11:43:33 · 735 阅读 · 0 评论 -
(dpdk f-stack)-理解ff_api.symlist
#源码文件 IPFW_XMOD_SRCS_F=$(notdir $(wildcard $(TOPDIR)/xdja/xmod/ipfw_Xmod_*[!H].c)) IPFW_XMOD_SRCS_H=$(notdir $(wildcard $(TOPDIR)/xdja/xmod/ipfw_Xmod_*H.c)) cJSON.c #xmod相关代码 NETIPFW_SRCS+= $(IPFW_XMOD_SRCS_F) \ DH_mem.c \ ...原创 2021-06-14 11:02:43 · 910 阅读 · 0 评论 -
(dpdk f-stack)-实现L4代理功能
FreeBSD提供了IPFW机制,可以注册我们的hook函数来对数据包做改写操作;实现tcp/udp代理思路: 我们的hook函数中利用数据包匹配代理规则,对数据包做改写操作; dpdk收到包后,首先由我们的hook函数负责处理(可能改写ip/tcp头部信息),完事交由FreeBSD协议栈处理(交给上层应用处理,或者路由转发处理); nginx上层发包经过FreeBSD协议栈后,最终调用dpdk接口将数据包从网卡发送前也需调用我们hook函数(可能改写ip/tcp头部信息),完事交...原创 2021-06-14 10:36:14 · 923 阅读 · 0 评论 -
(dpdk f-stack)-整体框架
f-stack上nginx代理整体框架如下:原创 2021-06-14 09:17:00 · 1156 阅读 · 0 评论 -
(dpdk f-stack) 为何使用巨页
什么是页表:我们知道,在linux操作系统中,CPU在执行一个进程的时候,都会访问内存。但CPU并不是直接访问物理内存地址,而是通过虚拟地址空间来间接的访问物理内存地址。所谓的虚拟地址空间,是操作系统为每一个正在执行的进程分配的一个逻辑地址,在32位机上,其范围从0 ~ 4G-1。操作系统通过将虚拟地址空间和物理内存地址之间建立映射关系,让CPU间接的访问物理内存地址。通常将虚拟地址空间以512Byte ~ 8K,作为一个单位,称为页,并从0开始依次对每一个页编号。这个大小通常被称为页面原创 2021-04-17 07:36:04 · 688 阅读 · 0 评论 -
(dpdk f-stack) -网卡多队列
网卡是如何将网络中的报文分发到不同的队列呢?常用的方法有微软提出的RSS与英特尔提出的Flow Director技术,前者是根据哈希值希望均匀地将包分发到多个队列中。后者是基于查找的精确匹配,将包分发到指定的队列中。 1、RSS(Receive-Side Scaling,接收方扩展)RSS就是根据如下“关键字”通过哈希函数计算出哈希值,再由哈希值对网卡队列数求余确定数据包放到哪个队列。关键字是如何确定的呢?哈希函数一般选取...原创 2021-04-17 07:25:40 · 1144 阅读 · 0 评论 -
(dpdk f-stack) dpdk-网卡类型选择
http://blog.sina.com.cn/s/blog_90cfda2f0102wi9n.htmlSupported NICsAmazonena(Elastic Network Adapter)Chelsiocxgbe(Terminator 5)Cesnetszedata2(COMBO-80G, COMBO-100G)Ciscoenic(UCS Virt...原创 2018-12-29 22:09:08 · 12372 阅读 · 2 评论 -
(dpdk f-stack) SPDK-高效磁盘io读写
磁盘性能指标--IOPS:IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。 随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。 顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(Video On Demand),关注连续读...原创 2019-02-24 09:34:24 · 1700 阅读 · 0 评论 -
(dpdk f-stack) VMware跑 f-stack
目的:VMware虚拟机上跑fstack实现nginx web反向代理。网卡可以配置为e1000或者vmxnet3: 修改虚拟机安装目录下 xxxx.vmx 配置文件:修改文件:DPDK-FWD.vmxhpet0.present = "true"numa.vcpu.maxPerVirtualNode = "1"ethernet1.virtualDev = "vmxnet3"#e1000e只支持网卡单队列,vmxnet3支持网卡对队列...原创 2021-04-17 07:54:54 · 860 阅读 · 2 评论 -
(dpdk f-stack) top-工具代码分析
命令工具大体原理: nginx每个worker进程都有一个独立的FreeBSD栈,执行main_loop--process_msg_ring,此函数处理流程: 1)从msg_ring[proc_id].ring[0]中出队列,取出msg; 2)判断是FF_SYSCTL类型,然后执行ff_sysctl函数获取或设置FreeBSD内核的状态参数; 3)最后再把结果msg入队列msg_ring[proc_id].ring[msg->msg_ty...原创 2021-04-17 08:12:13 · 484 阅读 · 0 评论 -
(dpdk f-stack)-多进程模型
rte_eal_init: //对于fstack的 primary 和 secondary 进程,在 rte_eal_init 中不会执行函数pthread_create创建线程 RTE_LCORE_FOREACH_SLAVE(i) { /* * create communication pipes between master thread * and children */ if (pipe(lco...原创 2021-06-14 08:38:57 · 1708 阅读 · 0 评论