问题
通过RDMA可以以虚拟地址的形式向客户端公开服务器端内存区域,即RDMA连接的内存。客户端可以通过单方面请求直接访问这些区域的数据,在服务器端绕过CPU,由RDMA NIC(RNIC)使用RNIC页表执行虚拟到物理地址的转换,然后将数据DMA到物理内存。通过这种方式,RDMA提供了低延迟和高CPU效率。
为了进一步扩大RDMA连接的内存,考虑利用SSD扩展内存空间。提出了一种称为ODP MR(内存区域按需换页)[22]的硬件机制来支持它。在处理RDMA请求时,RNIC将触发SSD驻留数据的页面故障中断,然后CPU将数据从SSD提升到内存,并更新RNIC页面表。但其显著增加了延迟,RDMA READ在内存内页面上延迟为3.66μs,在SSD驻留页面上的延迟为570.74μs。根本原因是RNIC硬件的计算和内存资源有限[22],只能以简单、低效的方式处理RNIC页面故障的异常(例如,丢弃接收到的数据并通知客户端RNIC重新发送)。
本文方法
本文提出了TeRM,用SSD扩展RDMA连接的内存。主要思想是消除关键路径中的RNIC和CPU页面故障。
-
异常处理(即RNIC页面故障)从硬件加载到软件。对于所有SSD驻留页面,TeRM使RNIC页面表指向包含预定义模式的保留物理页面。通过这种方式,消除RNIC页面故障。对于读取请求,客户端首先通过RDMA read获取数据,并识别页面是否在SSD上。然后,客户端使用RPC从服务器检索SSD驻留页面,但不需要对内存驻留页面进行任何额外操作,从而在常见情况下确保快速远程访问。同时,还介绍了一套减少网络流量的技术。
-
为了消除RPC执行的关键路径中的重CPU页面故障[11,30,42],提出了分层IO。其关键思想是通过文件IO接口而不是内存加载/存储接口访问SSD扩展的虚拟内存。当数据缓存在物理内存中时,通过缓冲IO读取/写入SSD扩展的虚拟内存,否则通过绕过页面缓存的直接IO。
-
由于直接I/O导致冻结了服务器上的数据放置。如果一个热点在SSD上,它将始终由RPC直接IO访问。因此,设计了一种动态热点提升机制,该机制依赖于客户端和服务器的协作。
开源代码:GitHub - thustorage/TeRM: TeRM: Extending RDMA-Attached Memory with SSD
评估显示,TeRM的性能接近理想上限,其中所有页面都固定在物理内存中。与现有方法相比,TeRM显著提高了未修改的基于RDMA的存储系统(包括文件系统和键值系统)的性能。
实验
实验环境:在一台服务器和两台客户端组成的集群上进行实验。该服务器具有56核Intel Xeon Gold 6330 CPU、96GB DRAM、400GB Intel Optane 5800X SSD。SSD具有1.25/1.16 Mops/s的4KB随机读/写和4.21/0.69 Mops/s的512B随机读写。每台客户端机器都有一个36核Intel Xeon Gold 5220 CPU、64GB DRAM。每个机器上都有一个ConnectX-5 RNIC,并通过100Gbps IB RDMA交换机进行连接。
数据集:微基准测试、YCSB
实验对比:吞吐量、延迟、带宽
实验参数:读大小、写大小、动态工作负载随时间变化、倾斜程度、写比例、客户端线程数、RDMA比例
总结
优化用SSD扩展RDMA连接的内存,现有方法在处理页面故障时效率低。本文提出了TeRM,主要思想是消除关键路径中的RNIC和CPU页面故障。(1)消除RNIC页面故障。对于SSD驻留页面,使RNIC页表指向包含预定义模式的保留物理页面。对于读取请求,客户端首先通过RDMA read获取数据,并识别页面是否在SSD上。然后,客户端使用RPC从服务器检索SSD驻留页面,但不需要对内存驻留页面进行任何额外操作,从而在常见情况下确保快速远程访问。(2)消除CPU页面故障,提出了分层IO。通过文件IO接口而不是内存load/store接口访问SSD扩展的虚拟内存。当数据缓存在物理内存中时,通过缓冲IO读/写SSD扩展的虚拟内存,否则通过直接IO绕过页面缓存。(3)由于直接I/O导致服务器上的数据放置不变,难以适应热点。设计了一种动态热点提升机制,依赖于客户端和服务器的协作。