VxWorks:任务如何调度(一):典型案例

来源:互联网 发布:avmo.pw域名更新 编辑:程序博客网 时间:2024/05/16 06:03

定下心来,还是专心做技术吧~

年前必须完成!

先看典型案例(personal info del):

0.1 现象描述

XG8B 2PON口下挂AN5200_10B 和AN5200_07B ONU,升级系统并重启后单播和语音有严重丢包,查看ONU的上行带宽限速只有0.5M,重启线卡后现象消失。在其他测试中对ONU拔纤插纤操作也出现过同样的问题。

问题定位

(1) 首先在命令行中查看onu sla配置值,发现上行sla 配置只有0.5M, 配置显然未下发

(2) 然后打开sla配置开关,显示onusla配置已完成(FINISHED)

(3) 重置ONU sla配置标识为配置未完成(UNFINISHED),业务恢复;由此分析问题发生时,应用层未将sla配置下发到PON芯片,应用层保存的sla配置标识已为FINISHED。造成该问题有几种可能:

1) onu掉线后应用层保存的sla配置标识未改变(此时应变为UNFINISHED);

2) 应用层下发配置到PON芯片未成功,但返回成功导致配置变更为FINISHED;

3) 其他未注意的因素;

(4) 检查代码后确认所有ONU掉线的地方都会更新sla配置标识,可能1不可能出现;和PON驱动确认也不会出现可能2的情况;

(5) 试图重现问题时发现单盘重启后存在ONU掉注册重新注册的流程,分析代码发现近期在系统启动流程中增加了ponReopenAllPorts()调用,该调用会导致已经注册的ONU掉注册;

(6) 阅读应用层sla模块代码发现onu掉注册处理接口将该全局变量onusla配置标识置为UNFINISHED时,没有任何保护。也就是说,如果在配置sla配置标识为FINISHED前发生任务切换,sla配置标识可能被修改为UNFINISHED,任务切换回去后再接着配置为FINISHED

       Onu掉注册接口处理:

应用层下发sla配置到pon芯片处理流程,若在配置成功处发生任务切换应该就会出现测试发现问题:

(7) 分析系统中的任务:

Sla配置接口由onu 配置任务调用,onu配置任务优先级为80,onu授权模块初始化后该任务即开始运行,运行过程中轮询调用所有配置相关接口,包括sla配置接口。

Onu掉注册接口在事件处理任务接收到ID为7的事件时调用。事件处理任务优先级也为80,在系统初始化第二阶段启动。具体实现如下:

 

即事件处理任务维护一个消息队列,当事件处理任务接收到ONU掉注册消息时调用上述onu掉注册处理接口(onLinkDeRegEvent())。

事件处理任务和onu配置任务优先级相同,在shell下查看VxWorks操作系统全局变量roundRobinOn,值为0,表示当前系统中并没有开启时间片轮转模式,在相同优先级任务之间不会发生切换,除非onu配置任务等待资源就绪进入block状态。

(8) 继续分析代码,应用层sla配置接口在下发sla配置给PON芯片后不需要等待任何资源。

 

那么在哪里会出现资源等待呢?继续深入分析pon驱动代码,发现在底层接口ponSetLinkSLA()配置下行sla时需要semTake,而g_olt_list信号量在系统很多地方都会使用,这里很大概率需要等待信号量。

 

 

(9) 结合测试问题分析,当应用层配置完上行slaonu掉注册,pon芯片配置清空,onu sla配置标识置为UNFINISHED,接着继续配置下行sla,配置完成后,sla配置标识置为FINISHEDonu配置任务下次轮询时发现sla 配置为FINISHED,不会再次下发sla配置至PON芯片,因此pon芯片上行sla配置依然为清空后的配置。



0 0
原创粉丝点击