如何使用NIC内置的内存资源?
NIC板载内存的使用方法
以下使用方式参考ASPLOS'22论文 The benefits of general-purpose on-NIC memory 的验证结论,覆盖目前通用智能网卡板载内存的主流用法:
- 网卡侧卸载逻辑的本地高速暂存
传统场景下NIC板载内存仅给固件独占,用来存流表、DMA描述符这类网卡基础运行数据。开放通用访问权限后,跑在NIC上的卸载逻辑(包括offload到网卡的eBPF程序、DPU侧运行的网络/存储服务、自定义固件逻辑)可以直接申请这部分内存地址,用来存网络包处理过程中的临时数据、加解密上下文、协议卸载状态,全程不需要走PCIe总线和主机内存交互,相比把数据传到主机内存处理的模式,网络端到端延迟可以降低30%以上,PCIe带宽占用减少近50%。 - 主机侧的近内存扩展
支持通用内存访问的NIC一般会在驱动层暴露mmap接口,可以把板载内存映射为主机侧可直接寻址的独立内存域,用来存访问频率极高、对延迟敏感的小体量热点数据,比如RPC连接上下文、分布式存储的热元数据、KV服务的热键缓存。这部分内存的访问延迟略高于主机本地内存,但远低于跨NUMA远端访存、SSD访问的延迟,同时不会占用主机本地的内存带宽。 - 分布式场景的节点侧高速缓存
依托NIC直连网络的特性,可以把板载内存作为机群内分布式共享数据的前端缓存:跨节点访问数据时,NIC直接完成缓存命中判断和数据转发,不需要把数据先拷贝到主机内存再做处理,相比传统部署在主机内存的分布式缓存,访问延迟可以降低40%左右。
注意:不是所有NIC的板载内存都支持通用访问,部分入门级网卡、传统非智能网卡的板载内存仅对固件开放,没有上层调用接口;支持该特性的智能网卡/DPU一般会在配套的DPDK、SPDK开发套件或者官方驱动里提供内存申请、映射、读写的封装API,直接调用对应接口即可使用,不需要改动硬件逻辑。
内容的提问来源于stack exchange,提问作者lizebin
相关产品推荐
相关产品推荐

