DPDK如何针对cache提高性能

深入浅出dpdk读书笔记--pcie与包处理(三)---收发包流程 pcie是报文转发的基础,DMA是网卡和CPU交互的具体方式,这两个知识点就像公路和汽车,外在的硬件已经有了,该启动汽车上路了,所以就有了接下来所讲的内容,dpdk数据的收发包流程。 阅读详情

前面介绍了一些cache的相关背景知识,这里单独写一篇博客,总结一下对于DPDK来说,为了提升性能,在cache方面有哪些需要注意的点。

①适时的使用cache预取技术。在处理网卡队列的时候,多数时候都是在处理连续的内存,此时应该主动调用预取函数,可以提升效率。

②为了解决cache一致性问题,数据结构尽量声明为cache line对齐。并且多核访问的数据,可以设计成每CPU变量。

③系统环境中开启大页

④使用支持DDIO技术的服务器。

⑤在NUMA系统中,为每个核分配内存,并且连接在某处理器上的PCI设备,让本地处理器来处理。

另外关注一个报文,从网卡收到,送到CPU,再到CPU送到网卡转发出去的全部过程:

①CPU把接收描述符写入内存。

②网卡收到报文后写入描述符。引入DDIO后直接写入cache,如果本身这块内存不在cache,也会在这时把这块内存放入cache。

③CPU从内存读更新后的描述符。确认收到报文再从内存读控制结构体指针,再根据指针从内存中读控制结构体。使用预取指令,直接把后续报文的内存也都拿到cache中。

④更新接收队列寄存器。

⑤CPU读到报文首地址,根据首地址读报文头,决定转发端口。引入DDIO时直接从cache读到。

⑥填入内存中的发送描述符,更新发送队列寄存器。引入DDIO后,此时描述符已经预取到cache了。

⑦CPU读内存看发送描述符,检查是否有报文被传出去了,有的话再读控制结构体,释放数据缓冲区。引入DDIO后可以直接读cache。

DPDK18.08上对VIRTIO IN ORDER 功能所做的优化 作为对应的实现,18.08中virtio user pmd中加入了两个新的收发函数:virtio_recv_mergeable_pkts_inorder和virtio_xmit_pkts_inorder。还有一个是in_order用来配置VIRTIO_F_IN_ORDERfeature,默认配置也是打开。所以现在如果在dpdk生成一个virtio虚拟设备,它的默认参数会是“queues=1,queue_size=256,server=0,mrg_rxbuf=1,in_order=1”。 阅读详情

相关推荐

dpdk核心组件及技术介绍

