文档章节

MTK平台 数据问题分析

HouWeiGui
 HouWeiGui
发布于 2017/02/09 17:20
字数 1042
阅读 79
收藏 0

一、Framework层的相关类

ConnectivityService

Dctracker

二、RILD的相关AT命令

AT+CGACT

三、modem侧的相关实现

Log实例:

一、确认数据连接的状态

  Line 3611: 05-09 10:34:15.554347 916 916 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]
    Line 3612: 05-09 10:34:15.554360 916 966 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]
    Line 3617: 05-09 10:34:15.554641 916 2080 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]
    Line 3618: 05-09 10:34:15.554695 916 1153 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]
    Line 3624: 05-09 10:34:15.557682 916 2080 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]
    Line 3636: 05-09 10:34:15.561940 916 1640 D ConnectivityService: getActiveNetworkInfo networkInfo = [type: MOBILE[EDGE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false, metered: true]

二、发包无返回会触发Android重连机制

这个机制的实现在/vendor/mediatek/proprietary/frameworks/opt/tedongle/src/java/com/android/internal/tedongle/dataconnection/DcTrackerBase.java

方法名字里会带recovery,

从log分析是因为trigger了recovery机制,一般为网络异常导致的.Recovery是android原生的feature,并非MTK feature,当前现象为正常的网络异常处理现象,

以下为详细log:
//进入第一个状态:GET_DATA_CALL_LIST, 原因是:在这1分钟内发送出去的数据包没有返回超过或达到10个包,这里是10个
//所以进入recovery机制,并发送EVENT_DO_RECOVERY. key log: doRecovery() get data call list
05-05 16:13:57.379044 1625 1625 D DCT : [0]updateDataStallInfo: OUT sent=10 mSentSinceLastRecv=10
05-05 16:13:57.392584 1625 1625 D DCT : [0]doRecovery() get data call list

//一分钟后并进入第二个状态:CLEANUP : reactivate pdp context(reason=PDP_RESET)此时会看到数据连接有短暂的断开,
//原因是:在这1分钟内发送出去的数据包没有返回超过或达到10个包,这里是31个
05-05 16:14:57.393972 1625 1625 D DCT : [0]updateDataStallInfo: OUT sent=31 mSentSinceLastRecv=31
05-05 16:14:57.417809 1625 1625 D DCT : [0]doRecovery() cleanup all connections
05-05 16:14:57.421114 1625 1625 D DCT : [0]cleanUpAllConnections: tearDown=true reason=pdpReset

三、dup ack

netlog可以看到16:09有出现重传,其时间达到300ms+,但为什么出现重传需要检查底层链接收发包是否正常。

11792    2017-07-05 16:09:05.405084    10.62.249.122    120.204.9.103    TCP    124    [TCP Retransmission] 59358→31196 [PSH, ACK] Seq=22025 Ack=52025 Win=3198 Len=56 TSval=1133316 TSecr=304277205
11812    2017-07-05 16:09:05.637603    120.204.9.103    10.62.249.122    TCP    124    31196→59358 [PSH, ACK] Seq=52025 Ack=22081 Win=65535 Len=56 TSval=304277521 TSecr=1133235
11816    2017-07-05 16:09:05.637741    10.62.249.122    120.204.9.103    TCP    68    59358→31196 [ACK] Seq=22081 Ack=52081 Win=3198 Len=0 TSval=1133374 TSecr=304277521
11822    2017-07-05 16:09:05.974715    120.204.9.103    10.62.249.122    TCP    124    [TCP Retransmission] 31196→59358 [PSH, ACK] Seq=52025 Ack=22081 Win=65535 Len=56 TSval=304277542 TSecr=1133235
11826    2017-07-05 16:09:05.974886    10.62.249.122    120.204.9.103    TCP    80    [TCP Dup ACK 11816#1] 59358→31196 [ACK] Seq=22081 Ack=52081 Win=3198 Len=0 TSval=1133458 TSecr=304277542 SLE=52025 SRE=52081
11831    2017-07-05 16:09:05.975844    120.204.9.103    10.62.249.122    TCP    80    [TCP Dup ACK 11812#1] 31196→59358 [ACK] Seq=52081 Ack=22081 Win=65535 Len=0 TSval=304277558 TSecr=1133235 SLE=22025 SRE=22081

四、dns返回慢

此问题从log来看,应该是dns server的问题,在16:57其dns query都要一分多钟才回,直到17:00:42才恢复正常
但是其它tcp连接没有问题,很快就会回包,所以手机没有问题,因为手机不会区分其tcp和dns query包的发送,主要原因在于dns server端。
请知悉,感谢!
//这里一分多才回response
86162    2017-07-07 16:57:45.716113    10.59.48.13    221.179.38.7    DNS    80    Standard query 0xa57c A apilocate.amap.com\
88023    2017-07-07 16:57:55.721451    10.59.48.13    221.179.38.7    DNS    80    Standard query 0xa57c A apilocate.amap.com
296843    2017-07-07 16:58:57.842842    221.179.38.7    10.59.48.13    DNS    244    Standard query response 0xa57c CNAME apilocate.amap.com.gds.alibabadns.com A 106.11.13.1
296844    2017-07-07 16:58:57.843125    10.59.48.13    221.179.38.7    ICMP    272    Destination unreachable (Port unreachable)
296910    2017-07-07 16:58:57.993855    221.179.38.7    10.59.48.13    DNS    244    Standard query response 0xa57c CNAME apilocate.amap.com.gds.alibabadns.com A 106.11.13.1
//17:00开始很快恢复正常
390717    2017-07-07 17:00:42.756815    10.59.48.13    120.196.165.7    DNS    79    Standard query 0x7b8a A s.click.tmall.com
390738    2017-07-07 17:00:42.830768    120.196.165.7    10.59.48.13    DNS    300    Standard query response 0x7b8a CNAME adsh.wagbridge.tmall.alimama.com CNAME adsh.wagbridge.tmall.alimama.com.gds.alibabadns.com A 140.205.140.52

1.main log中查看其getaddrinfo对应log的pid号
2.event log中确认其对应pid的packagename,从而确定其是哪个APP在发起dns query

© 著作权归作者所有

共有 人打赏支持
HouWeiGui
粉丝 3
博文 42
码字总数 52381
作品 0
深圳
程序员
私信 提问
广州口袋指媒信息科技有限公司招聘客户端开发以及运营人员

一.MTK应用软件开发工程师 职位要求: 1、大专以上学历,计算机、通信、电子工程、数学等相关专业毕业; 2、一年以上MTK平台应用开发经验,熟悉MTK架构及工作原理; 3、精通C/C++开发,熟悉M...

黄兜兜
2011/03/25
432
3
Nucleus OS

Nucleus 是一个操作系统的核心,与 Linux 和 Windows 不同,很容易理解和执行。它将拥有本地支持,小型架构和支持全VGA(没有文本模式)。多数山寨手机采用此操作系统。基于 Nucleus OS 的开...

匿名
2009/12/16
32.7K
0
上海大谷网,诚聘有梦想,有才能的人加入

MTK开发工程师程序员 职责: 1、负责MTK手机平台相关技术应用的研发。 2、负责公司MTK产品的需求分析;开发、维护、升级; 3、负责解决开发过程中的技术问题; 4、负责软件更改说明、功能特性...

ferly
2010/09/19
3.6K
5
【杭州】 有你更精彩-支付宝无线部门招聘

1. Java高级开发工程师 工作地点:杭州 职位描述: 1) 按产品需求进行进行软件设计和编码实现,确保安全、质量和性能; 2) 维护和升级现有软件产品,快速定位并修复现有软件缺陷。 职位要求:...

石乔
2011/11/22
1K
13
阿里巴巴北京/杭州无线部门招android、iphone、项目经理、无线架构师

阿里巴巴支付宝火爆招聘咯!北京、杭州都有职位看机会的朋友不要错过。 工程师级别p6以上,薪资12-25k。无线架构级别是p7以上,薪资18k+。项目经理薪资20k+,让简历来得疯狂点吧。come on,看...

Ken.yuan
2011/11/08
2.4K
4

没有更多内容

加载失败,请刷新页面

加载更多

eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
43分钟前
1
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
49分钟前
2
0
vue 组件间传值(个人精编)

1.父组件向子组件传值 1⃣️.子组件标签绑定需要传递的参数名2⃣️.子组件页面使用props 接收参数 2.子组件向父组件传值  1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参...

MrBoyce
59分钟前
1
0
(荷兰)彼得·冯·门施著:博物馆学研究的目的

博物馆学研究的目的 (荷)彼得·冯·门施 尽管诸多关于博物馆学认知目的的不同看法可以被归纳为数个主要群体,但没有一个群体可以被称为“学派”。一般来说,学派是由于博物馆学研究目的的不...

乔老哥
今天
3
0
Vue slot的用法

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来...

peakedness丶
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部