传统TCP/IP技术处理数据包需通过操作系统和其他软件层,导致数据在系统内存、处理器缓存和网络控制器缓存间频繁复制,增加了服务器CPU和内存的负担,特别是在网络带宽、处理器速度与内存带宽不匹配时,网络延迟会进一步加剧。RDMA技术通过将数据处理从CPU旁路并卸载到硬件上来实现低时延和高带宽特性。
导语 | 本文介绍了部分高性能网络方案,包括RDMA、HARP、io_uring等。从技术原理、落地可行性等方面,简要地做出分析,希望能对此方面感兴趣的开发者提供一些经验和帮助。 一、背景 业务中经常会有这样的场景: 随着网卡速率的提升(10G/25G/100G),以及部分业务对低延迟的极致追求(1ms/50us),目前的内核协议栈由于协议复杂、流程复杂、设计陈旧等因素,已经逐渐成为业务瓶颈。 业界已经有部分RDMA、DPDK的实践,但是对于大多数开发者而言,依然比较陌生。 那么这些方案各自的场景究竟怎样?
HMM: 异构内存管理(Heterogeneous Memory Management)
IB(InfiniBand)和 RDMA(Remote Direct Memory Access)是一种高性能网络技术,通常用于加速数据传输。它们不是基于传统的 TCP/IP 协议栈,而是使用自己的协议栈,以实现低延迟、高带宽的数据传输。
当今的数据中心由数千台网络连接的主机组成,每台主机都配有 CPU 和 GPU 和 FPGA 等加速器。 这些主机还包含以 100Gb/s 或更高速度运行的网络接口卡 (NIC),用于相互通信。 我们提出了 RecoNIC,这是一种基于 FPGA、支持 RDMA 的 SmartNIC 平台,旨在通过使网络数据尽可能接近计算来加速计算,同时最大限度地减少与数据副本(在以 CPU 为中心的加速器系统中)相关的开销。 由于 RDMA 是用于改善数据中心工作负载通信的事实上的传输层协议,因此 RecoNIC 包含一个用于高吞吐量和低延迟数据传输的 RDMA 卸载引擎。 开发人员可以在 RecoNIC 的可编程计算模块中灵活地使用 RTL、HLS 或 Vitis Networking P4 来设计加速器。 这些计算块可以通过 RDMA 卸载引擎访问主机内存以及远程对等点中的内存。 此外,RDMA 卸载引擎由主机和计算块共享,这使得 RecoNIC 成为一个非常灵活的平台。 最后,我们为研究社区开源了 RecoNIC,以便能够对基于 RDMA 的应用程序和用例进行实验
qperf跟ibping类似需要,但是qperf在测试时,建议关闭防火墙systemctl stop firewalld
随着互联网, 人工智能等兴起, 跨机通信对带宽和时延都提出了更高的要求, RDMA技术也不断迭代演进, 如: RoCE(RDMA融合以太网)协议, 从RoCEv1 -> RoCEv2, 以及IB协议, Mellanox的RDMA网卡cx4, cx5, cx6/cx6DX, cx7等, 本文主要基于CX5和CX6DX对RoCE技术进行简介, 一文入门RDMA和RoCE有损及无损关键技术
题图摄于北京金融街 相关信息: 招聘云原生工程师 使用Bitfusion在K8s上共享GPU资源 本文作者:尹皓正 - VMware中国研发中心云原生实验室开发工程师 背景介绍: PVRDMA (Paravirtual RDMA):VMware 对于 RDMA 技术的半虚拟化实现,vSphere 会在虚机中提供 PVRDMA 虚拟网卡,再通过 VMkernel 中的 PVRDMA 堆栈来访问 HCA(Host Channel Adapter,主机通道适配器),这种方式可以让多个虚机共享 HCA 设备
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
HowTo Install MLNX_OFED Driver 如何安装MLNX_OFED驱动
前言:今日,笔者受邀参加“Dell&RedHat HPC研讨会”。会上,分享了红帽在HPC领域的解决方案。由于很多朋友关心这个话题,因此将演讲的内容分享出来,供大家参考。PPT在书写过程中,得到了同事
前段时间,sudo被曝不要密码就可进行root提权的漏洞引起一片哗然,众多公司纷纷连夜打补丁来避免损失。FreeBuf也对此进行了相应的报道《不用密码就能获取root权限?sudo被曝新漏洞》。
NVMe over Fabrics (NVMe-oF) 是 NVMe 网络协议对以太网和光纤通道的扩展,可在存储和服务器之间提供更快、更高效的连接,并降低应用程序主机服务器的 CPU 利用率
https://docs.nvidia.com/doca/sdk/erasure-coding-programming-guide/index.html
rdma_rxe 内核模块提供 RoCEv2 协议的软件实现。 RoCEv2 协议是存在于 UDP/IPv4 或 UDP/IPv6 之上的 RDMA 传输协议。 InfiniBand (IB) 基本传输标头 (BTH) 封装在 UDP 数据包中。 创建 RXE 实例后,通过 RXE 进行通信与通过任何 OFED 兼容的 Infiniband HCA 进行通信相同,尽管在某些情况下会涉及寻址问题。 特别是,虽然 GRH 标头的使用在 IB 子网中是可选的,但对于 RoCE 来说是强制性的。 基于 IB 动词编写的动词应用程序应该可以无缝工作,但它们需要在创建地址向量时提供 GRH 信息。 修改库和驱动程序以提供硬件所需的从 GID 到 MAC 地址的映射
摩尔定律被硅芯片物理极限限制->多核技术推动虚拟化大规模应用->数据中心网络大规模虚拟机入网;
Linux API 头文件(在 linux-3.19.tar.xz 里)会将内核 API 导出给 Glibc 使用。
分布式系统利用卸载来减少 CPU 负载变得越来越流行。远程直接内存访问 (RDMA) 卸载尤其变得流行。然而,RDMA 仍然需要 CPU 干预来处理超出简单远程内存访问范围的复杂卸载。因此,卸载潜力是有限的,基于 RDMA 的系统通常必须解决这些限制。 我们提出了 RedN,这是一种原则性的、实用的方法,可以实现复杂的 RDMA 卸载,无需任何硬件修改。使用自修改 RDMA 链,我们将现有的 RDMA 动词接口提升为图灵完备的编程抽象集。我们探索使用商用 RDMA NIC 在卸载复杂性和性能方面的可能性。我们展示了如何将这些 RDMA 链集成到应用程序中,例如 Memcached 键值存储,从而使我们能够卸载复杂的任务,例如键查找。与使用单侧 RDMA 原语(例如 FaRM-KV)的最先进的 KV 设计以及传统的 RPC-over-RDMA 方法相比,RedN 可以将键值获取操作的延迟减少高达 2.6 倍。此外,与这些基准相比,RedN 提供性能隔离,并且在存在争用的情况下,可以将延迟减少高达 35 倍,同时为应用程序提供针对操作系统和进程崩溃的故障恢复能力。
https://blog.csdn.net/weixin_33725722/article/details/89131555
描述:Stress/Stress-NG是Linux下两个常用的系统级压力测试工具,stress命令简单易用stress-ng是stress的升级版,支持数百个参数定制各种压CPU、内存、IO、网络的姿势。在系统过载的场景下,应用服务可能会出现意想不到的错误或异常,在测试负载均衡和熔断降级时非常有用。 这里只列举了几个常用的命令,详细使用参考”stress-ng –help”或”man stress-ng”。另外这些"烤机"命令来测试服务器性能也是不错的。
【infiniband】 MAD、 uMAD、Verbs、RDMACM: https://blog.csdn.net/eidolon_foot/article/details/132840943
超大规模和云构建者并不是唯一对 CXL 协议及其为系统创建分层、分解和可组合的主内存的能力感兴趣的人。HPC中心也在采取行动,本文谈论的是韩国科学技术高级研究所KAIST所做的一项有意思的工作。
RDMA是常用于高性能计算(HPC)领域的高速网络,在存储网络等专用场景也有广泛的用途。RDMA最大的特点是通过软硬件配合,在网络传输数据的时候,完全不需要CPU/内核参与,从而实现高性能的传输网络。最早RDMA要求使用InfiniBand (IB)网络,采用专门的IB网卡和IB交换机。现在RDMA也可以采用以太网交换机,但是还需要专用的IB网卡。虽然也有基于以太网卡用软件实现RDMA的方案,但是这种方案没有性能优势。
Open-E、Western Digital 和 ATTO 数据存储专家和工程师联手推出了基于 HDD 的数据存储设备,该设备结合Western Digital Ultrastar® Data60 JBOD 的海量容量和Ultrastar® 系列 HDD 以及加速的性能,这得益于ATTO HBA SAS 控制器和 100GbE NIC,以及Open-E JovianDSS 的数据缓存和复制功能。 合作带来了在性价比方面完美平衡的解决方案,连接了 HDD 的成本效益,以及支持基于 NVMe 的缓存设备(Ultrastar® DC SN840 1.6 TB NVMe SSD)的出色性能通过最先进的连接硬件和软件功能,例如通过镜像路径连接的RDMA复制写入日志。
过去,数据库一体机通常采用X86服务器和InfiniBand网络的硬件环境。然而,InfiniBand网络的部署和维护成本高昂,需要专门的硬件和管理技能。现在,RoCE网络可以提供与InfiniBand网络相当的性能。因此使用RoCE网络替代InfiniBand网络,可以降低成本、提高组网的灵活性和可扩展性,更容易地进行部署和运维。
该驱动程序通过 Linux 网络堆栈实现 InfiniBand RDMA 传输。 它使具有标准以太网适配器的系统能够与 RoCE 适配器或运行 RXE 驱动程序的另一个系统进行互操作。 有关 InfiniBand 和 RoCE 的文档可以从 www.infinibandta.org 和 www.openfabrics.org 下载。 (另请参见 siw,它是 iWARP 的类似软件驱动程序。)该驱动程序分为两层,一层与 Linux RDMA 堆栈接口,并实现内核或用户空间动词 API。 用户空间动词 API 需要一个名为 librxe 的支持库,该支持库由通用用户空间动词 API libibverbs 加载。 另一层与第 3 层的 Linux 网络堆栈接口。要配置和使用 soft-RoCE 驱动程序,请使用“配置 Soft-RoCE (RXE)”部分下的以下 wiki 页面:https://github.com/linux-rdma/rdma-core/blob/master/Documentation/rxe.md
NSDI 的全称是 Networked Systems Design and Implementation,是 USENIX 旗下的旗舰会议之一,也是计算机网络系统领域久负盛名的顶级会议。与网络领域的另一顶会 SIGCOMM 相比,NSDI 更加侧重于网络系统的设计与实现。
鉴于公共云中广泛采用存算分离架构(Disaggregated Storage),网络是云存储服务实现高性能和高可靠性的关键。在 Azure 云中,我们在存储前端流量(计算 VM 和存储集群之间)和后端流量(存储集群内)之间启用 RDMA(Remote Direct Memory Access)作为我们的传输层。由于计算集群和存储集群可能位于 Azure 云 region 内的不同 dc 中,因此我们需要在 region 范围内支持 RDMA。
官方文档: https://openucx.readthedocs.io/en/master/
个人理解nvme能提高存储性能,就像4G比3G快一样,电磁波还是光速,但协议变了,所以快了。rdma应用跑在用户态能减小存储时延,spdk在用户态实现nvme驱动,天然能和rdma结合,而且两者的队列能一一映射,能达到锦上添花的效果。坏处就是kernel upstream实现的nvme代码无法复用,网卡硬件得支持rdma,rdma的库很多,出了问题估计会有找不得北的感觉。
在《局域网SDN硬核技术内幕》的开篇中,我们提到过,在云资源池中,存在着很多很多的虚拟机。
在数据为王的时代,人们对网络的要求更加严苛。然而传统的TCP / IP以太网连接占用了大量的CPU资源,并且需要额外的数据处理,已无法再满足当前更快、更高效和可扩展性的网络需求。在这种情况下,RoCE(RDMA over Converged Ethernet )走进了人们的视野。
上回说到,虽然虚拟化技术大大提升了计算机硬件资源的利用率,也让业务部署变得更加灵活,但由于虚拟化技术的部分限制,在虚拟机上运行RDMA等ICT关键业务加速特性几乎成了不可能的,或者要付出极大的代价。
DMA 代表直接内存访问。这意味着应用程序可以在 CPU 干预的情况下直接访问(读/写)主机内存。如果您在主机之间执行此操作,它将成为远程直接内存访问 (RDMA)
RDMA (Remote Direct Memory Access) 全称为 远程直接内存访问
使用 GPU 进行网络数据包内联处理是一种数据包分析技术,可用于许多不同的应用领域:信号处理、网络安全、信息收集、输入重建等。
本文使用两台PC,一台做NVMe over Fabrics Target(服务端),一台做NVMe over Fabrics initiator(客户端)。首先使用SoftRoCE来实现底层的rdma传输,然后使用SPDK来实现NVMe over Fabrics Target。
在此之前,Citadel 协议使用后量子安全保护传输中的数据。但现在,Citadel 协议还可以保护静态数据(具有后量子安全性)。
cgroup是Linux内核允许将流程组织为分层的功能,然后可以限制其使用各种类型资源的组并进行监控。内核的cgroup接口通过伪文件系统,称为cgroupfs。分组在核心cgroup内核代码,而资源跟踪和限制是在一组每个资源类型的子系统(内存,CPU,等等)。
beegfs客户端在不同发行版上支持的OFED版本是不同的,像我在ubuntu2004上发现beegfs对我手上的MCX353A-FCBT并不支持,因为MCX353A-FCBT是相对比较旧的网卡,从从MLNX_OFED 5.1开始,就不再继续支持了。要查询发行版本对你的网卡的支持,可以查看下述信息:
DAX: 磁盘(disk)的访问模式有三种 BUFFERED、DIRECT、DAX。前面提到的由于page cache存在可以避免耗时的磁盘通信就是BUFFERED访问模式的集中体现;但是如果我要求用户的write请求要实时存储到磁盘里,不能只在内存中更新,那么此时我便需要DIRECT模式;大家可能听说过flash分为两种nand flash和nor flash,nor flash可以像ram一样直接通过地址线和数据线访问,不需要整块整块的刷,对于这种场景我们采用DAX模式。所以file_operations的read_iter和write_iter回调函数首先就需要根据不同的标志判断采用哪种访问模式, kernel在2020年12月的patch中提出了folio的概念,我们可以把folio简单理解为一段连续内存,一个或多个page的集合
“人工智能前沿讲习班”(AIDL)由中国人工智能学会主办,旨在短时间内集中学习某一领域的基础理论、最新进展和落地方向,并促进产、学、研相关从业人员的相互交流,对于硕士、博士、青年教师、企事业单位相关从业者、预期转行AI领域的爱好者均具有重要的意义。2018年AIDL活动正在筹备,敬请关注获取最新消息。
过去,网络只要升级至 10Gb、40Gb 和 100Gb 以太网,就足以满足存储系统的联网需求了。但现如今,随着超快固态硬盘 (SSD) 和高速非易失性内存 (Non-Volatile Memory Express, NVMe) 的问世,网络存储已经发生了翻天覆地的变化。 什么是 NVMe? 传统的存储系统的基础是硬盘驱动器 (HDD) 旋转介质,这项技术历经 60 余年沉淀发展而成。随着设备尺寸越来越小且速度越来越快,驱动器技术不断演进,固态驱动器 (SSD) 的问世给存储世界注入了新的血液。 突然之间
用户空间直接访问 (UDA) 旨在以通用方式提供用户空间访问队列,但 E810 不支持此功能。 UDA 仅在内核中可用,并且仅限于 iWARP 连接设置和错误处理。 UDA 在用户空间中不可用
DOCA: Data Center-on-a-Chip Architecture, 芯片上的数据中心架构
前言 cgroup作为Linux上广泛应用的一个功能,用来限制、控制与分离一个进程组群的资源。在内核Linux-4.14上,支持了如下类型(源代码参考https://github.com/torvalds/linux/blob/v4.14/include/linux/cgroup_subsys.h): SUBSYS(cpuset) SUBSYS(cpu) SUBSYS(cpuacct) SUBSYS(io) SUBSYS(memory) SUBSYS(devices) SUBSYS(freezer) SUBSYS(net_cls) SUBSYS(perf_event) SUBSYS(net_prio) SUBSYS(hugetlb) SUBSYS(pids) SUBSYS(rdma) SUBSYS(debug) 查看目前实际打开了其中的一部分: # cat /boot/config-`uname -r` | grep CONFIG_CGROUP_ CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set CONFIG_CGROUP_FREEZER=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y 尤其是其中的CPU的Quota控制,在以docker为代表的PaaS中大显身手。然而,这并不意味着cgroup的CPU Quota控制就是完美的。例如,希望一个进程占用的CPU不超过200%,那么它的真实的CPU占用是怎样的呢?接下来,作者会构造一段代码,可以算是一种极端场景,来证实这个问题确实存在。
这篇文章描述了通过 PCI Express 结构在 CPU 和 NIC 之间发生的一系列协调事件,以通过 InfiniBand 互连传输消息并发出其完成信号。
作者:The Next Platform联合主编Timothy Prickett Morgan 远程过程调用(RPC)可能是现代计算发展史上最重要的一项发明。能够从一个运行中的程序发起通信,并激活另一组代码执行某项任务(获取数据或以某种方式处理数据),这本身是一个强大而普遍的概念,并催生了模块化编程和微服务的崛起。 当下,在与昔日的整体式代码截然不同的环境,代码块与跨集群运行的系统各组件之间的延迟至关重要。而缩短这个延迟从未如此艰难。但是斯坦福大学和普渡大学的一些追求创新的研究人员已提出了一种协同设计的
rdma The RDMA I/O engine supports both RDMA memory semantics (RDMA_WRITE/RDMA_READ) and channel semantics (Send/Recv) for the InfiniBand, RoCE and iWARP protocols. falloc IO engine that does regular fallocate to simulate data transfer as fio ioengine. DDIR_READ does fallocate(,mode = keep_size,) DDIR_WRITE does fallocate(,mode = 0) DDIR_TRIM does fallocate(,mode = punch_hole) e4defrag IO engine that does regular EXT4_IOC_MOVE_EXT ioctls to simulate defragment activity in request to DDIR_WRITE event rbd IO engine supporting direct access to Ceph Rados Block Devices (RBD) via librbd without the need to use the kernel rbd driver. This ioengine defines engine specific options. gfapi Using Glusterfs libgfapi sync interface to direct access to Glusterfs volumes without options. gfapi_async Using Glusterfs libgfapi async interface to direct access to Glusterfs volumes without having to go through FUSE. This ioengine defines engine specific options. libhdfs Read and write through Hadoop (HDFS). The 'filename' option is used to specify host, port of the hdfs name-node to connect. This engine interprets offsets a little differently. In HDFS, files once created cannot be modified. So random writes are not possible. To imitate this, libhdfs engine expects bunch of small files to be created over HDFS, and engine will randomly pick a file out of those files based on the offset generated by fio backend. (see the example job file to create such files, use rw=write option). Please note, you might want to set necessary environment variables to work with hdfs/libhdfs properly. mtd Read, write and erase an MTD character device (e.g., /dev/mtd0). Discards are treated as erases. Depending on the underlying device type, the I/O may have to go in a certain pattern, e.g., on NAND, writing sequentially to erase blocks and discarding before overwriting. The w
领取专属 10元无门槛券
手把手带您无忧上云