DPDK主要以IA(Intel Architecture)多核处理器为目标平台以,应对高性能数据包处理问题。其核心组件主要如图所示:其利用了大量的有助于包处理的软硬件特性,如huge page 、缓存行对齐、线程绑定、预取、NUMA、IA最新指令利用、Intel DDIO、内存交叉访问等。下面部分摘自Intel DPDK官网ring 管理器(librte_ring):环结构在有限大小的table(...

Dgh19940的博客 3019

《深入浅出DPDK》读书笔记(二):网卡的读写数据操作

本文内容为读书笔记,摘自《深入浅出DPDK》。 45.网卡的读数据操作 通常来说,为了发送一个数据报文到网络上去,首先是运行在CPU上的软件分配了一段内存,然后把这段内存读取到CPU内部,更新数据,并且填充相应的报文描述符(网卡会通过读取描述符了解报文的相应信息),然后写回到内存中,通知网卡,最终网卡把数据读回到内部,并且发送到网络上去。但是,没有DDIO技术和有DDIO技术条件的处理方式是不同的,图2-12是两种环境下的处理流程图。 图2-12网卡读数据的处理流程 图2-12a是没有DD.

RToax 4231

基于DPDK与OVS-DPDK构建高性能虚拟化网络数据平面实践

在云计算与网络功能虚拟化(NFV)领域,数据平面的性能优化是核心挑战。传统的内核网络协议栈因多次上下文切换与内存拷贝,难以满足5G核心网、边缘计算等高吞吐、低延迟场景的需求。数据平面开发套件(DPDK)通过用户态轮询模式驱动(PMD)直接操作网卡,并结合大页内存技术,实现了数据包处理路径的旁路,显著降低了延迟与CPU开销。其技术价值在于为虚拟化网络提供了接近线速的转发能力。Open vSwitch的DPDK后端(OVS-DPDK)与QEMU的vhost-user机制相结合,构建了从物理网卡到虚拟机用户态应用

524

改进Cache性能

如何改进Cache性能 平均访存时间 = 命中时间+失效率x 失效开销 (1)降低失效率 (2)减少失效开销 (3)减少Cache命中时间 1、降低失效率的方法 (1)调节Cache大小 (2)提高相联读 (3)Victim Cache。在Cache和它下一级存储器的数据通路之间增设一个全相联的小Cache (4)编译器优化 产生失效的原因: (1)强制性失效。当第一次访问一个块时,该块不在Cache中。需要下一级存储器中调入Cache,这种失效称为强制性失效,也称为冷启动失效或者首次失效。 (2)容量失效

tanxinji的博客 1356

一种解决STM32多串口同时收发的方法

在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口, 串口1重定向以后,用库函数自带的printf函数打印字符串 串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串 串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用 多次研究以后,采用三个串口都使用重定向后的库函数自带的printf

Zxp0605的博客 8796

FFTW库安装与使用(3.3.5版本)

FFTW库安装与使用一、FFTW库介绍与下载二、FFTW库安装三、FFTW库测试 一、FFTW库介绍与下载   FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT,且运行速度比Eigen和opencv自带的FFT库函数快10倍以上。   下载链接:http://www.fftw.org/install/wind

Jhon_ranble的博客 2万+

DDIO(Data Direct I/O)数据直连技术

为了发送一个数据报文到网络上去,首先是运行在CPU上的软件分配了一段内存,然后把这段内存读取到CPU内部,更新数据,并且填充相应的报文描述符(网卡会通过读取描述符了解报文的相应信息),然后写回到内存中,通知网卡,最终网卡把数据读回到内部,并且发送到网络上去。2)运行在CPU上的驱动程序或者软件得到通知收到新报文,去内存中读取控制结构体和相应的报文,Cache不命中。这个步骤和没有DDIO的技术类似,但是由于DDIO的引入,处理器会开始就把内存中的缓冲区和控制结构体预取到Cache,因此减少了内存读的时间。

存储随笔 5141

FPGA赋能:从加权灰度均值到快速收敛的自动曝光实战

本文深入探讨了FPGA在工业视觉自动曝光算法中的应用,重点介绍了加权灰度均值法的优化实现与快速收敛策略。通过硬件友好的算法改造和流水线架构设计,FPGA方案能在1帧内完成曝光调整,显著提升处理速度和能效比,适用于复杂光照条件下的工业检测场景。

weixin_29306317的博客 82

Packet Chasing:通过缓存侧信道监视网络数据包

摘要 本文介绍了一种对网络的攻击–Packet Chasing,这种攻击不需要访问网络,无论接收数据包的进程的特权级别如何,都能发挥作用。一个间谍进程可以很容易地探测和发现网络驱动程序使用的每个缓冲区的确切缓存位置。更有用的是,它可以发现这些缓冲区用于接收数据包的确切顺序。这样就可以通过缓存侧信道监控数据包频率和数据包大小。该攻击既可以在发送者和无法访问网络的远程间谍程序之间建立秘密通道,也可以进行直接攻击,识别网络上受害者的网页访问模式等。除了识别潜在的攻击外,本工作还提出了一种基于软件的短期缓解措施,以

分享观点和经验,欢迎交流。 1336

OpenClaw本地部署教程

本文详细介绍了在Windows 11系统上部署OpenClaw与Ollama本地模型的完整流程。主要内容包括:硬件要求说明、Node.js环境配置、Ollama模型安装与定制(重点扩展上下文窗口至32768 tokens)、OpenClaw核心框架安装与对接、常见问题解决(如模型上下文窗口过小报错)以及可选技能扩展和飞书接入方案。部署全程约需1-2小时,强调使用备用设备或虚拟机以确保安全,并提供关键配置参数和排错命令。该方案实现了"数据不出门、推理本地化"的私有化部署目标。

技术引领业务创新 2577

基于Simulink的前馈解耦SVPWM整流器仿真

