Remote Region,读《Remote regions: a simple abstraction for remote memory》


本文的关键思想:进程可以将其内存的一部分以文件的方式export,称为 Remote Region,并且可以通过通常的文件系统操作对其进行访问。

1 Introduction

Remote Region 允许本机进程读取和写入不同主机中另一个进程的内存。由于Infiniband或者Ethernet的RDMA和其他新技术,Remote Region正在变得可行。
但现在面临两个问题:首先,它没有标准接口。其次,现有Remote Region的技术很难使用。
在本文中,我们提出了一个简单的想法:使用文件作为remote region的接口,降低RDMA的复杂性并为新技术提供标准。本文提出了remote regions或简称regions。对于regions,进程将其内存的一部分导出为REGIONFS中的文件,其中REGIONFS是一个远程主机可以使用通常的文件操作(读取,写入,内存映射等)访问的文件系统。如下图。
在这里插入图片描述
Regions之所以简单,是因为它们用熟悉的接口操作取代了RDMA的低级机制。

2 Related work

  • 相同的接口,不同的目标。 文件接口通常用于远程存储,其主要目标是提供持久的存储(Octopus,Crail,Ceph等)。我们的目标是访问远程应用程序的内存。
  • 不同的接口,相同的目标。 以前的工作为remote memory提供了不同的接口(LITE,FaRM)。所有这些系统提供了比RDMA更简单的接口,但它们不支持众所周知的文件接口,文件具有许多优点。
  • 不同的接口,不同的目标。 许多系统为远程存储提供除文件之外的接口,包括键值存储,Linda元组,分布式对象和数据库系统。这些系统提供了与regions不同的抽象。
    有几项工作建议用remote memory替换磁盘以实现更快swapping或paging的目标。
    分解的内存提出了一种新的系统架构,它将内存与机器分离并将其置于通用结构上。

3 Assumptions, goals, and motivation

我们假设机器连接在具有低延迟,高带宽和可靠连接的网络上。
我们的目标是为应用程序提供抽象,以访问网络中其他应用程序的内存。Rdma Verbs有三个我们想要克服的问题:复杂性,对现有技术的依赖性,资源限制。
我们希望更简单的界面,具有性能成本,并且希望它们合理。

4 Why files?

通用;实用;语言支持;插件支持;命名空间;用户读取权限。
我们可以轻松地获得这些好处,因为文件接口与我们的问题很匹配。相比之下,remote memory的其他接口,例如RDMA,没有提供这些好处。

5 The regions abstraction

在最简单的形式中,(远程)region是进程内存中逻辑连续的部分,称为所有者进程。所有者创建一个像文件一样的region,并且可以通过内存映射,读取,写入或使用特殊的rmalloc函数分配变量来操作它。这些操作指的是本地内存中的数据。其他主机中的进程也可以执行这些操作,以访问所有者的内存中的数据。

5.1 Basic functions

Regions提供一个安装在已知位置的称为REGIONFS的文件系统,例如/regions。REGIONFS中的每个文件都是本地或远程存储在内存中的区域。除了mmap之外,REGIONFS还支持通常的文件操作(例如,creat,unlink,open,close,read,write,chmod,stat)。

5.2 Memory allocation

