RDMA
RDMA(Remote Direct Memory Access)技术全称远程直接内存访问,就是为了解决网络传输中服务器端数据处理的延迟而产生的。
RDMA有两种基本操作。
- Memory verbs: 包括RDMA read、write和atomic操作。这些操作指定远程地址进行操作并且绕过接收者的CPU。
- Messaging verbs:包括RDMA send、receive操作。这些动作涉及的接收方CPU,发送的数据被写入由接收方的CPU先前发布的接受所指定的地址。
目前的RDMA硬件提供一种数据报传输:不可靠的数据报(UD),并且不支持memory verbs。
目前RDMA有三种不同的硬件实现。分别是InfiniBand、iWarp(internet Wide Area RDMA Protocol)、RoCE(RDMA over Converged Ethernet)。
- Infiniband,支持RDMA的新一代网络协议。 由于这是一种新的网络技术,因此需要支持该技术的NIC和交换机。
- RoCE,一个允许在以太网上执行RDMA的网络协议。 其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,支持RoCE。
- iWARP,一个允许在TCP上执行RDMA的网络协议。 IB和RoCE中存在的功能在iWARP中不受支持。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,并且支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在SW中实现,并且丧失了大部分RDMA性能优势。
RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。
消息服务建立在通信双方本端和远端应用之间创建的Channel-IO连接之上。当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(QP)。每对QP由Send Queue(SQ)和Receive Queue(RQ)构成,这些队列中管理着各种类型的消息。QP会被映射到应用的虚拟地址空间,使得应用直接通过它访问RNIC网卡。除了QP描述的两种基本队列之外,RDMA还提供一种队列Complete Queue(CQ),CQ用来知会用户WQ上的消息已经被处理完。
RDMA提供了一套软件传输接口,方便用户创建传输请求Work Request(WR),WR中描述了应用希望传输到Channel对端的消息内容,WR通知QP中的某个队列Work Queue(WQ)。在WQ中,用户的WR被转化为Work Queue Element(WQE)的格式,等待RNIC的异步调度解析,并从WQE指向的Buffer中拿到真正的消息发送到Channel对端。
ZNS
传统 SSD(aka Flash-ssd, Block Interface ssd)的一些问题
物理介质决定了 ssd 不能覆写,在写之前需要先擦除,而且有磨损的问题
- 性能问题:以 block 为粒度擦除,同时还要维护 LBA、进行 GC 和寻找空闲 page
- 写放大问题:OP 的来源,page 随机分布在整个 ssd 的块空间中的:
- 删除文件 c 对应的 page 需要搬移同 block 内的其他 page 到 OP 空间,然后再整块擦除
ZNS 架构
ZNS-ssd 像 OC 那种 channel,将整个SSD内部的存储区域分为多个zone 空间,每一段zone空间管理一段LBA(物理page和逻辑地址之间的映射),不同的zone 空间之间的数据可以是独立的。最主要的是,每一个zone 内部的写入只允许顺序写,可以随机读。因为 zone 内部的顺序写特性,基本可以消除 SSD GC的开销。为了保证zone 内部的顺序写,在ZNS内部想要覆盖写一段LBA地址的话需要先reset(清理当前地址的数据),才能重新顺序写这一段逻辑地址空间。