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

本文介绍了DDIO(Data Direct I/O)技术如何优化网卡的读写操作,减少内存访问次数和Cache写回延迟,从而提高网络数据传输的效率和降低延迟。在没有DDIO的情况下,处理器更新数据后需要等待Cache写回内存,而网卡读取时可能再次引发内存读写。使用DDIO后,数据可以直接从Cache传输,减少了中间步骤,提升了系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文内容为读书笔记,摘自《深入浅出DPDK》。


45.网卡的读数据操作

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

 

图2-12网卡读数据的处理流程

图2-12a是没有DDIO技术的处理流程。

  • 1)处理器更新报文和控制结构体。由于分配的缓冲区在内存中,因此会触发一次Cache不命中,处理器把内存读取到Cache中,然后更新控制结构体和报文信息。之后通知NIC来读取报文。
  • 2)NIC收到有报文需要传递到网络上的通知后,它首先需要读取控制结构体进而知道从哪里获取报文。由于之前处理器刚把该缓冲区从内存读到Cache中并且做了更新,很有可能Cache还没有来得及把更新的内容写回到内存中。因此,当NIC发起一个对内存的读请求时,很有可能这个请求会发送到Cache系统中,Cache系统会把数据写回到内存中,然后内存控制器再把数据写到PCI总线上去。因此,一个读内存的操作会产生多次内存的读写。

图2-12b是有DDIO技术的处理流程。

  • 1)处理器更新报文和控制结构体。这个步骤和没有DDIO的技术类似,但是由于DDIO的引入,处理器会开始就把内存中的缓冲区和控制结构体预取到Cache,因此减少了内存读的时间。
  • 2)NIC收到有报文需要传递到网络上的通知后,通过PCI总线把控制结构体和报文送到NIC内部。利用DDIO技术,I/O访问可以直接将Cache的内容送到PCI总线上。这样,就减少了Cache写回时等待的时间。

由此可以看出,由于DDIO技术的引入,网卡的读操作减少了访问内存的次数,因而提高了访问效率,减少了报文转发的延迟。在理想状况下,NIC和处理器无需访问内存,直接通过访问Cache就可以完成更新数据,把数据送到NIC内部,进而送到网络上的所有操作。


46.网卡的写数据操作

网卡的写数据操作和上节讲到的网卡的读数据操作是完全相反的操作,通俗意义上来讲就是有网络报文需要送到系统内部进行处理,运行的软件可以对收到的报文进行协议分析,如果有问题可以丢弃,也可以转发出去。其过程一般是NIC从网络上收到报文后,通过PCI总线把报文和相应的控制结构体送到预先分配的内存,然后通知相应的驱动程序或者软件来处理。和之前讲到的网卡的读数据操作类似,有DDIO技术和没有DDIO技术的处理也是不一样的,以下是具体处理过程。

首先还是没有DDIO技术的处理流程,如图2-13a所示。

  • 1)报文和控制结构体通过PCI总线送到指定的内存中。如果该内存恰好缓存在Cache中(有可能之前处理器有对该内存进行过读写操作),则需要等待Cache把内容先写回到内存中,然后才能把报文和控制结构体写到内存中。
  • 2)运行在处理器上的驱动程序或者软件得到通知收到新报文,去内存中读取控制结构体和相应的报文,Cache不命中。之所以Cache一定不会命中,是因为即使该内存地址在Cache中,在步骤1中也被强制写回到内存中。因此,只能从内存中读取控制结构体和报文。

图2-13 网卡写数据的处理流程

有DDIO技术的处理流程,如图2-13b所示。

  • 1)这时,报文和控制结构体通过PCI总线直接送到Cache中。这时有两种情形:
  •   a)如果该内存恰好缓存在Cache中(有可能之前处理器有对该内存进行过读写操作),则直接在Cache中更新内容,覆盖原有内容。
  •   b)如果该内存没有缓存在Cache中,则在最后一级Cache中分配一块区域,并相应更新Cache表,表明该内容是对应于内存中的某个地址的。
  • 2)运行在处理器上的驱动或者软件被通知到有报文到达,其产生一个内存读操作,由于该内容已经在Cache中,因此直接从Cache中读。

