ARTICLE DETAIL

资讯详情

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

5G NR测量GAP参数配置:从SMTC对齐到切换成功率提升

5G NR测量GAP参数配置:从SMTC对齐到切换成功率提升 周五晚上十点外场同事发来一张截图某小区切换成功率掉了8个点UE上报的RSRP明明很干净邻区就是测不到。抓了UE侧logRRC重配消息里MeasGapConfig那一行写着mglms3、mgrpms40、gapOffset11。问题就出在这三行参数上——测量GAP开得太短SMTC窗口根本塞不进去UE压根没有机会完成一次有效的SSB解调Measurement上报自然迟迟不触发。这篇东西想聊的是RRC层的测量GAPMeasurement Gap也就是网络通过RRC重配置给UE划出来的那段业务静默窗口。它不是协议里最抢眼的功能却直接决定了切换快不快、异频载波聚合能不能加上、双连接能不能建起来同时也悄悄吃掉了服务小区的吞吐。适合正在做参数规划、外场优化、或者被邻区测不到这类问题反复折磨的同行阅读如果你刚开始接触38.331/38.133这套信令也能从中间大致摸清GAP的来龙去脉。1. 单射频链的硬约束测量GAP为什么非有不可1.1 一部手机只有一套收发前端想理解GAP先别急着背参数先想清楚手机里的物理限制。绝大多数终端只有一套收发前端同一时刻只能调谐到一个中心频点、一个带宽上。服务小区在当前频点跑着业务UE的射频资源就被占满了它没办法一边收服务小区的PDSCH一边把接收机拧到另一个频点上去听邻区的SSB。这是硬约束不是软件优化能绕过去的。于是协议给了一条折中路线网络主动告诉UE从某个时刻起接下来这段时间你不用管服务小区去隔壁频点干活干完再回来。这段被让出来的时间就是测量GAP。GAP是网络侧通过RRC信令配的UE没有自主权它只能在被指定的窗口里做测量窗口之外老老实实待在服务小区。这个设计逻辑决定了GAP天然是个有成本的资源——它从服务小区的时间轴上硬切走一块。1.2 同频、异频、异系统三种测量对GAP的需求差异同样是做邻居测量需求差别很大。同频测量最省事邻区和本小区的中心频点一致如果SSB正好落在当前激活BWP的带宽范围内UE完全可以在收业务的间隙里顺便把SSB读掉不需要任何GAP。这也是为什么规范里给UE留了一个能力位让终端自己声明同频测量是否需要GAP。异频测量就不行了频点不同必须重新调谐几乎一定需要GAP。异系统测量比如NR测LTE更是如此不只是频点不同帧结构、参数集都不是一回事UE还要额外的滤波和同步时间。工程上我习惯这样分同频看能力和BWP配置异频看GAP异系统看GAP加测量时长上限。注意同频不需要GAP是有前提的SSB必须落在激活BWP内。一旦BWP被收窄到不含SSB的位置同频测量也会掉到需要GAP的范畴里。这个坑在BWP相关优化做完之后经常冒出来。1.3 GAP不是浪费而是有成本的窗口占空比算给你看GAP的代价可以直接量化。把MGL单次GAP长度除以MGRPGAP周期就是这段时间在服务小区时间轴上被切走的比例。用它衡量一次配置对吞吐的冲击比看任何描述都直观GAP patternMGLMGRP占空比典型用途06 ms40 ms15%异频测量最常用16 ms80 ms7.5%邻区少、可以慢一点23 ms40 ms7.5%需要短GAP的场景46 ms20 ms30%要求快速测量代价很高63 ms20 ms15%高频段短窗口56 ms160 ms3.75%低速移动、共覆盖场景101.5 ms20 ms7.5%FR2 短GAP121.5 ms80 ms1.875%FR2 低开销pattern编号与具体数值以38.133的gap pattern表为准各版本可能有增补配置前务必核对手上那版协议。看到pattern 4的30%可能会有疑问这真能给一个UE配上去确实可以而且某些需要极快测量的场景就该这么配。但要清楚这30%不是理论值是实打实从调度器手里拿走的资源。我曾经在一个单用户压测的环境里把pattern从1改成4下行峰值直接掉了接近两成——没丢包纯粹是没资源可发。所以GAP参数从来不是配上去能测就行而是测量速度和吞吐之间的一次显式取舍。2. measGapConfig拆字段从RRC信令到GAP的物理时刻2.1 一条简化的ASN.1先看清结构抛开细节measGapConfig的结构大致是这样的做了简化只保留和日常调参相关的部分MeasGapConfig :: SEQUENCE { gapFR1 SetupRelease { GapConfig } OPTIONAL, gapFR2 SetupRelease { GapConfig } OPTIONAL, gapUE SetupRelease { GapConfig } OPTIONAL } GapConfig :: SEQUENCE { gapOffset INTEGER (0..159), -- 相对于MGRP的偏移单位ms mgl ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6, ms7, ms10, ms20}, mgrp ENUMERATED {ms20, ms40, ms80, ms160}, mgta ENUMERATED {ms0, ms0dot25, ms0dot5} OPTIONAL, refServCellIndicator ENUMERATED {pCell, pSCell, mcg-FR2} OPTIONAL, refFR2ServCellAsyncCA ServCellIndex OPTIONAL }三个顶层字段是并行的三个入口gapFR1管FR1频段的测量gapFR2管FR2gapUE是全局的——一旦配了gapUEUE会用同一个窗口覆盖所有需要GAP的测量gapFR1和gapFR2在实现上就被忽略了。这个优先级关系在实际配置里非常关键后面会专门讲。2.2 gapOffset / MGRP / MGL 的算术关系与手算示例很多人配参数时只盯着MGL和MGRP把gapOffset当作一个随便填的数字其实它决定的是GAP落在时间轴上的具体位置而这个位置必须和邻区的SSB、SMTC窗口对齐。规则是把MGRP换算成无线帧数TMGRP除以10GAP从满足下面条件的子帧开始系统帧号 SFN mod T floor(gapOffset / 10)子帧号 gapOffset mod 10举个实际的手算例子。假设mgrpms40那么T4gapOffset11则floor(11/10)1子帧号1。也就是说GAP会出现在SFN1、5、9、13……这些帧的子帧1长度MGL如果MGL6ms就覆盖子帧1到子帧6。再看开头那个故障案例mgrpms40、gapOffset11本来是没问题的组合。真正的问题是MGL被压到了3ms。用脚本批量算一遍窗口位置会更省事def gap_windows(mgrp_ms, gap_offset_ms, mgl_ms, sfn_from0, sfn_to32): 返回 [ (SFN, 起始子帧, 起始ms, 结束ms), ... ] T mgrp_ms // 10 sfn_mod gap_offset_ms // 10 subframe gap_offset_ms % 10 wins [] for sfn in range(sfn_from, sfn_to): if sfn % T ! sfn_mod: continue start sfn * 10 subframe wins.append((sfn, subframe, start, start mgl_ms)) return wins for w in gap_windows(40, 11, 6): print(w) duty 6 / 40 print(占空比 %.2f%% % (duty * 100))把这个脚本跑一遍再和UE log里实际打出的GAP起止时刻对一下很多时候能立刻确认网络配的和UE实际用的是不是一回事。我在排查时遇到过网侧改了配置但UE没有及时重配成功的情况两边窗口对不上这种情况下任何参数分析都是白费劲。2.3 gapUE、gapFR1、gapFR2per-UE与per-FR的分水岭这是整个GAP配置里最容易被忽略、影响却最大的一组选择。per-UE的GAP意味着UE只有一套射频可以调谐一次只能去一个频点所有FR的测量只能排队共用同一个窗口。per-FR的GAP意味着UE具备按频段独立调谐的能力FR1在测异频的时候FR2上的业务照跑不误。在FR1FR2的双连接或者载波聚合场景里这个差别非常直观。如果UE其实支持per-FR你配了gapUE那FR2那条链路的吞吐会被莫名其妙地切掉——用户感觉就是5G高速链路时不时卡一下而且周期刚好等于MGRP。反过来如果UE能力只支持per-UE你偏要配gapFR1gapFR2UE只能自己选一个用行为和预期不一致。判断依据是UE上报的能力重点看needForGaps相关的字段它明确告诉网络哪些频点组合需要GAP、能不能独立调谐。工程做法是能力支持就优先per-FR能力不支持就老老实实per-UE别在信令里堆一堆UE用不上的配置。2.4 mgta与参考小区异步CA/DC下容易配漏的两个字段mgta是GAP定时提前量取值ms0、ms0dot25、ms0dot5。它的作用是把GAP窗口整体往前挪一点让UE的重调谐时间不挤压实际的测量时间。什么时候需要它典型场景是目标频点和当前服务小区的帧边界不对齐比如跨FR的异步载波聚合或者双连接。这时候如果不做提前量补偿UE的接收窗口就会和自己预期的SSB位置错开。配合mgta的还有两个参考小区字段。当两个FR的帧定时不一致时UE必须先知道这个GAP是以谁的定时为基准算出来的否则同一份gapOffset在两个FR上算出来的时刻完全不同。我的经验是凡是涉及异步配置的场景这两个字段不要凭直觉填一定要对照网络侧的同步状态和帧偏置数据确认配错了和没配的效果差不多都属于参数在但窗口不在点上。2.5 measGapSharingScheme多测量对象抢同一个GAP时怎么切预算当一个GAP要同时服务多个测量对象多个异频、多个异系统UE不可能在一个窗口里把所有频点都扫一遍它需要一个分配规则这就是measGapSharingScheme。协议里定义了scheme00到scheme11四档本质是给不同类别的测量分配不同比例的窗口预算scheme00偏向均分其余三档给出非对称的切分粒度为1/4、1/2、3/4这种量级。具体数值建议直接查38.133的gap sharing表格不要凭记忆填。我更想说的是它的使用逻辑如果你发现某类邻区的测量一直很慢、上报周期远低于预期而另一类邻区测得很勤八成是共享方案把预算压到了一边。这时候调整scheme比重新规划GAP pattern更划算因为改scheme不动占空比对吞吐的额外影响基本为零。这是一个性价比很高的优化手段可惜现场用得不多。3. 参数选型24种GAP pattern到底该怎么挑3.1 FR1与FR2的pattern分布规范里定义的gap pattern编号到了二十几个FR1常用的集中在前十档FR2则是一批更短的窗口。FR1的SSB突发在时域上比较铺得开所以MGL基本都是6ms这个量级FR2因为用的是120kHz参数集SSB候选位置的排布更紧凑1.5ms甚至更短的窗口就够覆盖一次完整的SSB突发这也是FR2能配出极低占空比的原因。选pattern的第一步永远是先确认工作在哪个频段。有人拿FR1的逻辑去理解FR2的短GAP看到1.5ms直接判定这么短肯定测不到其实恰恰相反——在FR2上配6ms的GAP才是浪费因为多出来的时间没有任何用途纯粹在切业务。3.2 3ms的GAP为什么能省时间又为什么可能更慢3ms的GAP看起来是省了一半时间的好事但它有个前提目标频点的一次SSB突发必须能被这3ms完整覆盖或者至少覆盖到UE完成一次可信解调所需的部分。如果实际需要的窗口比3ms长UE拿到的就只是半截信号测量结果的可信度下降网络会用更长的滤波时间、更多的样本才能得出一个可用的RSRP最终测量上报反而更慢。这就是开头那个案例的根因逻辑把MGL从6ms压到3ms表面上是省了7.5%的占空比实际上让每次测量都变成半次UE需要更多次GAP才能凑够一次可信测量测量时延拉长切换判决被推迟切换成功率自然就掉了。省下来的资源没换来性能还搭进了指标。3.3 用SMTC窗口倒推MGL下限与其凭经验猜MGL不如反过来算。SSB测量有时序配置SMTC里面明确给出了周期、偏移和窗口时长。UE要在GAP里完成一次有效测量前提是它需要的那段SMTC窗口落在这个GAP内。所以MGL的下限基本等于SMTC窗口时长再留一点重调谐的余量。我通常按这个顺序推先看邻频的SMTC窗口时长是多少再去pattern表里挑MGL不小于它的档位最后用MGRP去匹配要多快拿到测量结果。如果邻区的SMTC是5ms那么候选就只剩MGL≥5ms的几档3ms直接出局连讨论价值都没有。这个步骤写在优化文档里看着很基础但现场翻车的原因十有八九就是跳过了它。3.4 一张选型对照表下面这张表是我在项目里常用的起步参考实际还要结合UE能力和邻区数量微调场景建议MGL建议MGRP理由异频邻区多、需要快速切换6 ms40 ms15%占空比可接受测量机会充足异频邻区少、以省资源为先6 ms80 ms7.5%开销测量稍慢FR2短窗口测量1.5 ms 或 3.5 ms40~80 ms匹配紧凑的SSB排布高速移动、频繁切换6 ms20 ms30%开销换来最短测量时延FR1FR2双连接、UE支持per-FR按FR分别配按FR分别配避免一条链路拖累另一条提示pattern不是越快越好。频繁的GAP会让调度器持续面对空洞PRB利用率上不去用户感知的速率波动比切换晚几百毫秒带来的伤害更明显。取舍点在于你的场景更怕切换慢还是更怕速率抖。4. 那8个点是这么掉下去的一次完整排查链路4.1 第一步先确认是没测到还是没上报邻区测不到和测到了但没上报是两个完全不同的问题混在一起查会浪费大量时间。区分方法很直接看UE的测量结果指示有没有邻区的RSRP样本。如果是样本一直是无效值那就是没测到问题在GAP和SMTC的对齐上如果有样本但始终不满足上报条件问题在门限、迟滞、时间触发量这些上报配置上。这一步我在现场经常看到被跳过。有同事拿着切换成功率曲线直接去看GAP参数结果绕了一大圈才发现是A3门限配高了一个层级。先把问题归类再谈参数。4.2 第二步把SMTC窗口和GAP窗口叠在一起看确认是没测到之后最有效的手段是把两张时间轴画到一起按2.2的脚本算出GAP窗口序列再从测量配置里取出SMTC的周期、偏移和时长一段一段叠着看。那个失败案例叠出来是这样的SMTC窗口时长5msGAP窗口只有3ms窗口的前2ms稳稳地露在GAP外面。UE在这2ms里已经回到服务小区了等于每次测量都只拿到一部分SSB。而SMTC的周期和MGRP都是40ms位置是对齐的——参数看起来很工整唯一的问题就是MGL短了2ms。把MGL改成6ms同一个扇区的切换成功率第二天就回来了。4.3 第三步查UE的needForGaps能力别白送GAP这一步最容易被整个跳过。UE在能力上报里会明确说明哪些频点组合需要GAP很多终端对同频甚至部分异频组合都声明不需要GAP。如果网络侧搞一刀切所有UE都配上异频GAP那些本来不需要的终端就白白损失了7.5%到15%的调度机会。我在一个项目里做过对照同一批终端把按能力配置GAP和统一配置GAP两种策略各跑一段前者的平均下行速率能高出小几个百分点而测量相关指标没有明显差异。这部分收益是纯赚的代价只是配置逻辑要多一个能力判断分支。做网优的都清楚几个百分点的速率在考核口径里是什么分量。4.4 第四步查调度器有没有为GAP让路GAP是RRC配的但真正执行在GAP里不调度这个UE的是MAC调度器。理论上网络自己配的GAP自己最清楚可现实中存在两类问题一是多制式协同场景下配置方和调度方不在同一个节点上信息传递有延迟或遗漏二是配置更新后调度器侧的GAP状态没有同步刷新UE已经按新窗口走了调度器还在按旧窗口避让。判断方法很朴素抓一段UE的调度log看GAP窗口内是不是还有该UE的调度授权。有授权就是没让路属于网侧协同问题改参数没有意义。另外还要留意GAP窗口边沿的重调谐时间有些实现只在GAP内避让边沿那零点几毫秒不做保护会造成边沿附近的误码上升——这种问题在指标上表现为速率没掉多少但误块率上去了。4.5 归结成一张排查表现象优先怀疑确认手段处置方向邻区完全没有测量样本MGL小于SMTC窗口时间轴叠加比对提高MGL档位周期性速率掉坑周期等于MGRPGAP占空比过高用MGL/MGRP算占空比拉长MGRP或缩短MGL测量慢、上报延迟大pattern过于保守看测量上报时延分布缩短MGRP不需要GAP的终端也在测未按能力配置查能力上报增加能力判断GAP窗口内仍有调度网侧协同未同步调度log逐窗口核对修复协同或刷新状态双连接下另一条链路抖动用了per-UE而非per-FR查GAP配置类型与能力改用per-FR5. 同为GAP无线测量窗口与DG日志断点两种空洞的对照5.1 ADG里那个gap到底是什么做数据库运维的同事看到gap这个词第一反应往往不是无线测量而是Active Data Guard里那条红色的告警。这两个GAP共享同一个直觉都是本该连续的东西出现了断口。在ADG场景里主库持续产生归档日志备库通过日志传输和应用这些日志来保持同步当备库需要的某段日志序列号没有收到、或者收到了但没应用到位时主备之间的SCN推进就出现了断点这就是日志gap。它的表现形式很典型备库的传输延迟和应用延迟开始增长归档日志的序列号出现跳跃比如备库最后应用的是序列100而主库最新归档已经是序列115中间101到114这一段就是缺口。运维上一般先分清是传输环节卡住还是应用环节卡住这两个方向的处置完全不同——传输卡住是日志到不了应用卡住是日志到了但消化不掉。5.2 resolvable gap 与 unresolvable gap判定和处置日志gap最关键的判断是能不能自愈。备库发现缺口后会通过归档日志获取机制向主库或其他归档源请求缺失的序列。如果这些日志在主库的归档目录里还在或者在某个归档目的地、备份里能取到那这个gap就是可解析的系统通常能自动补齐运维侧看到的现象是曾经报过gap但延迟随后自己回落到正常不需要人工介入。反之就是不可解析的gap缺失的那几段日志在主库已经被清理掉了比如归档保留策略设置得过短、清理作业跑得太激进或者主库侧做过归档删除。这种情况下备库无论怎么请求都拿不到数据只能走从备份恢复并追平这条路代价大得多。所以判断方法很简单也很直接拿着gaps视图里的线程号和起止序列号去主库的归档视图里查这段序列还在不在、是否被标记为已删除一问便知。5.3 两套DG库并存时gap为什么更容易误判现场环境里经常不止一套库一个主库带两个备库一个同机房、一个异机房或者还有级联的转发结构。库多了之后gap告警的干扰信息也随之增加有三种情况特别常见。第一种是某个备库报gap另一个备库一切正常。这通常说明主库本身没丢日志问题出在这个备库的获取路径上比如它的日志获取源指向了另一个没有这段归档的备库或者网络链路、别名配置有问题。正确地抄近路是查配置、查链路而不是急着去主库补日志。第二种是两个备库都报gap但序列号区间不一致。这说明它们各自卡在了不同的位置不能用一个方案统一处理得分别定位。第三种最麻烦主库的归档清理策略是针对某个备库的应用进度设置的结果一个备库应用得慢等它需要日志时主库已经按另一个备库的进度把日志清掉了gap从可解析直接变成了不可解析。这种情况只能靠统一监控、按最慢的那个备库来设保留策略来避免。5.4 两类GAP共通的方法论把无线测量GAP和日志gap放在一起看会发现处理思路惊人地相似我在两边都吃过调试的亏总结下来就三条。第一先判断这个空洞是设计上的还是故障上的。无线侧GAP是刻意开的窗口带宽被切走是必然代价不能当成异常去修DG侧主备之间短暂的日志传输滞后也是常态只要延迟在阈值内、能被自动追平就不要制造无效告警。反过来MGL小于SMTC窗口、主库日志被误删这些才是真故障。第二一切从对齐入手。无线的核心是把GAP窗口和SMTC窗口对齐DG的核心是把备库需要的序列号区间和主库实际拥有的区间对齐。两边的排查都是先画出两条时间/序列轴再找交叉点。这个方法看着笨但比任何猜测都可靠。第三判断可自愈性决定要不要人介入。DG侧看日志是否还在归档源里无线侧看UE能否在给定窗口内完成一次可信测量。能自愈的加监控、调参数不能自愈的就别在参数上反复折腾直接从根源上补——一边是补日志或重建另一边是补窗口或改能力判断。6. 几个实测过的踩坑记录6.1 gapOffset配0撞上SSB突发边界gapOffset0听起来最干净但它把GAP窗口钉死在SFN整除周期的那个帧的起始子帧上。如果邻区的SSB突发位置恰好压在GAP的尾部边缘留给UE的有效解调时间就会被削掉一截测量成功率和窗口位置的关系会变得非常敏感。我遇到过同一批参数在不同扇区表现差异很大的情况最后发现就是各扇区的SSB偏移不同配0的那套参数只在部分扇区能对上。改法不复杂把gapOffset往SSB突发中心方向挪一点让窗口前后都留出余量。挪多少要看SMTC窗口位置原则是让SMTC窗口完整落在GAP的中段别贴着边。这个调整不动占空比纯赚成功率属于性价比最高的那类优化。6.2 per-UE gap把LTE侧一起拖下水在多制式协同的场景里早期有一批终端只支持per-UE的GAP网络的GAP配置是共用的。结果就是NR侧做异频测量时LTE侧的调度也被一起切走用户在用LTE承载的语音业务上感知到断续。这个问题从参数表面完全看不出来只能通过对照两边的调度空洞才能定位。处置方向有两条一是优先选用支持per-FR能力的终端二是在配置侧尽量缩短GAP的占空比把影响压到业务能容忍的程度。如果都不能满足就得重新评估这个场景下异频测量的必要性——有些测量其实可以延后或者放弃指标不一定非要靠GAP去换。6.3 GAP内穿插CSI/SRS掉点的不只是速率GAP期间UE不能收也不能发所以CSI测量和SRS发送都会被跳过。影响不只是下行速率上行信道估计样本变少闭环赋形的精度会下降高频段的波束跟踪如果依赖周期性的CSI参考信号GAP过于频繁时会直接影响波束的稳定性。这类问题在速率曲线上的表现很淡往往要等到掉话率或者上行误块率变化了才被发现。我的做法是在做GAP规划时顺带看一眼参考信号的周期配置如果CSI周期和GAP的占空比叠加后UE能拿到的有效样本已经稀到影响波束跟踪那就要重新权衡。这个检查项在很多优化模板里都没有属于要自己补上的一环。6.4 修改GAP配置后的验证动作改完参数一定要验证而且要验三件事不能只看一项。第一UE侧实际生效的GAP窗口和网侧配置是否一致这可以通过重配完成消息和UE log交叉确认避免改了没生效。第二测量上报的时延分布是否改善看的是P50和P90不能只看平均值因为切换失败往往来自尾部。第三服务小区的速率和PRB利用率是否出现可接受的下降把GAP占空比和实际资源损失对一下偏差过大就说明调度器的避让策略有问题。这三项里我最看重第二项。很多团队改完参数只盯着成功率的日粒度曲线等发现没效果时已经过去几天中间还叠加了其他改动根本没法归因。改成小时粒度、并且提前把基线数据抓下来是省时间的做法。最后说一点个人体会GAP这类参数最讨厌的地方在于它同时挂在接入性和保持性两套指标上调它就是在两者之间挪砝码。我在项目里逐渐形成一个习惯——先把UE能力、SMTC窗口、频段这三样东西列出来再决定GAP怎么配而不是拿一套现成参数到处复制。参数本身没有对错能不能和这个场景的目标对齐才是关键。
返回列表