A Quantitative Analysis and Guidelines of Data Streaming Accelerator in Modern Intel® Xeon® Scalable Processors
START Basic
TL;DR:量化分析DSA的性能 ## 1. Introduction 为了从 CPU 卸载此类内存操作,英特尔于 2006 年向服务器级 Xeon® 5100 系列处理器引入了 I/O 加速技术 (I/OAT) [10]。 I/OAT 由芯片组中的 DMA 引擎组成,其识别、编程和操作方式与 PCIe 连接设备中的 DMA 引擎相同。 I/OAT 的几代改进演变成 Crystal Beach DMA (CBDMA) 引擎,具有更高的吞吐量和数据协调性。尽管得到了一些软件堆栈的支持,但由于编程接口有限和卸载成本较高,事实证明应用程序堆栈的更广泛采用更加困难。为了满足卸载更加多样化、简单但重复的内存密集型操作的日益增长的需求,英特尔最近在基于 Sapphire Rapids 架构的英特尔® 第四代至强® 可扩展处理器中引入了数据流加速器 (DSA) [19]。与前几代 DMA 引擎相比,DSA 在各个方面都得到了显着改进,包括显着降低的卸载开销、在吞吐量和能耗方面更高的效率、支持操作的多样性以及一系列使其更受欢迎的独特功能。加速内存相关操作和转换的有吸引力的解决方案。
在本文中,我们首先使用一组微基准从各个方面研究和量化 DSA 的好处。我们还展示了通过采用 DSA 获得性能改进的实际应用程序。
2. Background and Motivation
内存敏感性例程
- memcpy
- memset
- memcmp
- CRC
3. Intel Data Streaming Accelerator
DSA 是集成在英特尔最新 Sapphire Rapids Xeon CPU 中的高性能数据复制和转换加速器,作为 CBDMA 的后继者 [19]。
DSA 配备了硬件组件,可以有效地处理一个或多个用户提交的工作描述符(第 3.2 节)。通过共享虚拟内存 (SVM) 的支持,用户应用程序可以通过内存映射 I/O (MMIO) 寄存器将这些工作描述符直接提交给 DSA。用户还可以根据自己的需要直接配置底层计算资源,这是通过一组专用驱动程序提供的用户界面实现的(第 3.3 节)。此外,DSA 通过新支持的操作提供了更好的功能,因此预计更多的用户/内核进程可以利用 DSA 提供的功能。 DSA 中还引入了一些优化功能,旨在充分利用加速器的可用资源(第 3.4 节)。
文章的3.2. Hardware Architecture描述了硬件细节
3.3. Software Architecture and Interface
Intel Data Accelerator Driver (IDXD)
应用可以利用用户空间的libaccel-configAPI来控制
airness control. The basic operational unit of DSA is a group
- virtualization and multi-application support
- Batch descriptor processing
- QoS control.
4. DSA Performance Analysis
对于基准测试,我们使用一组用户空间微基准测试 dsa-perf-micros [50],来测量 DSA 在不同组配置、作业描述和同步模式下的性能。异步使用时,除非另有说明,否则 DSA 的队列深度为 32。
对于运行在CPU核心上的软件基线,我们选择高度优化的软件库(例如glibc的memcpy和用于CRC32计算的ISA-L
我们利用 Linux Perf 工具 [31] 收集有关周期的信息和英特尔的 pqos 库 API [15] 来观察各个内核的 LLC 占用情况,并将评估的内核隔离到特定的 LLC 方式,以尽量减少对其他后台任务的干扰系统。
通过实验,我们发现在不同的传输大小下,DSA 的吞吐量平均比英特尔第三代至强可扩展处理器 (ICX) 中的 CBDMA 高 2.1 倍。
跟软件基线相比,数据大小对吞吐的影响
异步比同步性能好,传输size越大,性能越好
比cpu能达到五倍多的开销,带宽很高呀
可以看出对于同步卸载当BS(batch size)越大时,性能越好
对于异步来说,工作队列大小越大,性能越好
研究延迟分解
跨socket影响
由于内存请求是通过英特尔的超级路径互连 (UPI) 由其他套接字发送和接收的,因此相应的开销会增加远程内存延迟。通过流水线执行和足够的缓冲,DSA 通常能够有效隐藏访问远程套接字内存的额外延迟。因此,DSA 能够实现与本地访问类似的远程内存访问的全部性能
CXL影响
我们使用配备 16 GB DDR4 DRAM 的 Intel® Agilex-I 开发套件 [23] 作为 CXL 存储设备。 CXL 内存作为没有 CPU 核心的 NUMA 节点暴露给 CPU/OS,其使用方式与常规 NUMA 内存管理相同。
大页的影响:大页可以提高缓存数据的能力,因为 TLB 可以为每个页表条目缓存更大的内存区域。这种改进是以更长的内存分配为代价的,并且当数据没有空间定位时,当发生页面错误时,就会变成很大的开销。图 8 的结果显示吞吐量几乎不受所用页面大小的影响。
多个DSA实例的影响】
可以看到超过 64 KB,最大吞吐量开始下降至 70 GB/s,这是因为在这种情况下,数据写入占用空间超过了 LLC 的 DDIO 部分(即泄漏 DMA 问题 [57, 64]),因此,这种情况下的吞吐量受到系统内存带宽的限制。在需要更高吞吐量和大传输大小的用例中,应该为 DDIO [64] 分配更多 LLC 路(另请参见第 6.2 节)。
缓存污染
将任务卸载到 DSA 的主要好处之一是防止 LLC 空间被低局部性的流数据污染。这使得其他位于同一位置、对延迟敏感的应用程序能够满足其所需的时序。
使用 DSA,读取不会分配到缓存中,并且写入仅限于 LLC [64] 的 DDIO 部分,从而显着最小化缓存污染影响。
5. DSA Software Enablement and Ecosystem
三个示例
SPDK NVMe/TCP Target、基于 CacheLib 的云数据缓存服务以及 HPC/ML 中的 libfabric
网络加速:通过 DSA 更大的吞吐量和更多支持的操作来协助网络,I/OAT 为网络加速带来的好处得到了放大。虚拟化网络堆栈(例如 virtIO)中卸载数据包复制就是一个示例(详细案例研究请参见第 6.4 节)。
存储加速:DSA 的特性也非常适合需要移动和检查大量数据的存储堆栈。与用于 DSA 支持的 SPDK 软件堆栈(附录)一起,io_uring [61] 和分布式异步对象存储 (DAOS) [30] 等技术通过使用新的存储接口/语义消除常见的基于块的 I/O 瓶颈,从而提供高性能。使用 DAOS 的 HPC 工作负载有可能利用 DSA 的内存移动器功能来提高内存吞吐量,减少简单数据任务的核心压力,并在后台合并小型 I/O 请求 [21]。
数据中心减税:正如谷歌和其他云巨头所指出的[42],云数据中心中的大量CPU周期并没有花费在它所承载的应用程序上,相反,云基础设施本身占用了这些周期。此类数据中心税包括但不限于设备和内存管理、虚拟化、RPC 堆栈等。DSA 丰富的功能能够通过卸载内存压缩、VM/容器启动和迁移等更关键的例程来减少数据中心税场景。
数据中心的 HPC/ML 加速:除了系统基础设施用例之外,DSA 还可以应用于广泛的应用。机器学习 (ML) 处理框架就是一个例子。一方面,作为一个迭代过程,机器学习处理需要清除某些内存区域(例如梯度向量)才能进行下一次迭代;另一方面,在分布式机器学习场景中,需要通过 MPI 和 libfabric [36](附录)等通信库在集群中的节点之间复制和传输大量张量和向量。随着机器学习模型大小逐年快速增加,此类操作可能会给 CPU 带来巨大负担。在 DSA 的帮助下,此类内存归零和内存复制例程已被卸载,并且可以节省 CPU 周期来执行更关键的任务。请注意,在某些可以利用 DSA 的 HPC 工作负载中也会出现类似的问题
具有分层 CXL 的分解内存系统的数据移动卸载:基于 CXL 的内存扩展已成为业界事实上的内存扩展和分解解决方案。与常规的基于 DRAM 的主存储器相比,基于 CXL 的存储器具有更高的灵活性和更高的存储器容量,因此可能具有更长的访问延迟。这使得 LD/ST 语义对于核心在不同存储介质之间移动数据块的效率低下,这在分层存储系统中很常见。通过将此类内存移动和操作操作卸载到 DSA,我们可以享受 CXL 内存的优势,同时不会因加载-存储队列饱和而损害内核的性能
为了提高 DSA 的易用性,我们针对不同级别的 DSA 使用开发了英特尔数据移动器库 (DML) [24] 和 DSA 透明卸载库 (DTO)
DML 提供了一组用于数据移动和转换的高级 C/C++ API,在可用时调用底层 DSA 单元。 DML 支持高级功能(所有 DSA 硬件操作、异步卸载、负载平衡等),应用程序可以显式调用 DML API 以充分利用 DSA 卸载操作。 DTO 是一个侵入性较小的库,允许应用程序透明地利用 DSA,而无需修改源代码。对于希望使用 DTO 库的应用程序,用户可以使用链接器选项 -ldto 和 -laccel-config 动态链接库,或者通过 LD_PRELOAD 预加载库,而无需重新编译其应用程序。当使用常见的系统 API 调用(如 memmove()、memcpy()、memset() 或 memcmp())时,DTO 会拦截它们并将其替换为相应的同步 DSA 操作。
同时,PCM 库还提供了 DSA 性能遥测功能[27]。通过读取硬件性能计数器,PCM 能够观察每个 DSA 实例上的入站/出站流量和请求计数
6. Make the Most out of DSA
- Keep a balanced batch size and transfer size
- Use DSA asynchronously when possible
- Control the data destination wisely
- 与始终定向到 LLC 的完成记录不同,写入描述符目标地址的数据可以定向到 LLC 或主存储器。 DSA 通过允许用户提供注明首选目的地的提示(即设置工作描述符的缓存控制标志)来促进此缓存控制功能。如果该标志设置为 0,则数据将写入内存,同时使 LLC 中相应的高速缓存行(如果有)无效。如果该标志设置为1,则通过分配相应的缓存线将数据直接写入LLC。
- DSA as a good candidate of moving data across a heterogeneous memory system.
- Leverage PE-level parallelism
- Optimize WQ configuration
8.Conclusion
新的 DSA 通过改进的性能和灵活性为更大的卸载潜力开辟了新的机会。与之前的工作相比,额外的用户端可配置选项以及批量卸载任务的能力显着提高了吞吐量,并为用户提供了在流数据上使用加速器的新方法。在本文中,我们还注意到 DSA 支持的其他功能以及加速器的固有优势,例如减轻主机处理器上共同运行的应用程序造成的缓存污染。通过快速发展的软件生态系统和广泛的适用工作负载,我们希望本文能够推动 DSA 在基础设施库和应用程序中的采用。
Back: you have read it ! Tags: END