本文提出了一种基于Simulink的前馈解耦SVPWM整流器仿真方案,针对传统双闭环控制存在的耦合严重、电压利用率低等问题进行优化。通过前馈补偿dq轴耦合项(ωLiq和ωLid)结合SVPWM调制算法,实现了电流跟踪误差<3%、电压利用率达0.99、THD<3%的性能指标。文章详细阐述了系统架构设计,包括前馈解耦原理推导、SVPWM算法实现步骤,并提供了完整的Simulink建模方法。仿真结果表明,该方案在动态响应速度(25ms)和直流电压纹波(1.1%)方面显著优于传统SPWM控制。同时给出了

MHD0815的博客 162

DPDK系列之三十七IO处理

如果一条通信链路要想达到最优的效果,一定是整体上每个环节都要有最佳的节奏协调控制而不一定是每个环节都是最优。这个在计算机的数据处理上就更是明显。一般来说,IO的速度是最低的,至少在可见的时光里要想超越CPU和内存还是很难的。以网卡通信为例,网卡本身就IO传输,然后通过总线传输进入内存,内存进缓存,缓存到CPU,然后再原路一个反馈。学过计算机的一般都知道,这里面涉及到的几个部分,数据的处理速度那是有着量层级上的差异的。所以在处理问题上有三条思路:一是把短板补齐,也就是那个慢把哪个速度提起来。

fpcc的专栏 672

Elsevier期刊LaTeX双栏模板(cas-dc)实战:从Overleaf配置到投稿全流程

本文详细介绍了Elsevier期刊LaTeX双栏模板(cas-dc)在Overleaf平台上的配置与使用全流程,包括模板结构解析、标题与作者信息规范、摘要与关键词特殊格式、正文写作技巧、参考文献管理以及投稿前检查清单。特别针对Elsevier期刊投稿需求,提供了从模板安装到最终投稿的实用指南,帮助研究者高效完成论文排版工作。

weixin_28455801的博客 1323

DPDK基础入门(二):Cache与大页优化

目前Cache主要由三级组成: L1 Cache, L2 Cache和Last Level Cache(LLC)。L1最快,但容量小,可能只有几十KB。LLC慢,但容量大,可能多达几十MB。L1和L2 Cache一般集成在CPU内部。另外,,L1和L2 Cache是每个处理器核心独有的 ,而LLC是被所有核心所共享的。Intel处理器对各级Cache的访问时间一直都保持稳定, 见下表所示。

一枚菜鸡 1623

Cube生成定时器2触发双ADC同步采集并用DMA传输

前言 用cube生成一个用定时器触发ADC1,ADC2同步采集的程序,单片机选择的是STM32L476RGT6,用定时器2进行ADC采集触发,更改定时器2的定时周期便可以更改ADC的采样周期,ADC1和ADC2使用同步规则模式,并用DMA进行数据的传输。 STM32的ADC采样完成总共需要的时间是 ADC完成采样时间=采样周期+12个转换周期 举个例子,假如ADC的时钟是15MHz,采样周期是3个周期,3个采样周期加上12个转换周期,一共是15个周期,因为时钟是15MHz,所以完成一次ADC转换总共需要的时

一行代码的博客 4513

JAVA:Spring Boot3 集成 Spring AI 实现 Skill 开发

本文介绍了如何通过Spring Boot和Spring AI实现大模型技能(Skill)开发,让AI具备调用业务系统能力。文章首先解释了Skill的概念,即AI可调用的业务能力,如查询订单、天气等,并展示了执行流程和整体架构。然后详细介绍了实践样例,包括技术版本、Maven依赖配置、AI服务设置、ChatClient创建和Skill技能注册中心的实现。注册中心提供了技能的注册、查询、启用/禁用等功能,支持按类别管理技能,并能够获取所有可用技能列表。通过这种方式,开发者可以轻松为大模型扩展业务功能调用能力。

木头 622

DPDK简介

DPDK简介 主流包处理硬件平台 硬件加速器:ASIC、FPGA 网络处理器 多核处理器 传统Linux网络驱动的问题 中断开销突出,大量数据到来会触发频繁的中断(softirq)开销导致系统无法承受 需要把包从内核缓冲区拷贝到用户缓冲区,带来系统调用和数据包复制的开销 对于很多网络功能节点来说,TCP/IP协议并非是数据转发环节所必需的 NAPI/Netmap等虽然减少了内核到用户空间的数据拷贝...

