ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RDMA-HCA-Mellanox网卡地址转换与保护 (四)

RDMA-HCA-Mellanox网卡地址转换与保护 (四) HCA 接收一个内存引用时输入通常是地址、MKey、长度和访问类型。MKey 选择上下文MKC 约束范围与权限MTT 或 KLM 将逻辑地址转换到设备可访问的地址。本文围绕这条硬件路径说明内存对象的布局、逐页与间接转换、保护检查以及映射更新和撤销的生效条件。1. 地址转换流程一次业务内存访问的地址转换流程可概括为HCA 从 WQE 或 RDMA 请求中取得地址、lkeyrkey、长度和访问类型。通常情况下 lkey 和 rkey 相等即图中的 MKey。HCA 使用mkey_index定位 MKC并检查 MKey 的 variant 是否与上下文匹配。HCA 读取 MKC根据access_mode选择直接 MTT 转换或 KLM 间接转换。MTT 模式使用当前 MKC 和输入地址KLM 模式选择命中的 KLM 项计算下层地址并用下层 MKey 定位下层 MKC直到进入直接转换。HCA 检查上下文范围、PD 以及本次访问所需的读写权限。HCA 计算 MTT 页索引i和页内偏移o读取页基址并得到最终 DMA 地址page_base o。1.1 地址空间硬件内存访问涉及三类地址注册时的配置将它们联系起来。地址使用者含义CPU VA应用或内核CPU 页表所定义的虚拟地址MKey 地址空间中的 VAIOVA本地 WQE 的 SGE或入站 RDMA 请求与 MKC 的start_addr和len进行范围检查并作为 MTTKLM 地址转换的输入DMA 地址HCAMTT 输出的设备访存地址在有 IOMMU 的系统中还会经过 IOMMU 地址转换CPU VA 与 HCA 输入地址可以取相同数值也可以不同。MTT 中的 Physical Tag 应按设备 DMA 地址理解它描述 HCA 在总线上使用的页地址不能据此跳过主机 IOMMU。映射建立后HCA 按已配置的对象工作普通业务访问不需要 CPU 逐次解析地址。1.2 本地与远端访问lkey 与 rkey 表示 Key 的使用位置。非 inline SENDWRITE 用 lkey 读取本地源数据RECV、READ 和 Atomic 用 lkey 将结果写入本地内存。对端发来的 WRITE、READ 和 Atomic 则以 rkey 引用本机内存。普通 MR 可以将同一个完整 MKey 用作 lkey 和 rkey允许的操作由上下文权限决定。HCA 的 Requester 和 Responder 都会发起内存访问。一次 RDMA READ 涉及远端 Responder 的读权限以及本地 Requester 结果缓冲区的写权限两个端点各自使用本机对象执行检查。1.3 MR、MW 与 PDMemory RegionMR把一个地址范围、访问权限和转换关系组合成可访问对象。Memory WindowMW通过自己的 MKey 引用 MR 的子范围可以为该范围设置独立的远端授权和失效周期。Protection DomainPD将 QP 与它可以引用的内存对象关联起来。对象硬件表示主要责任MRMKC 与转换条目定义地址范围、访问权限和实际映射MW间接 MKC 与下层引用在 MR 的部分范围上建立独立授权PDQPC 与 MKC 中的 PD 编号检查访问 QP 与 MRMW 的保护域归属1.4 队列与业务内存HCA 读取 WQE、写入 CQEEQE 时需要访问相应的队列缓冲区这些缓冲区的页面映射由队列上下文和创建参数中的 PAS 描述。业务数据访问则通过 WQE 或入站 RDMA 请求中的 MKey 启动地址转换。两类内存访问分别由队列对象和内存对象管理。2. MKey 与 MKC2.1 MKey 编码MKey 是 32 位标识高 24 位为 Index低 8 位为 variant也称 tag。HCA 用 Index 选择上下文再检查 variant 是否与该上下文接受的值一致。对象Bits完整字段名含义MKey31:8mkey_index选择 MKey 对象CREATE_MKEY返回该 IndexMKey7:0variant验证当前 Key 引用MKC04h7:0mkey[7:0]保存该对象接受的 variantCREATE_MKEY返回mkey_index软件将它与创建时指定的 variant 拼接MKey (mkey_index 8) | variant。业务访问携带完整 Key查询与销毁命令使用 Index。按名创建还需要mkey_by_name能力。复用同一 MKey Index 时软件可以更新 variant使仍携带旧完整 MKey 且尚未通过校验的请求无法通过 Key 检查。但 variant 只有 8 bit取值最终会循环复用已经通过校验的在途访问也不会因 variant 更新而自动终止。因此重新发布该 Index 前仍需停止旧引用、同步在途访问并完成原授权的撤销。variant 仅用于引用有效性校验不具备随机密钥的安全强度。2.2 MKC 格式下图展示了 MKey 和 MKC 格式。下表是 MKey 位域字段的含义。OffsetBits图中字段完整字段名含义Key31:8mkey_indexMKey 对象索引。HCA 使用该值定位 MKCCREATE_MKEY返回此 Index。Key7:0variantMKey 的 8 bit 变体值。HCA 将它与 MKC 中的mkey[7:0]比较以验证当前完整 MKey。MKey Context 位域字段按功能分为地址转换、转换属性、访问控制和其他字段四类。2.2.1 地址转换OffsetBits图中字段完整字段名含义00h28:26AM[4:2]access_mode_4_2access_mode的高 3 位与AM[1:0]拼成完整的 5 bit 访问模式。00h9:8AM[1:0]access_mode_1_0access_mode的低 2 位与AM[4:2]拼成完整模式编码及地址解释见 2.4 节。00h5:4MTMma_translation_mode控制普通 MKey 转换后的附加平台地址转换0x0表示 None完成access_mode指定的普通转换后直接使用其结果0x1表示 ATS通过 PCIe ATS 完成平台地址转换仅适用于 PAMTT 且需HCA_CAP.ats0x3表示 CAPI根据 PASID 和 PEC 完成附加转换仅适用于 PA。08h23:0pasid与该 MKey 关联的 PASID当ma_translation_modeCAPI时有效。10h31:0start_addr[63:32]64 bitstart_addr的高 32 位与14h共同定义 RegionWindow 的起始 VAIOVA。MEMIC 模式下表示已分配 MEMIC 缓冲区的地址。14h31:0start_addr[31:0]64 bitstart_addr的低 32 位请求地址以该起点进行范围检查和相对偏移计算。18h31:0len[63:32]64 bitlen的高 32 位与1Ch共同定义 RegionWindow 的有效字节数。length641时保留。1Ch31:0len[31:0]64 bitlen的低 32 位完整访问必须落在该长度限定的范围内。MEMIC 模式下表示缓冲区大小。2Ch15:0mtt handle [47:32]mtt_handle[47:32]转换 handle 的高 16 位与30h共同组成 MTTKLM 等转换结构在 ICM 中的位置指针。30h31:0mtt_handle[31:0]转换 handle 的低 32 位与2Ch[15:0]共同定位转换结构。2.2.2 转换属性OffsetBits图中字段完整字段名含义00h6TAtunneled_atomic置位后启用 Tunneled Atomic 地址处理仅在设备声明tunneled_atomic能力时有效。0Ch31L64length64置位后 Region 长度为2^64Blen字段保留用于完整 64 bit 地址空间语义。34h31:0translations_octword_size为该 MKey 的转换条目预留的总存储大小单位为 16 B必须是 4 的倍数。MTT 模式下每个表项占 8 B因此最多可容纳2 × translations_octword_size个 MTT 表项KLMFixed Buffer Size 模式下每个表项占 16 BPA 模式下保留。38h4:0log_entity_sizeMTT 模式下表示页面大小的log2Fixed Buffer Size 模式下表示每个 KLM 缓冲区长度的log2其他模式保留有效值为 12 及以上。CREATE_MKEY输入中的translations_octword_actual_size表示本次命令实际提交的转换数据量可以小于translations_octword_size所表示的预留总容量。2.2.3 访问控制OffsetBits图中字段完整字段名含义00h15UEumr_en置位后允许 UMR 更新此 MKey实际更新还必须满足提交 SQ、PD、对象类型、字段掩码和容量等限制。00h14aRemote Atomic置位后允许远端 Atomic 访问。00h13rwRemote Write置位后授予远端写权限本地写权限与远端写权限分别配置。00h12rrRemote Read置位后授予远端读权限本地读权限与远端读权限分别配置。00h11lwLocal Write置位后允许 HCA 向本地缓冲区写入例如 RECV、RDMA READ 结果和 Atomic 返回值。00h10lrLocal Read置位后允许 HCA 读取本地缓冲区所有 MKey 均要求置位。04h31:8qpnType 2 MW 关联的 QP Number其他对象必须设为0xffffff。04h7:0mkey[7:0]当前 MKC 接受的 variant业务访问携带的完整 MKey 低 8 位必须与其匹配。0Ch24ERIen_rinval置位后允许远端失效Shared MR 必须清除此位其他对象还需遵守其类型对应的失效规则。0Ch23:0pd对象所属 Protection Domain 编号HCA 用它检查访问 QP 与 MRMW 的保护域归属。2.2.4 其他字段OffsetBits图中字段完整字段名含义00h31RReserved保留00h30Ffree对象状态0表示 MKey 正在使用并参与地址转换1表示对象处于 free 状态保留 Index 和已分配转换容量供后续重新注册。00h29RReserved保留00h25:19RReserved保留00h18ROWrelaxed_ordering_write置位后写事务可使用 PCIe Relaxed Ordering仅在设备支持时有效。该属性只放宽 PCIe 事务之间的排序不改变 RDMA 操作的完成语义也不能替代 Fence、CQE 和必要的内存同步。00h17RReserved保留00h16SFRsmall_fence_on_rdma_read_response置位后Responder 为该 MKey 生成 RDMA Read 响应时每个 QP 只保留一个向 PCIe 发出的读请求以约束响应数据读取的并行度和顺序。00h7RReserved保留00h3:0sf本文沿用 PRM 位域图中的字段名具体语义以对应设备版本的 PRM 为准。08h31:24RReserved保留0Ch30BEbsf_en置位后允许此 MKey 使用 BSF 列表。0Ch29:27RReserved保留0Ch26ESCexpected_sigerr_count期望 Signature Error CQE 计数值的最低位用于 Signature Handover 流程。0Ch25RReserved保留20h31:0bsf_octword_size此 MKey 的 BSF 存储大小单位为 16 B必须是 4 的倍数。24h31:16RReserved保留24h15:0BSF handle [47:32]bsf_handle[47:32]BSF handle 的高 16 位与28h共同组成 BSF 在 ICM 中的位置指针。28h31:0BSF_handle[31:0]bsf_handle[31:0]BSF handle 的低 32 位与24h[15:0]共同定位 BSF。2Ch31:16RReserved保留38h31:7RReserved保留38h6RORrelaxed_ordering_read置位后读事务可使用 PCIe Relaxed Ordering仅在设备支持时有效。该属性只放宽 PCIe 事务之间的排序不改变 RDMA 操作的完成语义也不能替代 Fence、CQE 和必要的内存同步。38h5RReserved保留3Ch31:29RReserved保留3Ch28:27CEcrypto_enCrypto 状态0x0表示CRYPTO_DISABLED0x1表示CRYPTO_ENABLEDPRM 字段表定义这两种编码。3Ch26:16RReserved保留3Ch15:0generation_counter[15:0]16 bit generation counterUMR 使用mkey_ctx_mask的 bit 31 选择更新该字段本文按 PRM 公开信息描述其更新入口。2.3 MKC 定位HCA 内部以 Memory Protection TableMPT管理 MKey 对象。MPT 是由 HCA 固件管理的逻辑 MKey Context 表固件负责表项的创建、销毁和索引分配数据面硬件依据mkey_index查询 MKC并可缓存常用 MKC。PRM 未规定 MPT 是一块连续内存也未公开 MPT 的物理基址和内部寻址结构。HCA 需要主机内存承载固件内部状态时驱动在初始化阶段通过QUERY_PAGES获取 boot、init 或 regular pages 需求再以MANAGE_PAGES提交已固定并完成 DMA 映射的 firmware pages。这些页可能承载 MKey、QP 和 CQ 等内部上下文但页与具体 MPT 表项的对应关系由 HCA 管理。运行期内部页不足时HCA 通过异步 EQ 上报 Pages Request Event事件中的function_id标识请求页面的功能正num_pages表示建议增加的页数负值表示可回收的页数。驱动以MANAGE_PAGES提交页面 PAS 并重新使能下一次 Pages Request Event。一次 MKC 定位及后续结构选择的过程如下HCA 将完整 MKey 拆分为mkey_index和 variant。HCA 根据内部保存的 MPT 定位信息以mkey_index查找MKC[index]查询也可能由上下文缓存命中。HCA 比较 variant并依据 MKC 检查 PD、地址范围和访问权限。HCA 根据access_mode解释转换 handlePA 模式直接使用本层地址结果MTT 模式定位 MTTKLMFixed Buffer Size 模式定位条目列表SW_ICMMEMIC 模式进入对应设备地址空间。KLM 中的下层 MKey 再次执行上述查找过程。2.4 转换模式access_mode (access_mode_4_2 2) | access_mode_1_0。常用模式如下。值模式含义0x0PA使用输入的地址不进行本层地址转换。0x1MTT根据输入地址选择 MTT 页表项将页地址与页内偏移组合成目标地址。0x2KLM根据输入地址选择变长 KLM 条目再使用条目中的下层 MKey 和地址继续转换。0x3Fixed Buffer Size按固定缓冲区大小直接选择 KLM 条目再使用条目中的下层 MKey 和地址继续转换。0x4SW_ICM将输入地址解释为 SW ICM 地址访问 HCA 的软件管理设备上下文空间。0x5MEMIC将输入地址解释为 MEMIC 地址访问已经分配的片上设备内存。3. MTT 转换3.1 MTT 布局定位 MTT当MKC.access_modeMTT时HCA 使用 MKC 中的 48 bitmtt_handle定位该 MKey 的 MTT 起始位置。确定布局translations_octword_size表示为该 MKey 的 MTT 表项预留的总存储大小单位为 16 B每个 MTT 表项占 8 B因此最多可容纳2 × translations_octword_size个表项。log_entity_size定义页面大小P条目i对应逻辑映射的第i页。选择表项HCA 根据输入地址相对start_addr的偏移选择对应条目。相邻条目描述的 DMA 页可以不连续HCA 通过页索引把它们组成连续的 MKey 地址空间。确定覆盖范围MTT 表项按完整的对齐页描述映射但 MR 可以从首个页面的中间开始并在最后一个页面的中间结束首尾页面只有落入start_addr和len所定义范围的部分可以访问。若普通 MR 起始地址为S、长度为len、页大小为P需要覆盖的页数是ceil(((S mod P)len)/P)。页数决定有效映射项数预留的 MTT 表项空间可以为对齐或以后更新而更大。3.2 表项格式MTT Entry 包含页地址 Physical TagDMA 页地址 和访问权限。OffsetBits完整字段名含义00h31:0ptag[63:32]DMA 页地址高位04h31:8ptag[31:8]DMA 页地址低位部分有效位还取决于页大小04h7:2Reserved保留04h1wr_enWE页写许可04h0rd_enRE页读许可CREATE_MKEY.pg_access1时输入条目的rd_en/wr_en有效。pg_access0时应按命令规定的页地址输入解释不能把输入地址的低位零直接判断成缺页。3.3 页面大小MTT 模式按大小为 2 的幂的页面对齐。P2^log_entity_size该格式描述的页面范围为 4 KB 到 2 GB实际配置还需满足设备支持和 DMA 映射条件。更大的页面可以减少 MTT 项数但同一大页内的设备地址必须连续且正确对齐。选择页大小时需要同时满足输入地址的页内位置与 DMA 页内位置一致不能仅根据业务长度选择最大页。3.4 地址计算下图展示普通 MTT MR 的地址转换与访问路径。具体步骤如下接收请求HCA 取得 MKey、请求地址V、访问长度L和访问类型。检查 MKCHCA 使用 MKey Index 定位 MKC检查 variant、PD、访问权限并确认请求范围落在[start_addr, start_addrlen)内。计算区域偏移和页位置设S为MKC.start_addrP为页面大小。dV-S表示请求地址相对 MR 起点的偏移bS mod P表示 MR 起点在首个映射页内的偏移ubd表示请求位置相对首个映射页起点的总偏移ifloor(u/P)是 MTT 表项索引δu mod P是页内偏移。只有S按页对齐时i才能简化为floor(d/P)。读取 MTT 表项HCA 通过当前 MKC 的mtt_handle读取MTT[i]取得ptag和权限位。生成 DMA 地址HCA 检查页面访问许可从ptag取得page_base计算DMA_addresspage_baseδ。该结果是 HCA 可使用的设备地址如果需要 IOMMU 转换会在系统访存路径上继续处理。访问业务数据HCA 使用 DMA 地址访问数据。处理跨页请求请求跨页时HCA 推进V并重复页转换全部完成后返回访问结果。3.5 页面有效性与 ODP 缺页处理MKC 和 MTT 分别控制对象级与页面级的有效性层级有效条件无效条件MKCfree0MKey 对象可以进入访问检查和地址转换具体请求还需通过 variant、PD、范围和区域权限检查free1MKey 对象不能参与转换MTT当前操作所需的rd_en或wr_en已设置ptag提供可用的页面映射缺少所需的页面映射或权限ptag0本身不作为无效条件ODP MR 由注册时的IBV_ACCESS_ON_DEMAND标志确定MKC 中没有单独的 ODP 位硬件仍按 MTT 模式转换地址。对于支持 ODP 的操作无效 MTT 表项可以进入缺页处理非 ODP MR、操作不支持 ODP 或 MKC 检查失败时则报告访问错误或保护错误。缺页处理流程概括如下HCA 读取MTT[i]发现缺少当前操作所需的映射或权限。HCA 暂停当前操作并上报包含 MKey、地址和故障上下文的 Page Fault。驱动根据 MKey 找到 ODP MR检查故障地址和访问类型。驱动准备页面和 DMA 映射通过 UMR 写入ptag和权限位。驱动发送PAGE_FAULT_RESUME指示恢复成功或处理失败。成功时 HCA 恢复或重试访问请求失败时以访问或保护错误结束。4. 间接转换4.1 KLM 格式本节将 HCA 正在解析的 MKey 称为当前 MKey第一层当前 MKey 是请求携带的 lkey 或 rkey。KLM 项中的mkey和address分别称为下层 MKey和下层地址进入下一层后下层 MKey 成为新的当前 MKey。KLM 以长度、下层 MKey 和下层地址描述下层缓冲区。多个 KLM 顺序组成当前 MKey 的逻辑地址空间。下面展示单项格式和引用关系。OffsetBits完整字段名含义00h31:0byte_count当前 KLM 项描述的下层缓冲区长度不超过 2 GBFixed Buffer Size 模式保留04h31:0mkeyKLM 项引用的下层 MKey08h31:0address[63:32]下层起始地址高位0Ch31:0address[31:0]下层起始地址低位4.2 地址转换当前 MKey 可以只引用下层 MR 的一部分也可以组合多个下层缓冲区。一次 KLM 地址转换按以下步骤进行定位当前 MKC首层使用请求携带的lkey或rkey作为当前 MKeyHCA 取高 24 位mkey_index查找MKC[index]并用低 8 位 variant 校验对象。进入下层时对 KLM 项给出的下层 MKey 重复这一过程。找到 KLM 表当前 MKC 的access_mode选择 KLM 时HCA 通过 MKC 中的转换 handlemtt_handle定位该对象的 KLM 列表translations_octword_size给出列表的存储容量。计算 KLM 索引设本层输入地址为VSMKC.start_addrdV−S第j项长度为n[j]byte_count[j]前面各项的长度和为T[j]。普通 KLM 选择满足T[j]≤dT[j]n[j]的j因为 KLM 表把多个长度不一的内存段按表项顺序拼成一个连续的逻辑地址空间。所以必须先判断访问偏移属于哪一段。Fixed Buffer Size 模式下每项长度固定为B2^log_entity_size直接计算jfloor(d/B)段内偏移为d mod B。生成下层地址读取KLM[j]取下层 MKey 为mkey[j]下层地址为address[j]d−T[j]Fixed Buffer Size 模式使用address[j](d mod B)。请求跨越 KLM 项时剩余部分按后续项分别转换。选择下层转换使用下层 MKey 和下层地址定位并检查下层 MKC。若下层access_mode仍为 KLMFixed Buffer Size则继续逐级转换若为 MTT则通过下层 MKC 的mtt_handle读取 MTT按第 3.4 节取得最终 DMA 地址。其他模式按第 2.4 节处理。下图对应上述五步。每一级都需通过该级 MKC 的范围和权限检查下层 MKey、转换表和业务页面需在访问期间保持有效。间接层数超过设备限制时转换终止并报告错误。5. 生命周期5.1 创建与查询CREATE_MKEY创建 MKey 对象及其 MKC并按需为 MTTKLM 表项预留空间它可以建立有效的直接映射也可以预先建立free1的对象等待 UMR 注册。命令主要输入结果CREATE_MKEYMKC、表项容量与条目输入返回 Index建立对象DESTROY_MKEYIndex销毁对象撤销其后续有效引用QUERY_MKEYIndex返回对象信息用于查询和诊断5.2 UMR 更新User-Mode Memory RegistrationUMR通过 SQ WQE此时 General Control Segment 中的 OPCODE 取值为0x25修改 MKey 的转换关系和允许修改的上下文字段。硬件从 WQE 获取目标 MKey、UMR Control Segment、用于写入被选中字段的新 MKC 值以及本次要写入转换列表的 KLMMTTRepeated Block 表项启用签名功能时还可包含 BSF。这些转换表项与可选的 BSF 共同构成 UMR 的输入列表可以 inline 放在 WQE 内也可以通过 UMR Pointer 中的 MKey 和地址引用外部缓冲区该地址要求 2 KB 对齐。下图展示 UMR 描述符组成。UMR Control Segment 使用mkey_ctx_mask选择要改写的 MKC 字段使用translation_octword_actual_size指定本次提供的转换表项数据长度。未启用转换偏移时硬件从目标 MKey 转换列表的起始位置写入启用转换偏移时translation_offset指定列表内的写入起点。因此数据长度与可选偏移共同确定的是目标转换列表中本次被写入或替换的表项区间而不是 MR 的虚拟地址范围。OffsetBits完整字段名含义00h31inline_fieldIF1表示 KLMMTTRepeated Block 和 BSF 输入列表直接跟在 WQE 中0表示 WQE 携带 UMR Pointer由其中的 MKey 和地址定位外部输入缓冲区。没有转换列表和 BSF 输入时也设置为1。00h30:29check_freeCF在执行 UMR 前检查目标 MKC 当前的free状态0表示不以free作为前置条件1表示仅当free1时执行若目标对象当前free0则 UMR 失败2表示仅当free0时执行若目标对象当前free1则 UMR 失败。该字段只检查旧状态是否写入新的free值由mkey_ctx_mask[29]和 MKC 更新值决定。00h28translation_offset_enTOE1表示启用转换列表的局部更新并将TO[42:0]解释为目标转换列表内的写入偏移0表示从列表起始位置写入此时04h[15:0]用作 BSF 输入长度。04h31:16translation_octword_actual_sizeTOAS指定本次 UMR 提供的 KLMMTTRepeated Block 输入所占的长度单位为 16 B。硬件按该长度从 inline 数据或 UMR Pointer 指向的缓冲区读取并写入目标转换列表列表按 64 B 对齐软件可在末尾补齐。04h15:0bsf_octword_actual_size_or_translation_offset_15_0BAS / TO[15:0]TOE0时表示 BSF 输入所占的长度单位为 16 BTOE1时表示转换列表写入偏移的低 16 位与translation_offset_42_16组合成TO[42:0]实际字节偏移为TO × 16 B。08h–0Ch64 位mkey_ctx_mask每一位对应一个可更新的 MKC 字段。掩码位置位时硬件把 MKC 更新段中的对应新值写入目标 MKC未选中的字段保留原值。10h26:0translation_offset_42_16构成转换列表写入偏移TO[42:0]的高 27 位与04h[15:0]组合后以 16 B 为单位定位局部更新起点设备通过umr_extended_translation_offset能力声明对这些高位的支持。主要 mask 位包括长度length640、页大小1、起始地址6、variant13、QPN14、访问模式16、lr/lw/rr/rw/a17–21和 free29。PD 更新位为 7只能用于 REG_UMR 类型 QP 提交的 UMR。位被 mask 选中仍需满足硬件对该字段的更新限制。局部更新的偏移和长度按 64 B 对齐。硬件检查 Key、free 条件、SQ 的 PD、Type 2 MW 的 QPN、umr_en和预留容量然后更新允许的字段并报告完成。下层 MKey 的远端权限问题可以留到后续业务访问时报告。下图展示同一 SQ 上的更新与使用。UMR 自身的 Fence 类型由umr_fence能力规定随后使用新映射的 WQE 设置 Small Fence。软件不需要额外操作 HCA 的转换缓存来使同一对象的重复 UMR 更新生效。5.3 Key 失效5.3.1 本地失效本地失效Local Invalidate由本地 SQ 提交它将目标 MKey 转为 FREE 状态使后续请求无法再通过该 Key 访问内存。该操作只更新对象状态不加载新的转换表项当成功 CQE 生成时失效已经生效。失效后MKey 对象及其预留的转换表项空间仍然存在可供后续重新注册或绑定销毁则会释放 MKey 对象及其相关资源。5.3.2 远端失效Send with Invalidate 消息携带需要在接收端失效的完整 Key。接收端 HCA 处理该消息时使目标 MKey 失效并通过带有 Invalidate 信息的接收 CQE 向软件报告被处理的 Key。目标对象通过en_rinval1允许远端失效Shared MR 将该字段设置为0。远端失效只撤销消息中指定的接收端 MKey。若该 MKey 属于一个 MW失效该窗口不会改变底层 MR、同一内存上的其他 MKey 或其他窗口也不会释放底层共享页面。5.4 在途访问与复用映射更新涉及三类依赖已经开始的旧映射访问、等待提交的新映射访问以及其他队列或远端持有的引用。单一 SQ 的 Fence 只解决该 SQ 定义的顺序依赖跨队列引用需要明确的顺序保证。以下时序将停止引用、在途同步、失效和销毁分开。执行这条路径后再释放 DMA 映射与页面能够保持硬件对象有效期与实际存储有效期一致。5.5 销毁与内存释放释放顺序由引用关系决定先停止新增访问并协调远端处理在途工作随后失效或销毁设备内存对象确认相应设备访问已结束最后解除 DMA 映射并释放业务页面。涉及间接 MKey 或共享 MTT 时所有相关引用都需要纳入这个条件。DESTROY_MKEY销毁对象后继续使用该 Key 的请求不再获得有效访问。命令失败或设备仍可能访问页面时软件需保留页面和 DMA 映射直到通过设备恢复或其他可靠路径确认访问已经停止。6. 总结HCA 用完整 MKey 选择并验证上下文MKC 定义范围与保护属性MTT 和 KLM 定义映射关系。三者共同决定一个地址能否访问以及访问会落在哪个页面。MTT 按等大页计算索引非对齐起点要计入首个页内偏移KLM 按下层缓冲区组成地址空间间接层数、生命周期和适用权限沿引用关系共同约束访问。UMR 使地址映射可以通过工作队列更新。Fence、操作完成、失效和对象销毁分别解决执行依赖、状态生效、授权撤销和资源回收。只有把硬件对象、在途访问和页面有效期统一管理更新和释放才具有完整的接口语义。7. 参考资料Mellanox Adapters Programmer’s Reference ManualRev 0.53。
返回列表