应用程序可以使用以下函数在regions内动态分配/释放buffer,而不是为每个buffer创建/删除一个region:`

void * rmalloc(int regionfd,size t len);
int rfree(void * ptr);

其中regionfd对应于以写入模式打开的region的描述符。调用rmalloc比创建regions更快:前者完全在内存中执行,而后者需要通过网络联系metadata manager。

5.3 Example of usage (Map-Reduce)

在这里插入图片描述
在现有的map-reduce系统中,进程使用分布式文件系统(如Hadoop分布式文件系统(HDFS))交换数据。对于regions,进程可以直接在内存中交换数据,与RDMA一样,但使用文件的简单性。
这与使用基于RDMA的文件系统不同,基于RDMA的文件系统是进程将数据存储在存储服务器中并在使用数据时访问服务器;对于RDMA regions,进程可以直接在其内存中导出数据并从其他进程的内存中读取数据。

5.4 Region attributes

在这里插入图片描述

5.5 Persistent regions

有时进程可能希望将数据在内存中保留一段时间,直到被另一个进程占用,而不是随着进程的终止而释放。
这就需要终止时,进程释放内存,但不释放region。我们称这些regions为持久形regions。持久区域应该稍后由消费进程删除。当主机重新启动时,它们也会被删除。

5.6 Multi-hosted regions

多主机region是跨多个主机存储的一种特殊类型的region。
将通过属性hostalloc指定分配region的主机。

5.7 Memory mapping

进程可以使用mmap()内存映射一个region,这样内存操作就可以访问该region,而不仅是read()和write()。

5.8 Performance enhancing functions

远程主机上region的内存映射是通过page fault实现的。因为page fault开销很大,我们提供了两种方法来防止它们:prefetch和mark-dirty。通过prefetch,应用程序请求系统通过调用

int rprefetch(void *addr, size t len, bool sync) /* ret: error flag */

以len的长度从addr开始预取一个区域中的数据;如果设置了sync,它将一直等到它提取到数据。
而为了避免由于写入而导致的page fault,应用程序可以在写入page之前调用

int rmarkdirty(void*addr,size t len,bool zero)/*ret:err标志*/

。如果参数零为真,则此函数在不读取页面内容的情况下将页面归零。

5.9 Synchronization

我们提供了几个分布式同步原语:barriers、mutexes和door bells。
barriers有一个参数n,调用方阻塞直到barriers被调用至少n次。这有助于同步一组进程。
mutexes确保最多一个调用者同时获得互斥体。
door bells的初始值为0;循环函数使其递增;wait函数等待其自上次调用以来递增,并返回当前值。
在这里插入图片描述

5.10 Caching

当进程使用不同主机的region时,系统会在本地维护最近读取或已修改的数据的页面缓存。
系统不提供缓存一致性,因为它太代价太大了; 相反,应用程序可以通过明确使用两种机制(刷新和清除缓存)获得一致性。

int msync(void *addr, size t len, int flags) /* returns error flag */
int rclearcache(void *addr, size t len) /* return error flag */

刷新[msync]会导致脏页被写回该region,因此所有者可以观察到修改后的数据。 清除页面[rclearcache]将它们从缓存中删除,以便调用进程随后从所有者获取新数据。

5.11 Sharing data

为了正确地共享数据,进程必须仔细地刷新和清除其缓存。这里不做详细介绍。

5.12 Pseudo file system

Region的元数据多于文件。我们将此元数据公开给伪文件系统/proc/regions中的用户,用户只能通过根目录访问。
在这里插入图片描述

5.13 Limitations

Regions有一个限制:进程不能使用它们导出其栈或静态变量中的数据,因为进程必须使用rmalloc在区域中分配数据。

6 Realizing regions using RDMA

6.1 Basic architecture

在这里插入图片描述
有四个主要的逻辑组件:REGIONFS文件系统、user library、daemon和manager

  • REGIONFS文件系统组件实现文件系统所需的vfs内核操作。
  • User library实现同步和performance enhancing功能。
  • Daemon(每个主机一个)分配和维护用于分配regions的内存池,并与本地和远程进程共享这些pools。
  • Manager提供控制平面,处理除读写数据之外的每个文件系统操作。

6.2 RegionFS file system component

该组件是一个内核模块,实现了region文件系统,具有驱动文件系统操作执行的功能,与manager和其他主机的daemon协调。

6.3 User library component

User library提供同步函数、rmalloc的分配器和ioctl stubs

  • 同步函数向管理器发出一个RPC,它实现了实际的功能。
  • 对于rmalloc分配器,我们内存映射region(如果尚未映射),并使用buddy 分配器组织空间。
  • ioctl stub提供region特定的功能,而不需要相应的vfs操作。

6.4 The daemon

The daemon有三个用途。首先,daemon分配物理内存池,然后在这些pool中分配regions。第二,daemon允许主机向多主机regions提供内存,即使主机没有运行的应用程序。第三,当进程终止时,daemon通过保存区域的数据来支持持久形regions。

6.5 Manager

Manager处理所有控制操作:regions的创建、打开、关闭、删除和内存映射;文件系统元数据操作(创建和删除目录,设置和获取inode属性);提供给regions的内存分配;全局虚拟地址分配。

6.6 VFS operations

open / create / read / write a region

6.7 Pools

Pools是一块物理内存,位于主机之一,用于存储一个region或region的一部分。
Daemon使用memfd_create创建一个pool;然后,应用程序进程可以将pool内存映射到与进程需要的region对应的地址。
为了与远程主机共享pools,Daemon RDMA注册每个池,以便可以在RDMA上读取和写入pool。RDMA通过主机导出的每个缓冲区的key提供访问控制。

6.8 Finding region data

Region映射通过将区域中的偏移映射到主机、主机中的pool以及pool中的偏移来跟踪存储region的位置。映射有条目,每个条目表示一个主机一个pool一个固定长度的连续内存块。此映射由manager保存,并由 user library缓存。

6.9 Managing memory

  • Local allocation. 我们在每台主机本地进行这一决定,daemon 在其中根据需要分配和释放pool。
  • Cluster allocation. Manager知道所有参与的主机、它们的pools以及每个pool中的可用空间。Manager会收到创建新region的请求,并有一个初始空间来为未来的区域增长预先分配。

6.10 Allocation virtual addresser

Region被分配一个固定且唯一的虚拟地址。两个保证:不同的regions会被分配不相交的虚拟地址(A);应用程序不会将regions的虚拟地址用于其他目的(B)。

  • A Region的创建通过manager进行,manager知道regions使用的所有虚拟地址。
  • B 我们使用负责加载二进制文件的动态链接器为region保留一系列虚拟地址。

6.11 Security

我们使用文件系统来执行访问控制,这假定内核是可信的。提供更强的安全性是未来的工作。

6.12 Other modules

  • rpc comm modules:rpc manager上的处理程序模块处理来自客户端的请求。
  • RDMA comm modules:daemon的RDMA处理程序向RDMA注册池pool,向manager RDMA报告密钥和pool地址,以便客户端以后可以访问池,并接受来自远程daemon的可靠连接。

6.13 User-level file interface

以前版本的REGIONFS 实现为用户级文件系统和用户级page fault处理程序。我们发现数据操作更快,因为它们可以使用RDMA的用户级接口。但是,页面错误处理速度较慢。

7 Implementation

我们当前的实现与设计在一些重要方面有所不同:(1)我们不复制manager;(2)在每个daemon中,我们有固定数量的pool,因此用于region的内存数是固定的;(3)我们的vfs文件系统只实现运行应用程序和benchmark所需的功能。

8 Evalution

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9 Conclusion

在本文中,我们将Unix的“一切都是文件”的概念应用到远程内存中,获得一个抽象,在这个抽象中,进程将其内存的一部分导出为远程进程可以访问的文件。我们研究了这个抽象背后的设计,描述了一个实现合理性能的原型,并表明应用程序很容易从中受益。

参考资料

Remote regions:a simple abstraction for remote memory

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值