Memory Sharing with CXL: Hardware and Software Design Approaches
START Basic
# Memory Sharing with CXL: Hardware and Software Design Approaches TL;DR:介绍基于CXL的内存共享机制的软硬件设计1 Introduction
AMD出品
这篇文章的intro介绍了从cxl1.1到3.0的特性,尤其是内存拓展共享内存方面,
CXL2.0不支持硬件共享,CXL3.0支持硬件共享,但是必须通过软件解决方案来实现较高的性能。出于性能考虑,对于较大的共享地址空间,很大一部分内存区域需要软件支持才能有效实现内存共享。
本文主要提出一些software-only和软硬件协同的共享方案
2 Software-Enabled Memory Sharing
共享内存使用Inter-Processor Communication (IPC)
linux提供了一些方法创建映射共享内存
- System V shared memory API(shmget shmat shift shmctl)
- POSIX shared memory API(shm_open mmap)
这些机制是单host多进程的,不适用CXL多HOST场景
In a software-managed shared memory management solution, memory sharing across multiple hosts can be done either through a custom framework (custom applications/drivers) or an extension of sophisticated libraries like OpenSHMEM
(正是我所要做的)
- OS层提供CXL驱动
- verb层向上提供高级共享语义比如同步、锁,向下实现底层API
- upper layer提供runtine、包括上下文初始化、切换、分配内存等。
它为每个应用程序创建上下文,提供多个进程之间的概念分离,并支持隔离通信资源以避免任何干扰。在一个上下文中,可以有多个工作人员负责共享内存访问请求生成、消息队列、资源监控、内存地址空间管理等。工作人员可以在本地和远程之间进行通信,以跟踪进程的进度。任何共享内存操作。在上下文初始化时,定义了不同主机之间的共享内存区域,并且工作人员维护全局/本地内存堆。
OpenSHMEM-based Implementation 基于OpenSHMEM的实现,介绍OpenSHMEM,在此基础上构建CXL共享内存框架是很合理的
3 Hardware-Enabled Memory Sharing
每个 CXL 端口都有自己的一组原子寄存器,在 CXL.io 上的 MMIO 空间中实现。访问控制逻辑层提供额外的硬件逻辑,负责授予锁、信号量和其他访问控制功能。
硬件设计还为每个控制器提供地址重新映射支持,以将主机物理地址映射到设备 HDM 地址。相同的地址重映射方案适用于硬件原子的共享内存区域中的地址。在这种硬件辅助共享内存实现中,驱动程序负责地址管理并提供对硬件逻辑的抽象。图 5b 显示了共享内存操作期间应用程序、设备驱动程序和 FPGA 之间的控制流。当应用程序出现在系统中时,共享内存驱动程序会注册它并公开对硬件功能接口的访问。然后,它授予对可共享给应用程序的内存区域的访问权限,并存储所有元数据,包括虚拟到物理地址转换、访问粒度、权限类型等。
当应用程序出现在系统中时,共享内存驱动程序会注册它并公开对硬件功能接口的访问。然后,它授予对可共享给应用程序的内存区域的访问权限,并存储所有元数据,包括虚拟到物理地址转换、访问粒度、权限类型等。当用户空间应用程序请求写访问权限时,驱动程序会发送发送给硬件以启动硬件原子的消息。一旦获取了访问权限并设置了相应的标志,驱动程序就会返回到应用程序。所有写访问请求都根据到达顺序进行排序和服务。写访问释放机制遵循类似的例程 - 发出硬件原子并重置标志,通知应用程序,并且可以执行下一个写访问请求。
4 Discussion
共享内存的优势
- 减少不必要的数据拷贝
- 提高利用率
开销
- 地址空间管理开销
- 缓存一致性
支持 CXL 的多头共享内存系统将非常适合具有高读取和低写入需求的应用程序。
安全性问题
Back: you have read it ! Tags: cxl END