由此可以看出,DDIO技术在处理器和外设之间交换数据时,减少了处理器和外设访问内存的次数,也减少了Cache写回的等待,提高了系统的吞吐率和数据的交换延迟。


系列文章

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

 

 

### 回答1: DPDK(Data Plane Development Kit)是一种高性能数据面开发工具包。深入浅出DPDK是一份详细介绍DPDK的PDF文档,适合初学者了解DPDK的基本概念和使用方法。 该文档从DPDK的介绍开始,介绍了DPDK的发展历史、使用场景和目标。接着详细介绍了DPDK的架构,包括主要组件和数据流向。其中详细介绍了包管理的基本原理和流程、缓存池的管理方式、内存对齐和地址映射等内容。 文档还介绍了如何使用DPDK,包括DPDK的编译和安装、如何使用DPDK进行虚拟网络功能(VNF)处理,以及如何使用DPDK进行数据包嗅探和过滤等。 此外,该文档还介绍了DPDK的性能优化技巧,包括如何优化包接收和处理、如何使用多核心优化性能和如何配置DPDK与硬件交互。 总体而言,深入浅出DPDK是一份非常有价值的文档,它不仅为初学者提供了详细的DPDK介绍和使用指南,还涵盖了DPDK的高级主题和性能优化技巧,为使用DPDK进行高性能数据面开发的人员提供了重要的参考资料。 ### 回答2: DPDK(Data Plane Development Kit)是一个高性能数据平面开发工具包,它使用用户态技术实现了零拷贝的数据处理和高速的数据包转发。作为一款开源工具,DPDK已经被广泛应用于虚拟化、云计算及网络功能虚拟化等领域。 《深入浅出dpdk》是一份由DPDK社区编写的指南,它的目的是帮助开发人员更好地了解DPDK,并使用DPDK构建高性能网络应用程序。该指南提供了详细的DPDK架构、API接口、应用案例和性能调优等方面的介绍,同时也介绍了其他相关技术,例如硬件加速、 NUMA架构、 数据库加速、分布式系统等。 《深入浅出dpdk》PDF版本可以从DPDK社区网站上自由下载,它包含了大量易懂的图表和代码实例,让开发人员更容易理解DPDK的概念和原理。对于想要在高性能数据平面开发方面取得突破的开发人员来说,这份指南是不可或缺的学习资料。 需要注意的是,《深入浅出dpdk》不仅是一份教材,更是一份指导开发人员如何使用DPDK进行数据平面开发的实际指南。开发人员在阅读本指南的同时,也需要具备一定的网络编程基础和C语言编程能力。同时,开发过程中还需要注意DPDK版本的兼容性和网络设备的支持情况。 ### 回答3: DPDK(Data Plane Development Kit)是一种高性能数据面开发工具包,它可以帮助开发人员快速地实现高性能网络应用程序。本篇文章解析的Deep Dive into DPDK的PDF文件是一份帮助初学者深入了解DPDK的指南,其中详细地介绍了DPDK的各种重要概念、特性和使用方法。 首先,这份PDF文件详细介绍了DPDK的架构和工作原理。DPDK采用轮询机制减少了对内核的依赖,从而显著提高了网络数据处理的性能。此外,本文还介绍了DPDK中各种组件的作用和功能,例如EAL(Environment Abstraction Layer)、Mempool、Ring等。这些组件都是DPDK中重要的工具,它们可以帮助开发人员更好地构建高性能应用程序。 其次,本文还介绍了如何使用DPDK来构建网络应用程序。首先,开发人员需要安装DPDK,并正确配置相应环境变量。其次,本文还介绍了如何使用DPDK的API来实现数据包的发送和接收。这些API提供了高效的数据传输方式和内存管理方式,开发人员可以根据自己的需求进行自定义。 此外,本文还介绍了DPDK的一些高级功能,例如NUMA支持、内存优化等。这些功能可以帮助开发人员更好地控制和管理系统资源,从而确保系统的高性能和稳定性。 总之,本文是一份非常实用的DPDK指南,其中介绍了DPDK的各种重要概念、特性和使用方法。初学者可以通过阅读这份文件,快速掌握DPDK的核心知识,为构建高性能应用程序打下牢固的基础。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值