原文作者:AMD 服务器系统性能总监兼 CXL 联盟营销工作组主席 Kurtis Bowman
CXL作为一种高速互连技术,可实现处理器、内存设备和加速器之间的高效通信。CXL不仅支持共享内存,还能实现内存池化,以适应不同需求。本文将探讨内存池化与共享的重要性,以及CXL如何提供解决方案。
共享内存是一种所有处理器都可以访问的内存类型。多个处理器可以自由地读取和写入共享内存,实现处理器间的数据共享和通信。池化内存是一种特别的处理器间共享的内存形式,其由特定的内存控制器进行有效管理。内存控制器可以根据需要动态分配和释放内存,从而更加高效地利用内存资源。
CXL连接的内存集合如何被分割为池化给个别处理单元使用的部分,以及被两个或更多单元共享的部分。
基于CXL技术使用共享内存的原因包括以下几点:
-
实现处理器之间的高效通信:共享内存通过允许多个处理器访问同一块内存,实现了系统或数据中心内处理器之间的高效通信。因此,数据可以在它们之间轻松传递,而无需复杂的数据传输机制。
-
可以简化编程模型:共享内存简化了拥有多个处理器的服务器(包括CPU、GPU、DPU等)的编程模型。开发人员无需管理多个处理单元之间复杂的数据传输机制,只需像访问本地内存资源一样来访问共享内存资源。
-
低延迟:与其它通信机制(例如通过网络进行的处理器间通信)相比,这种共享内存的实现具有非常低的延迟。适用于需要快速数据访问和处理的高性能计算应用。
-
低功耗:共享内存还有助于降低数据中心的能耗。数据可以存储在共享内存中,并根据需要由每个处理器访问,而不是在处理器之间不断传输数据。这减少了系统消耗的能量量。
另外,在CXL上构建内存池还有如下的几点原因:
-
高效的内存分配:池化内存允许在多个处理器之间高效地分配内存资源。内存控制器可以根据需要动态地分配和释放内存,确保内存资源得到高效利用。对于已添加CXL内存卡的单个服务器,一个处理器可以使用CXL内存,并在完成后将其释放给操作系统,从而允许将其重新分配给CPU上的另一个进程。未来CXL内存可能会存在于CXL总线上的专用内存盒中,计算节点可根据需要从该池中请求和释放内存。
-
可靠的内存访问:池化内存通过向每个处理器分配其可访问的特定内存池,为其提供有保证的内存访问,确保随时提供执行任务所需的内存资源。在这种情况下,处理器将始终拥有一定量的本地连接内存,以确保其拥有启动操作系统和运行应用程序所需的最低必要内存量。然后,CXL 内存将被分配给服务器,使其从更大的内存容量或带宽中获益。当内存容量带来更多好处时,CXL 内存将以 64GB 或更大容量的形式添加到系统中。对于更多的内存带宽,管理员将使用更多的 CXL 链路和每个链路更少的内存,以最大限度地增加总内存带宽。
-
内存隔离:池化内存在处理器之间提供内存隔离。每个处理器都有自己独立于其它处理器的池化内存资源。这样可以防止内存访问冲突,同时确保每个处理器可以在不受其它处理器干扰的情况下执行任务。
-
安全性:池化内存还有助于提高系统安全性。通过隔离每个处理器的内存池,恶意代码更难以访问和操纵其它内存池中的数据。
总之,CXL 上的池化内存在多处理器系统的内存分配效率、保证访问、隔离和安全方面具有显著优势。对于需要大量内存资源或需要确保访问得到有效管理的应用程序来说,它尤其有用。
总结
在 CXL 上使用池式内存还是共享内存更好,取决于具体使用情况和个别系统的要求。
如果应用程序需要在处理器之间频繁共享数据和通信,共享内存就是理想选择,例如,数据管理系统将频繁访问的数据存储在内存缓存中,以加快数据库操作速度。共享内存提供了一个低延迟的简单编程模型,适合需要快速数据访问和处理的高性能计算应用,同时避免了进程间通信的开销,从而提高了性能。与其他通信机制(如通过网络进行的处理器间通信)相比,共享内存也更省电。
池化内存更适合需要在多个处理器之间高效分配和利用内存的应用,例如,在内存数据库中,内存容量可以动态增加的特性将使其增益明显。池化内存可保证处理器之间的内存访问和隔离,确保每个处理器都拥有高效执行任务所需的资源。隔离的内存池还意味着系统更加安全。
不过,在一些情况下,可能需要结合使用共享内存和池化内存,才能为特定应用或工作负载实现最佳性能。