dpdk之cache和内存

系统架构的演进

如果 CPU 性能很好,处理速度很快,但是配备的存储系统吞吐率不够或者性能不够好,那 CPU 也只能处于忙等待,从而导致处理数据的能力下降。

一个处理器通常包含多个核心(Core),集成 Cache 子系统,内存子系统通
过内部或外部总线与其通信。

现代架构NUMA(Non-Uniform Memory Architecture,非一致性内存架构)系统
该系统每个处理器都有本地内存(Local memory),访问本地内存的时
间很短,而访问远程内存(remote memory),即其他处理器的本地内存,需要通过额外的总
线!对于某个处理器来说,当其要访问其他的内存时,轻者要经过另外一个处理器,重者要
经过 2 个处理器,才能达到访问非本地内存的目的,因此内存与处理器的“距离”不同,访
问的时间也有所差异。

内存子系统

1)RAM(Random Access Memory):随机访问存储器
2)SRAM(Static RAM):静态随机访问存储器
3)DRAM(Dynamic RAM):动态随机访问存储器。
4)SDRAM(Synchronous DRAM):同步动态随机访问存储器。
5)DDR(Double Data Rate SDRAM):双数据速率 SDRAM。
6)DDR2:第二代 DDR。
7)DDR3:第三代 DDR。
8)DDR4:第四代 DDR。

Cache 系统简介

目的是为了匹配处理器和内存之间存在的巨大的速度鸿沟

cache种类

分为三级,速度越快容量越小

TLB(Translation Look-aside Buffer)Cache 应运而生,专门用于缓存内存中的
页表项。
虚拟地址和分段分页技术被提出来用来保护脆弱的软件系统。软件使用虚拟地址访问内存,而处
理器负责虚拟地址到物理地址的映射工作。为了完成映射工作,处理器采用多级页表来进行
多次查找最终找到真正的物理地址。当处理器发现页表中找不到真正对应的物理地址时,就
会发出一个异常,挂起寻址错误的进程,但是其他进程仍然可以正常工作。

何把内存中的内容存放到 Cache 中去呢?

这就需要一个映射算法和一个分块机制。
分块机制就是说,Cache 和内存以块为单位进行数据交换,块的大小通常以在内存的一
个存储周期中能够访问到的数据长度为限。当今主流块的大小都是 64 字节,因此一个 Cache
line 就是指 64 个字节大小的数据块。
而映射算法是指把内存地址空间映射到 Cache 地址空间。具体来说,就是把存放在内存
中的内容按照某种规则装入到 Cache 中,并建立内存地址与 Cache 地址之间的对应关系。当
内容已经装入到 Cache 之后,在实际运行过程中,当处理器需要访问这个数据块内容时,则
需要把内存地址转换成 Cache 地址,从而在 Cache 中找到该数据块,最终返回给处理器。
根据 Cache 和内存之间的映射关系的不同,Cache 可以分为三类:第一类是全关联型
Cache(full associative cache),第二类是直接关联型 Cache(direct mapped cache),第三类是
组关联型 Cache(N-ways associative cache)

全关联型 Cache
直接关联型 Cache
组关联型 Cache
不同的cache不同的映射算法

Cache 的写策略

内存的数据被加载到 Cache 后,在某个时刻其要被写回内存。
直写和回写,回写在多处理器核心时处理会产生脏页。
WC(write-combining)和 UC(uncacheable)

cache 的预取

按一定的规则进行预取
程序员可以一定程度上控制预取

Cache 一致性问题

dpdk预取

处理报文需要做一些什么事情呢?以下是一个基本过程。
1)写接收描述符到内存,填充数据缓冲区指针,网卡收到报文后就会根据这个地址把
报文内容填充进去。
2)从内存中读取接收描述符(当收到报文时,网卡会更新该结构)(内存读),从而确认
是否收到报文。
3)从接收描述符确认收到报文时,从内存中读取控制结构体的指针(内存读),再从内
存中读取控制结构体(内存读),把从接收描述符读取的信息填充到该控制结构体。
4)更新接收队列寄存器,表示软件接收到了新的报文。
5)内存中读取报文头部(内存读),决定转发端口。
6)从控制结构体把报文信息填入到发送队列发送描述符,更新发送队列寄存器。
7)从内存中读取发送描述符(内存读),检查是否有包被硬件传送出去。
8)如果有的话,从内存中读取相应控制结构体(内存读),释放数据缓冲区

当一个网络报文送到服务器的网卡时,网卡通过外部总线(比如 PCI 总线)把数据和报
文描述符送到内存。接着,CPU 从内存读取数据到 Cache 进而到寄存器。进行处理之后,再
写回到 Cache,并最终送到内存中。最后,网卡读取内存数据,经过外部总线送到网卡内部,
最终通过网络接口发送出去。

DDIO技术
使外部网卡和 CPU 通过 LLC Cache 直接交换数据,绕过了内存这个相对慢速的部件。

NUMA 系统
在这个架构中,处理器和本地内存之间拥有更小的延迟和更大的带宽,而整个内存仍然可作为一个整
体,任何处理器都能够访问,只不过跨处理器的内存访问的速度相对较慢一点。同时,每个
处理器都可以拥有本地的总线,如 PCIE、SATA、USB 等。和内存一样,处理器访问本地的
总线延迟低,吞吐率高;访问远程资源,则延迟高,并且要和其他处理器共享一条总线。

Guess you like

Origin blog.csdn.net/qq_38595432/article/details/118753564