u013513092的博客 7880

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

不懂 dpdk mbuf 结构?此篇文章带你超神

dpdk 中的 mbuf

龙瑜的博客 9208

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《深入浅出DPDK》读书笔记(一):基础部分知识点

OS 的内核不是解决 C10M 问题的办法,恰恰相反 OS 的内核正是导致 C10M 问题的关键所在。

RToax 7890

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DPDK学习(一)DPDK简介

1.DPDK介绍 Intel® DPDK 全称 Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。其工作在用户层,取代传统Linux系统中的网络数据报文处理。...

cuibin1991的专栏 2387

DPDK指南--编写高效的代码

简介 本章提供了使用DPDK开发高效代码的一些技巧。有关更多的信息,请参考Intel®64和IA-32架构优化参考手册,这是编写高效代码的宝贵参考资料。 1、内存 本节描述在DPDK环境中开发应用程序时的一些关键内存注意事项。 1.1内存拷贝:不要在数据平面中使用libc 在DPDK中可以通过Linux*应用程序环境获得许多libc函数。这可以简化应用程序的移植和配置平面的开发。然而,这些功...

轻飘飞扬 3773

dpdk mempool驱动开发

在DPDK中实现`mempool`驱动与硬件交互的功能,可以让内存池直接利用硬件资源进行内存管理,通常是在具有专用内存管理单元的硬件(如FPGA或NIC卡)上实现,以进一步提升数据包的分配和回收效率。`my_mempool_alloc` 和 `my_mempool_free` 函数分别负责内存池的分配和释放。通过`rte_mempool_register_ops`将自定义的`mempool`驱动注册到DPDK中,使得应用程序可以通过常规的DPDK `mempool` API 访问硬件内存池。

1855

DPDK的方法论

0x00缘由        吃完午饭,闲来无聊阅读了《深入浅出DPDK》,看到以下章节顿时感觉自己在性能优化上是摸着石头过河。如果好好理解这段话,会对目前工作做的事情有个好的指导。           DPDK采用了很多具体优化方法来达到高性能的提升,有一些是利用IA软件优化的最佳实践方法,还有一些是利用了IA的处理器特性。 0x01 专用负载下的针对性软件优化        专用处理器通

3-Number 1412

多线程DPDK应用的内存优化

在一个线程收包,另一个线程发包的情况下,mbuf不会在同一个线程分配/释放,也就是上述导致内存池cache冗余(两个线程,两个mempool,两个mempool的cache)的例子。这个模型的效率更高。对这个程序来说,这是一个糟糕的模型,因为线程0的mempool cache一直包含的是'冷'的mbuf,而线程1的mempool cache一直是满的。采用stack模型的mempool时,CPU会尽可能把程序请求的大多数mbuf保持在Cache中,只有其中少部分会被刷到内存里。

lingshengxiyou的博客 526

高性能网关设备及服务实践(dpdk)--服务器架构研究

转载 2017年07月04日 14:59:27 798 针对海量的网络流量,转发性能是我们最关键的一个方面,那构建高性能的后台服务器有哪些关键的技术和需要注意的地方,今天邀请了后台开发同学童琳和郑胜利来和大家一起谈谈。 一、引言 随着互联网的高速发展,内容量的提升以及对内容智能的需求、云产业的快速突起,作为互联网的计算基石服务器的形态

sinat_26143945的博客 1415

DPDK学习总结(一)简介

开始学习DPDK,将学习中的心得和分析记录下来,以免时间久了自己都忘记了,也便于和其他同道中人交流。说是学习心得和体会,但也借鉴了书籍和其他网友的分析总结,在学习他人总结过程中发现介绍往往浅尝辄止,知其然不知其所以然,因此本学习总结希望可以从一个初学者的角度来介绍,尽量做到知其然及知其所以然,可能大家会觉得别人一两句话说完的事情这里用了一个章节来描述很啰...

weixin_33845477的博客 302
上一篇: DPDK学习——cache相关知识④
下一篇: Linux的内存寻址——浅谈分段和分页机制
HelloNerd
博客等级 码龄12年 10粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值