使用RDMA增强AZURE存储
abstract
鉴于分离存储在云上的广泛使用,软件是在云存储服务上建立高性能能网络和高可靠性网络的关键,在Azure中,我们选择了远程直接内存访问(RDMA)作为传输方式,为了让它同时适用于前端流量(在计算虚拟机和存储集群之间)和后端流量(在存储集群中)以完全的认识到它的好处。计算和存储集群可能需要定位不同的在azure区域的数据中心,我们需要支持RDMA在区域的尺度。
这项工作展示了我们在背书区域内部的RDMA以支持Azure中的负载。高复杂性和异质的我们的基础设施带来了一系列新的挑战,例如不同类型的RDMA网络接口卡之间的互操作性问题。我们做了几个改动到我们的网络基础设施以解决这些挑战。今天大约70%的流量在azure的内部是区域内RDMA所有的Azure都支持区域内RDMA。RDMA帮助我们达到了明显的磁盘IO性能提升和CPU核心节省。
1 介绍
高性能和高可靠性存储是一个最重要的服务在公共云中。在最近几年中,我们见证了存储介质和技术的重大进步以及客户也渴求相同的性能在云上。考虑到分离存储在云中的广发使用,网络连接计算和存储集群成为了云存储的关键性能瓶颈。尽管基于Clos的网络结构提供了足够的带宽,遗留的TCP/IP栈遭受高处理延迟的困扰,单核吞吐量低,高CPU消耗,因此不适合这种情况。
给定这些限制,远程内存访问(RDMA)提供了有希望的方案通过卸载网络栈到网络接口卡(NIC)硬件,RDMA实现了非常低的处理延迟和高吞吐量以及接近0的cpu开销。此外为了执行提升,RDMA为每个栈进程也减少了CPU核心保留的数量在每个服务上。这些节省下来的CPU内核可以作为客户虚拟机(VM)出售或者用作应用处理。
为了完全的享受到RDMA的好处,我们的目标是为存储前端流量(计算虚拟机和存储集群之间)和后端流量(存储集群内)启用它。我们和之前的工作不同是他的目标知识为了后端存储的RDMA。在Azure,因为容量问题,对应的计算和存储集群可能位于不同的数据中心但在同一个区域。这要求我们的存储工作负载依赖于支持RDMA在区域的尺度。
DCQCN (Data Center Quantized Congestion Notification) 是一种用于 RDMA (Remote Direct Memory Access) 网络中的拥塞控制协议。它主要被设计用于 RoCEv2 (RDMA over Converged Ethernet v2) 环境,以解决数据中心网络中的拥塞问题。
在这个论文中,我们概要了我们在部署区域内RDMA的经验一直吃Azure storage的工作负载。对比与之前的RDMA部署,区域内部RDMA部署引入了许多新的挑战。由于高复杂性和和异质性在亚马逊的区域中。随着Azure基础设施的不断发展,不同的集群可以部署不同的RDMA网卡。同时所有的NIC支持DCQCN,它们的实现可以是不同的。当不同的网卡进行通信时,会导致许多不同的问题。类似的,来自多个供应商的异构的交换机软件和硬件显著的增加了我们的工作量。此外,链接数据中心的长线缆会导致交大的传播延迟和交大的往返市场(RTT)区域内的变化。这为拥塞控制带来了新的挑战。
我们已经对我们的网络寄出设施进行了几个改变,从应用层协议到连接层流控,安全的为Azure存储流量启用RDMA来进行Azure 存储流量。我们开发了基于RDMA的存储协议做了许多的优化和故障切换支持,以及无缝的集成它们到遗留的存储堆栈中(章4)。我们构建了RDMA Estats以健康主机网络栈的状态(章5)。我们利用SONiC以在不同的交换机平台上执行统一的软件栈(章6)。我们更新NIC固件以统一他们的DCQCN行为并且使用优先级流量控制组合和DCQCN已达到搞吞吐量,低延迟和接近0的低延迟(第七章)。
在2018年,我们开始使用RDMA服务于存储后端流量。在2019年,我们开始使用RDMA来服务客户前端流量。图1展示了Azure公开区域在2013年1.18-2.16的流量统计。在2023年2月,azure中大概70%的流量是RDMA,所有的Azure公共区域都支持区域内RDMA,RDMA帮助我们达到了显著的磁盘I/O性能提升和CPU核心节省。
许多 Azure 区域提供可用性区域,这些区域是区域内独立的数据中心组。可用区足够近,可以与其他可用区建立低延迟连接。它们通过高性能网络连接,往返延迟小于 2 毫秒。但是,可用区之间的距离足够远,可以降低多个可用区受本地中断或天气影响的可能性。可用区具有独立的电源、冷却和网络基础设施。它们的设计使得,如果一个区域发生中断,则其余区域将支持区域服务、容量和高可用性。它们可以帮助您的数据在出现问题时保持同步和可访问性。
数据中心位置是使用严格的漏洞风险评估标准选择的。此过程识别所有特定于数据中心的重大风险,并考虑可用区之间的共享风险。
2 background
在这个章节,我们首先提出亚马逊网络和存储架构的背景。然后我们介绍动机和挑战以建立区域内RDMA
2.1 亚马逊区域的网络架构
BGP (Border Gateway Protocol,边界网关协议) 是一种互联网路由协议,用于在不同的自治系统 (Autonomous Systems, AS) 之间交换路由信息。
eBGP 是 BGP 的一种应用模式,专门用于不同自治系统之间的路由。
- 每个自治系统通常代表一个网络运营商、公司或组织,具有自己的独立网络。
- eBGP 的主要功能是实现跨 AS 的通信,告诉邻近的网络哪些 IP 地址是可达的,以及通过哪条路径可达。
在云计算中,一个区域是一个数据中心组部署在延迟定义的边界内。图2展示了Azure区域最简单的拓扑。区域内的服务器通过基于以太网Clos网络连接该网络有四层交换机:0级(T0),1级(T1),2级(T2)和区域枢纽(RH)。我们使用外部GBP(eBGP)进行路由,使用多路径(ECMP)进行均衡负载。我们部署以下四个类型的单元。
ECMP 是一种负载均衡技术,用于在具有相同成本的多条路径之间分配流量。
- “相同成本” 指的是网络路径的度量值(例如跳数、延迟等)相等。
- 通过 ECMP,可以将流量分散到多条路径上,从而提高网络的吞吐量和冗余性。
在这种情况下,ECMP 用于负载均衡,确保流量能够有效地利用多个相同成本的路径,不会过度依赖单一路径,进而提高网络的性能和容错能力。
- 机架:一个T0交换机和服务连接到它
- 集群:一组机架连接到同一组相同的T1交换机。
- 数据中心:一组集群被连接到相同的一组T2交换机。
- 区域:数据中心连接在同一组RH交换机上。与数据中心[50]中的短链路(几米到几百米)不等,T2和RH交换机之间的链路长度可达数十公里。
披萨盒式交换机 (Pizza Box Switches)
- 指的是外形类似披萨盒的紧凑型网络交换机,通常是 1U 或 2U 的高度,适用于机架式安装。
- 优点是小巧、成本低、易于部署,适合用作低层(如 T0 和 T1 层)的接入或分布式交换机。
在这个架构中有俩个事情需要注意。首先,由于在T2和RH长链路的连接,基本的往返时间(RTT)从数据中心内的几微秒到区域内的2毫秒不等。其次我们使用俩类的交换机:T0和T1使用披萨盒交换机,披萨盒交换机在学术界已经得到了广泛的研究,通常配备一个单一的交换 ASIC,并具有浅层的数据包缓冲区。相比之下,节点的交换机使用基于虚拟输出队列(Virtual Output Queue, VoQ)架构的带有深度数据包缓冲的多个交换机asic构建的。
2.2 azure存储的高层级架构
在Azure中,我们聚合了计算和存储资源以节省成本和自动缩放。Azure中有俩个类型的集群:计算和存储。虚拟机是在计算集群中创建的,但是虚拟硬盘(VHD)的实际存储主流在存储集群中。
图3展示了azure存储的高层级架构。Azure存储有三个层:前端层,分区域层,流层。流层是仅追加的分布式文件系统。它存储比特在硬盘上并且复制它们以保持持久性,但是它不理解更高级别的存储抽象,即blob,Table和VHD。分区层理解不同的存储抽象,在存储集群中管理所有数据对象的分区,并且存储对象数据在流层的顶部。分区层和流层的守护进程称为分区服务器(PS)和扩展节点。PS和EN位于每个存储服务器上。前端层由一组服务组成,这些服务器传入对应的请求进行身份验证并转发给相应的PS。在一些例子中,FE服务也可以直接访问流层以提高效率。
当VM想要写入到它的磁盘,运行在计算服务器主机域的磁盘驱动向对应的存储集群发出I/O请求。在流层,文件本质上是称为“extent”的大型存储块的有序列表。为了写入文件,数据追加到活动extent的结尾,在存储中存储三份以保持持久性。只有接收到来自所有EN成功的响应之后,FE或者PS发送最终的响应反馈到磁盘驱动。相反磁盘的读取也是不同的。FE或者PS读取任一个EN副本的数据并且发送响应给磁盘驱动。
此外,为了用户面的工作负载,存储集群中还有很多后台工作负载,即垃圾收集和擦除码。我们将存储分为俩类:前端(在计算和存储服务器之间,例如,VHD写入和读取请求)和后端(在存储服务器之间,例如复制和磁盘重建)。我们存储流量具有类似incast的特性。流层的擦除码会密封几个片段的extent,它们发送擦除码片段到不同的服务以进行存储。当用户想要读取由于故障不可用的片段时,流层将会读取来自多个存储服务的其他区段以构建目标片段。
2.3 区域内RDMA的动机
存储技术在最近几年得到了显著的提升。例如,非易失性存储标准(NVME)固态驱动(SSD)可以提供10G的吞吐量以及请求延迟在数百微妙内。许多客户要求在云上获得相同的性能。搞性能存储方案施加了严苛的需求到底层的网络上这是由于分离的和分布式的存储架构。然而,数据中心网络通常提供了充足的带宽容量,操作系统内核中遗留的TCP/IP堆栈由于其高处理延迟和低单核吞吐量而成为性能瓶颈。更糟糕的是,遗留TCP/IP堆栈的性能也依赖于操作系统调度。为了提供可预测的存储性能,我们必须在计算和存储节点上为TCP/IP堆栈预留足够的CPU内核,以处理峰值存储工作负载。使用CPU核心带走了原本可以作为客户虚拟机出售的能力,因此增加了提供云服务器的开销。
在这些限制下,RDMA提供了有前途的解决方案。通过卸载NIC硬件的网络栈,RDMA达到了可预测的地处理延迟(几微妙)和高吞吐量(对于单个流的线性速率)同时接近0的CPU开销。除了它的性能优势,RDMA还减少了每个服务器上为网络堆栈处理预留的CPU核数。这节省了CPU核心,然后可以作为客户虚拟机出售或用于存储请求处理。
为了完全达到RDMA的好处,我们必须使用RDMA以同时存储前端和后端流量。为后端流量启动RDMA相对容易,因为几乎所有的后端流量都停留在了存储集群内。作为对比,前端流量跨越了区域中的不同集群。尽管我们尝试相应的计算和存储集群放在一起以最小化延迟,有时,由于容量问题,它们最终可能仍然位于一个区域内的不同数据中心。这就要求我们的存储工作负载在区域范围内依赖于对RDMA的支持。
2.4 挑战
当要在区域内RDMA时我们遭遇很多挑战,因为我们设计被许多现实限制所约束。
Go-Back-N 是 TCP 的一种思想来源之一,TCP 的基础机制(如滑动窗口、超时重传)与其类似,但 TCP 在功能和效率上进行了大幅扩展。
现实考量:就我们的目标是实现区域内基于遗留基础设施的RDMA。虽然我们可以灵活地重新配置和升级软件堆栈,例如网卡驱动程序、交换机操作系统和存储堆栈,但替换底层硬件在操作上是不可行的,例如NIC和交换机。因此我们适配了RDMA。因此我们在用商用以太网 v2(RoCEv2)上采用了RDMA以保持IP路由网络的兼容性(2.1)。在开始这个项目之前我们已经部署了大量的第一代RDMA NIC。在那处理能力有限的网卡中实现了回退N重传。我们的测量表明,恢复丢失的数据包需要数百微妙,这甚至比TCP/IP软件栈更糟糕。考虑到如此大的性能下降,我们做决策来适配基于优先级的流控(PFC)以消除报丢失造成的拥挤。
FPC Headroom 是网络领域中的一个术语,通常出现在无损网络(如支持 RDMA 或使用 PFC 的网络)相关的上下文中。它指的是网络设备(如交换机或网卡)内部某些缓冲区的额外预留空间,用于在网络拥塞情况下处理突发流量,确保高优先级或关键流量不丢失。
挑战:在这个项目之前,我们已经在一些集群部署了RDMA来支持Bring服务,并且我们从部署中吸取了一些教训。对比与集群内RDMA部署,区域内RDMA部署引入了新的挑战,因为基础设施的高复杂度和异质性
- 异质的NIC:云基础设施保持增长,通常一个集群或者一个机架使用最新一代的服务器硬件。区域中不同的集群有不同的NIC。我们已经部署了三代的通用RDMA NIC来自流行的网卡供应商。Gen1,Gen2,Gen3。每个NIC有DCQCN不同的实现。当不同世代的NIC彼此通信时,会导致许多不希望的交互。
- 异质交换机:类似服务基础设施,我们保持部署新的交换机以减少成本以及增加带宽容量。我们已经部署了许多交换机ASIC和多个交换机操作系统来自不同的供应商。然而这增加了我们的工作量,因为许多概念是供应商特有的,例如,缓冲架构,大小,分配机制和监控与配置。
- 异质的延迟:如同在2.1张展示的,大的RTT变化从纪委秒到2毫秒在一个区域中,由于T2和RH之间长链路的链接。因此,RTT的公平性再次成为一个关键的挑战。此外,长链路大的传播延迟也给PFC headroom增加了压力。
零日问题(Zero-Day Vulnerability) 指的是尚未被软件开发者或公众广泛发现或修复的安全漏洞。因为这些漏洞在被公开披露或修复之前就可能被攻击者利用,带来了极大的安全威胁。
类似其他的公共云服务, 可用性,诊断和客服务型是RDMA存储系统中的关键概念。为了达到高可用,尽管在测试上投入了大量的资金,但我们总是为意想不到的零日问题做准备。我们的系统必须检测性能异常,并且在必要时执行自动故障转移。为了理解和debug故障,我们必须构建细粒度的遥测系统以交付水晶搬清晰的可见性到每个端到端路径中的组件。我们的系统也必须客服务性:存储工作负载需要在网卡驱动更新和交换机软件更新后仍然有效。
3 总览
我们必须在我们的网络基础设施上进行改变,从应用层协议到连接层流控,通过RDMA安全授予存储。我们开发了俩个基于RDMA的协议sU-RDMA和sK-RDMA,我们已经将其无缝的集成到我们传统的存储栈中一直吃后端沟通和前端沟通。在存储协议和NIC之间,我们部署监控系统RDMA Estats,通过准确的陈本细目让我们能看到主机网络栈。
PFC 是 Priority Flow Control 的缩写,是一种基于优先级的流量控制机制,用于以太网中的无损传输。它是 IEEE 802.1Qbb 标准的一部分,主要用于在高性能网络(如 RDMA(Remote Direct Memory Access) 网络或存储网络)中避免数据包丢失。
SONiC 是 Software for Open Networking in the Cloud 的缩写,是一个基于 Linux 的开源网络操作系统(Network Operating System, NOS)。它由微软在 2016 年发起并捐赠给开放计算项目(Open Compute Project, OCP),目前由社区和多家公司共同维护。SONiC 是为大型云计算数据中心设计的,特别适合在开放网络硬件上运行。
在网络中,我们使用PFC和DCQCN的结合,以达到高吞吐量,低延迟,和接近0的丢失引起的重建。当我们启动项目时,DCQCN和PFC是最先进的商业解决方案。为了优化客户的体验,我们使用俩个原则来隔离存储前端流量和后端流量。为了缓和交换机异质问题,我们开发和部署了SONiC以提供跨不同交换机平台的统一软件栈(6章)。为了减轻异质NIC操作性的问题,我们更新了NIC固件以一致化DCQCN的行为(章7)。我们仔细调优了DCQCN和交换机缓冲参数以优化不同情况下的性能。
3.1 使用看门狗缓解PFC风暴
暂停帧:PFC 是一种基于优先级的流量控制机制。在数据中心网络等环境中,当设备(如交换机、网卡等)的缓存将要溢出时,它会发送暂停帧给上游设备,要求上游设备暂停发送特定优先级的数据帧,以避免数据丢失。这就像是交通拥堵时,交警(暂停帧)指挥部分车辆(特定优先级的数据)暂停前进。
我们使用PFC来防止拥塞包丢失。然而,故障的NIC和交换机可以在没有拥塞的情况下持续发送PFC暂停帧,从而长时间完全阻断对端设备。无休止的暂停帧会最终传播到整个网络,从而对无辜的设备造成附带损害。这种无休止的PFC暂停帧被称为PFC风暴。相比之下,正常阻塞出发的PFC暂停帧,之通过间歇性暂停和恢复的方式减慢对端设备的数据传输速度。
探测和减轻PFC风暴,我们设计和部署PFC看门狗在每个交换机和bump-in-the-wire FPGA卡在T0交换机和服务之间。当PFC看门狗检测到某个队列处于暂停状态的时长异常长时,例如数百毫秒,他禁用PFC并丢弃该队列上的所有数据,从而防止PFC风暴传播到整个网络。
3.2 安全
我们使用RDMA在可信的环境中授权第一方存储流量。包括存储服务,主机域的计算服务,交换机和连接。因此我们是安全的。
4 基于RDMA存储协议
在这一章节我们介绍俩个构建在RDMA可靠连接上的存储协议以构建(RC):sU-RDMA和sK-RDMA。俩个协议目的是优化性能的同事保持与遗留软件栈好的兼容性。
4.1 sU-RDMA
sU-RDMA被用来存储后端(存储到存储)沟通。图4展示了我们存储后端网络栈的架构,高亮了sU-RDMA模块。Azure存储网络协议是一个RPC协议直接被应用用来发送请求和响应对象。使用套接字API来实现网络管理,发送和接受消息。
为了简化RDMA和存储栈的结合,我们构建了sU-RDMALib,一个用户态的库,它宝库类似socket的字节流API给上一层。为了映射类似socket api的操作到RDMA操作,sU-RDMILib需要处理以下的挑战。
- 当RDMA应用不能直接写到已经存在的内存区域(MR),他必须将应用程序缓冲区注册为新的MR或者复制数据到已经存在的MR。这俩个操作都会引入比较大的延迟损失,我们应该劲量减少这些开销。
- 如果我们使用RDMA发送和接受,接受者必须预发布足够的接收请求。
- RDMA发送方盒接收方必须就传输的数据大小达成一致
RDMA(Remote Direct Memory Access)中,网卡(NIC,网络接口卡)的 Memory Translation Table(MTT) 是一种用于内存地址转换的关键数据结构。它的主要作用是支持 RDMA 操作中物理地址与虚拟地址之间的转换,从而实现高效、直接的远程内存访问。
以下是 MTT 的核心功能和相关背景:
为了减少内存注册,特别是对于小消息来说,sU-RDMALib维护一个跨多个连接共享的预注册内存的公共缓冲池。sU-RDMALib也提供了API来允许应用请求和发布注册缓存。为了避免内存传输表(MTT)缓存在NIC上丢失,sU-RDMALib指派大内存块,并且在内存块上注册内存。这个缓存池还可以根据运行时使用的情况自动扩展。为了避免压垮接受者,sU-RDMALib实现了接收方驱动基于信用的流控其中信用表示接收方分配的资源(例如可用缓冲区和已经发布Receive请求)。接收方定期发送信用更新消息到发送方。当我们开始设计sU-RDMALib,我们考虑使用RDMA发送和发送和接受请求的固定大小S以传输数据。然而这个设计导致了一个窘境。如果我们使用大的S,可能会浪费内存空间,因为Send请求完全使用接收请求的接收缓冲。作为对比,小的S导致了大数据段的碎片开销。因此,sU-RDMALib使用了基于消息大小的三个传输模型。
- 小信息:数据传输使用RDMA发送和接受
- 中等消息:发送者提交一个RDMA写入请求以传输数据,并且发送带有写完的通知到接受者
- 大消息: 发送方首先向接收方发送携带本地数据缓冲区描述的RDMA发送方请求。然后接收方发布一个读取请求来读取数据。最后,接收方发布一个发送请求读取完成通知发送者。
在sU-RDMALib上,我们构建了模块以在TCP和RDMA之间使用动态传输,它是故障切换和恢复的关键。传输过程是渐进的。我们定期关闭所有连接的一小部分,并且使用所需传输建立新的连接。
不像TCP,RDMA使用了基于拥塞控制的速率,不追踪运行中保的数据量(窗口大小)。因此RDMA倾向于注入过多的窜书数据包而出发PFC。为了缓和它,通过划分信息到固定带下的窗口并且每个连接只允许一个正在运行的块,我们在Azure 存储网络协议实现了静态的流量控制。在高密度入汇情况下,分块处理可以显著提升性能,同时对 CPU 的影响几乎可以忽略不计。
4.2 sK-RDMA
sK-RDMA被用来前端存储(计算到存储)沟通。与在用户空间中运行RDMA的sU-RDMA相反这是一个问题,sK-RDMA运行RDMA在内核态。这使得计算服务主机与中内核态运行的磁盘驱动直接使用sK-RDMA来发出网络I/O请求。sK-RDMA利用了服务信息块(SMB)直通,他提供了类似socket的核心层模型RDMA接口。类似于sU-RDMA,sK-RDMA也提供了基于信用的流控和动态的在RDMA和TCP之间传输。
FMR 代表 Fast Memory Registration,即快速内存注册。它是一种优化内存注册过程的机制,通常用于提高 RDMA 操作的效率。
在 RDMA 中,内存注册是指将内存区域映射到 RDMA 网络中,以便远程节点可以直接访问这些内存。这是一个相对昂贵的操作,因为涉及到与 RDMA 适配器的交互,通常会导致较高的延迟。
Fast Memory Registration (FMR) 通过减少内存注册的开销来提升 RDMA 的性能。在传统的内存注册方法中,每次操作都需要注册和注销内存,而 FMR 通过将内存区域一次性注册到 RDMA 硬件中,允许多个 RDMA 操作共享这些内存区域,从而减少了频繁注册和注销的开销,提高了效率。
图5展示了sK-RDMA的数据流以读取和写入磁盘。然后他提交RDMA发送请求到传输请求信息到存储服务。该请求带有磁盘I/O命令和描述RDMA访问的FMR注册缓冲区。根据InfiniBand(IB)规范,NIC需要等待FMR的完成,在处理任何随后提交的请求之间提出请求。
因此,请求信息实际上是在内存注册之后推送到网络上的。数据传输由存储服务器通过RDMA读或写方式发起。数据传输完成后,存储服务器通过RDMA Send With Invalidate方式向计算服务器发送响应消息。
磁盘的 CRC(Cyclic Redundancy Check,循环冗余校验)是一种错误检测技术,用于验证存储在磁盘上的数据是否完整或发生了损坏。CRC 是通过将数据块(如文件或磁盘上的数据块)与预先计算的校验码进行比对来检测数据传输或存储过程中可能出现的错误。它通常用于磁盘的文件系统和数据传输协议中,以确保数据的可靠性。
为了探测会悄无声息发生的数据腐败,和沿着路径的硬件bug,sK-RDMA 和sU-RDMA都实现了环形冗余校验(CRC)在所有的数据上。在sK-RDMA中,计算服务计算磁盘写入数据的CRC。这个计算的CRC包括了请求信息,并由存储服务器用于验证数据。对于磁盘读取,存储服务执行CRC计算并且包含在响应消息中,计算服务使用它们来验证数据。
5 RDMA Estat
为了理解和Debug故障,我们需要细粒度的遥测工具以捕捉每个在端到端路径组件的行为。尽管已经有很多显存的工具争端交换机和网络故障,这些工具都不能很好的了解主机上的RDMA网络堆栈。
在TCP诊断工具的启发下,我们开发了RDMA扩展统计(Estats)以诊断网络和主机中的性能问题。如果RDMA应用的性能不好RDMA Estats允许我们,瓶颈在发送方,接收方或者网络。
为了这个结果,RDMA Estas提供了细粒度的RDMA操作延迟的分解,此外收集定期的计数器,比如字节发送接收和NACK的数量。当响应(ACK或者读取响应)被收到,NIC在接收管道的沿线测量点记录额外的时间戳(图6)。在任何在Azure 中的RDMA Estats中实现需要以下的测量点。
- T1:WQE提交:WQE被提交到队列时的主机时间戳
- T5:CQE生成:当完成队列元素(CQE)在网卡中生成的时候
- T6:CQE轮询:当CQE被软件轮询时的时间戳
在Azure中,NIC驱动上报不同的延迟,派生自上述时间戳。例如T6-T1是在RDMA消费者看来的操作延迟,同时T5-T1是NIC看起来的操作延迟。用户模型代理按链接,操作类型和(成功,失败)状态对延迟样本进行分组,以对每个组创建直方图。默认直方图有一分钟的间隔。每个直方图和汇总统计数据被回归到Azure遥测管道中。随着确证方法的发展,我们向用户模式添加了代理这个功能,以收集和上传NIC和QP状态存储。最后我们扩展了时间出发数据收集的范围,在事件不特定于RDMA的情况下,通过用户模型代理以引入NIC统计和状态状态转储(为影响连接性的操作提供服务)。
延迟样本的手机增加了开销给WQE发布和处理代码的路径。这个开销主要是为了保持NIC和主机时间戳同步。为了减少开销,我们开发了时钟同步过程,试图将读取NIC时钟寄存器的频率降至最低,同时保持最低偏差。
RDMA Estats可以通过快速的排除外部网络延迟。在8.3章我们分享了使用 RDMA Estats 诊断 FMR 隐藏围栏(hidden fence)错误的经验。AZURE存储