0%

在没有实现无锁化编程之前,我们对共享数据(变量)的操作需要用到锁。多线程并发访问数据的时候,锁的维护非常的麻烦,并且锁的申请和释放、多线程竞争锁的过程中会存在资源的消耗。同时,锁的引入也会引起线程阻塞、锁竞争、死锁等问题。

CAS (compare and swap, CAS) 比较并交换,是原子操作的一种,可用于在多线程编程环境中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及终端的不可预知性产生的数据不一致的问题。该操作通过将内存中的值与指定的数据进行交换,当数值一样时将内存中的数据替换为新的值。

一个CAS操作等价于以下C代码的原子实现如下:

阅读全文 »

linux 伙伴系统是内存管理的子系统会将物理内存分成一个个页(page),4KB,大页内存2MB,1G等。

伙伴系统(Buddy System)将我们物理页划分成不同大小的内存块。大小相等的内存块使用链表将其连接起来,如下图所示:

阅读全文 »

位运算是一组在二进制位级别上操作数据的运算操作,直接对二进制位进行操作。常见的位运算操作如下:

  • 按位与&:将两个操作数对应的位进行逻辑与操作,都为1时为1,否则为0。

  • 按位或|:将两个操作数对应的位进行逻辑或操作,有一个为1时为1,否则为0。

  • 按位异或^:将两个操作数对应的位进行异或操作,对应位不同时为1,相同时为0。

  • 按位取反~:将两个操作数对应的位进行取反操作,0变为1,1变为0。

  • 左移<<:将操作数的所有位向左移动指定的位数,左移会在右侧补0,相当于原数进行乘以2的幂数操作。‘

  • 右移>>:将操作数的所有位向右移动指定的位数。右移操作 可以分为算术右移和逻辑右移,算术右移在左侧补符号位,

    逻辑右移则是在左侧补0。

阅读全文 »

第一章 介绍

本文档提供软件架构、开发环境和优化指南相关信息。

有关编译和运行示例程序的说明介绍,详见 DPDK示例程序用户指南

有关编译和运行应用程序的一般信息,详见 DPDK入门指南

文档路线图

以下是在阅读DPDK相关文档的时候的阅读顺序建议:

  • 发布说明(此文档): 提供发布相关的信息,包括支持的功能、限制、修复的问题和已知问题等。除此之外,还以FAQ(Frequently Asked Questions)的方式提供了常见问题及解答。

  • 入门指南: 描述讲解如何安装和配置DPDK软件,旨在帮助用户能快速上手使用软件。

  • FreeBSD* 入门指南: DPDK1.6.0 版本中新增了一份讲述在FreeBSD上使用DPDK的文档。参考这份文档,在FreeBSD平台上安装和配置DPDK。

  • 程序员指南(本文档): 描述:

    • 软件架构及如何使用(通过示例程序),特别是在Linux环境中的应用程序。
    • DPDK的主要内容,构建系统(包括能在DPDK目录下使用Makefile编译构建开发套件和应用程序的命令)以及应用程序的的移植指南。
    • 软件中使用的优化以及新开发时候应该考虑的优化。

    同时也提供了术语表。

  • API 参考: 提供了详细的有关DPDK函数、数据结构以及其他编程结构的信息。

  • 示例应用程序用户指南: 描述一组示例程序。每个章节描述一个示例应用程序,展示特定的功能,同时也提供有关如何编译运行和使用的示例说明。

相关刊物

以下文档提供了与使用DPDK开发应用程序相关的信息:

  • 英特尔® 64和IA-32架构软件开发者手册第3A卷:系统编程指南。

第二章 概述

本节概述了数据平面开发套件(DPDK)的架构。DPDK的主要目标是为数据平面应用程序提供一个简单、完整的快速数据包处理框架。用户可以使用该代码来理解一些采用的技术,用于原型设计或添加自己的协议栈。还提供了使用DPDK的备选生态系统选项。

开发环境

简介

数据面开发工具包(DPDK)testpmd应用程序可用于测试数据包转发模式下的dpdk,也可以用于访问NIC网卡硬件功能。可以在网络接口之间转发数据包,同时可以测试一些不通驱动的一些功能,比如RSS,过滤器以及流量控制器等等。

阅读全文 »