dpdk-prog-guide阅读笔记--Mempool_Library

3 篇文章 0 订阅
3 篇文章 0 订阅

1. Mempool Library

DPDK的mempool库一般都是使用ring库实现的,利用了内存的channel、rank特性加速内存数据存取过程。

1.2 内存结构 

内存从CPU到实际的存储节点,结构为:
1. channel
2. DIMM
3. rank
4. chip
5. bank(感觉这个概念乱入了)
6. row/column

1.1.1 channel

CPU到内存的通路是channel,每个channel对应一个CPU的内存控制器,每个channel可以配有多个DIMM。

1.1.2 DIMM

DIMM就是内存条,以前的主机是直接将存储芯片(chip)插在主板上的,然后发展出SIMM,将多组chip焊在一片电路板上,成为存储模组,再将这块电路板插到主板上。后来为了增大吞吐量,将一块存储模组的频宽从32bit增加到64bit。

1.1.3 rank

rank是指连接到同一chip set(CS)的记忆体颗粒chip,存储控制器可以对同一rank的chip做读写操作,同一rank的数据也共享控制信号。  
rank之间共享同一组addr/commond信号线,利用cs片选线选择将要读取或写入的是哪一组,之后的内容经由MUX多路器送出。  
目前PC的内存控制器通道绝大部分都是64bit宽,内存颗粒的位宽是8bit,所以8个chip颗粒就能满足内存控制器的需求,也就是一组rank。

1.1.4 chip

内存条上的黑色芯片就是chip,一个黑色芯片对应一个chip。

1.1.5 bank

传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接收的数据容量就是CPU数据总线的位宽,单位是bit(位)。内存与CPU之间的数据交换通过主板上的北桥芯片进行,内存总线的数据位宽等同于CPU数据总线的位宽,这个位宽就称之为物理Bank(Physical Bank,简称P-Bank)的位宽。以目前主流的DDR系统为例,CPU与内存之间的接口位宽是64bit,也就意味着CPU在一个周期内会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条Bank。不过以前有不少朋友都认为,内存的物理Bank是由面数决定的:即单面内存条则包含一个物理Bank,双面内存则包含两个。其实这个看法是错误的。  
bank相当于是每次存取的最小单元?

1.1.6  row/column

将内存空间看为而为矩阵的话,每行是一个row,每列是一个column,每列的尾端有一个row buffer,用来缓存提取出的数据。  
一般来说横向选择排数的线路称为row(row enable, row select, word line),纵向负责传送信号的线路称为column(bitline),每组bank的下方还会有个row buffer(sense amplifer),负责将读出的row内容暂存,等待column位址送到后输出正确的位元,以及判断存储的内容是0还是1.

1.2 内存读写方式

读取时首先内存控制器将1组位址现传到内存上,控制器跟着传送控制信号;如果是多rank的情况,CS也会送到对应信号选择的目标rank上。接着由于每个rank是由多个chip组成,每个chip仅负责部分的资料读取,chip接收到位址信号后,将位址放入内部的row/column解码器找出对应的bank位址(每家厂商每款产品内部的bank组合可能不同,因此相应地也会略有不同),接着开启row线,同一排row的内部内容就会流到row buffer内部,row buffer判断信号为0或是1之后就输出存储内容。  
写入时除了位址资料以外,还会传送欲写入的内容至芯片内部的input buffer,同样的也是按照row/column解码器找出对应位址之后写入。

1.3 内存对齐约束

DPDK利用内存特性,通过填充的方式,将每个对象的起始位置都是在内存中的不同channel和不同rank上,比如说pkt1的起始地址是channel-0的rank-0,那么需要考虑是否使用填充将pkt1的起始地址放置到channel-1的rank-1上。

1.4 本地Cache

CPU跨节点访问时,每次都需要进行CAS操作,开销代价非常大。Mempool的管理器为每一个core维持一个cache,并选择批量执行请求。这样每一个core都能无锁的访问属于自身的所有节点。  
cache由一个较小且根据core划分的table及其长度组成。cache的最大长度CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE是在编译时期指定的。

1.5 Mempool Handlers

支持自定义操作。

1.6 Use Cases

1. MBuf Library  
2. Environment Abstraction Layer , for logging service
3. 任何需要申请固定大小对象且将被系统持续使用的用例。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值