CN115421997A - 一种上报方法、处理器、终端设备及计算机可读存储介质 - Google Patents
一种上报方法、处理器、终端设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115421997A CN115421997A CN202210960702.9A CN202210960702A CN115421997A CN 115421997 A CN115421997 A CN 115421997A CN 202210960702 A CN202210960702 A CN 202210960702A CN 115421997 A CN115421997 A CN 115421997A
- Authority
- CN
- China
- Prior art keywords
- processor
- buried point
- target
- point data
- target buried
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种上报方法,该方法应用于终端设备的第一处理器的操作系统的内核层中,终端设备还包括第二处理器,包括:接收来自第二处理器的通知消息;其中,通知消息用于通知第二处理器上存在目标埋点数据,向第二处理器发送目标埋点数据的获取消息,接收来自第二处理器发送的目标埋点数据,将目标埋点数据上报至操作系统的系统层。本申请实施例还同时提供了一种处理器、终端设备及计算机可读存储介质。
Description
技术领域
本申请涉及充电中的埋点回传技术,尤其涉及一种上报方法、处理器、终端设备及计算可读存储介质。
背景技术
目前,对于有高级数字信号处理器(Advanced Digital Signal Processor,ADSP)的充电方案,针对目前的埋点机制,要监控ADSP的软件行为,是需要在KERNEL采用轮询的方式去实现,比如,在KERNEL中定期的通过GLINK去访问ADSP某个寄存器或者某个变量,然而采用轮询的方式,并不能实时地保存ADSP发生问题要记录的现场信息,对于实时性要求高的埋点行为并不适用;由此可以看出,现有的埋点机制并不能够实时监控其他系统的行为。
发明内容
本申请实施例提供一种上报方法、处理器、终端设备及计算机可读存储介质,能够实时监控其他系统的行为。
本申请的技术方案是这样实现的:
本申请实施例提供一种上报方法,所述方法应用于终端设备的第一处理器的操作系统的内核层中,其中,所述终端设备还包括第二处理器,包括:
接收来自第二处理器的通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
向所述第二处理器发送所述目标埋点数据的获取消息;
接收来自所述第二处理器发送的所述目标埋点数据;
将所述目标埋点数据上报至所述操作系统的系统层。
本申请实施例提供一种上报方法,所述方法应用于终端设备的第二处理器中,其中,所述终端设备还包括第一处理器,所述第一处理器的操作系统包括内核层和系统层,包括:
当存在目标埋点数据时,向所述内核层发送通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
接收来自所述内核层发送的所述目标埋点数据的获取消息;
向所述内核层发送所述目标埋点数据,以使得所述内核层将所述目标埋点数据上报至所述系统层。
本申请实施例提供一种第一处理器,所述第一处理器设置于终端设备中,所述终端设备的第一处理器的操作系统包括内核层和系统层,所述终端设备还包括第二处理器,所述内核层包括:
第一接收模块,用于接收来自第二处理器的通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
第一发送模块,用于向所述第二处理器发送所述目标埋点数据的获取消息;
第二接收模块,用于接收来自所述第二处理器发送的所述目标埋点数据;
上报模块,用于将所述目标埋点数据上报至所述操作系统的系统层。
本申请实施例提供一种第二处理器,所述第二处理器设置于终端设备的中,所述终端设备还包括第一处理器,所述第一处理器的操作系统包括内核层和系统层,包括:
第二发送模块,用于当存在目标埋点数据时,向所述内核层发送通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
第三接收模块,用于接收来自所述内核层发送的所述目标埋点数据的获取消息;
第三发送模块,用于向所述内核层发送所述目标埋点数据,以使得所述内核层将所述目标埋点数据上报至所述系统层。
本申请实施例提供一种第一处理器,所述第一处理器的操作系统的内核层用于从所述终端设备的存储器中调用并运行计算机程序,使得安装有所述第一处理器的设备执行如权利要求1至6中任一项所述的上报方法。
本申请实施例提供一种第二处理器,用于从所述终端设备的存储器中调用并运行计算机程序,使得安装有所述第二处理器的设备执行如权利要求7至12中任一项所述的上报方法。
本申请实施例提供一种终端设备,包括如上述一个或多个实施例所述的第一处理器和如上述一个或多个实施例所述的第二处理器;其中,所述第一处理器和所述第二处理器之间通过总线相连接。
本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序使得计算机执行如上述一个或多个实施例所述上报方法的步骤。
本申请实施例提供了一种上报方法、处理器、终端设备及计算机可读存储介质,该方法应用于终端设备的第一处理器的操作系统的内核层中,其中,终端设备还包括第二处理器,包括:接收来自第二处理器的通知消息,其中,通知消息用于通知第二处理器上存在目标埋点数据,向第二处理器发送目标埋点数据的获取消息,接收来自第二处理器发送的目标埋点数据,将目标埋点数据上报至操作系统的系统层;也就是说,在本申请实施例中,内核层通过接收到来自第二处理器的通知消息来通知内核层第二处理器上存在目标埋点数据,内核层通过向第二处理器发送目标埋点数据的获取消息,接收到来自第二处理器的目标埋点数据,并上报至系统层,如此,只要第二处理器上存在目标埋点数据就可以通知内核层来获取目标埋点数据,采用这种通知消息和获取消息的方式,使得第二处理器可以将获取到的目标埋点数据实时地上报至内核层,从而使得内核层能够实时获取到目标埋点数据,进而实现了对第二处理器的行为监控。
附图说明
图1为本申请实施例提供的一种可选的终端设备的结构示意图;
图2为本申请实施例提供的一种可选的上报方法的流程交互示意图;
图3为本申请实施例提供的一种可选的上报方法的实例一的流程交互示意图;
图4为本申请实施例提供的一种可选的上报方法的实例二的流程交互示意图;
图5为本申请实施例提供的一种可选的上报方法的流程示意图;
图6为本申请实施例提供的另一种可选的上报方法的流程示意图;
图7为本申请实施例提供的一种可选的第一处理器的结构示意图;
图8为本申请实施例提供的一种可选的第二处理器的结构示意图;
图9为本申请实施例提供的另一种可选的第一处理器的结构示意图;
图10为本申请实施例提供的另一种可选的第二处理器的结构示意图;
图11为本申请实施例提供的另一种可选的终端设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
本申请实施例提供了一种上报方法,该方法应用于终端设备中,图1为本申请实施例提供的一种可选的终端设备的结构示意图,如图1所示,该终端设备100可以包括:第一处理器11和第二处理器12;其中,第一处理器11的操作系统包括内核层111和系统层112;其中,
第一处理器11的内核层111与第二处理器12之间具有通信连接,第二处理器12用于在生成埋点数据之后,将埋点数据上报至内核层111,内核层111再将埋点数据上报至系统层112,其中,第一处理器11可以为终端设备的中央处理器(Central Processing Unit,CPU)或者应用处理器(Application Processor,AP),第二处理器可以为终端设备的ADSP,还可以为其他处理器,埋点数据可以为终端设备在充电过程中的埋点事件,还可以为其他软件行为,这里,本申请实施例不限于此。
基于上述图1提供的终端设备,图2为本申请实施例提供的一种可选的上报方法的流程交互示意图,如图2所示,该上报方法可以包括:
S201:当第二处理器12存在目标埋点数据时,第二处理器12向内核层111发送通知消息;
目前,采用轮询的方式,并不能实时地保存ADSP发生问题要记录的现场信息,为了能够实时地保存其他系统的现场信息,本申请实施例中,当第二处理器12存在埋点数据时,第二处理器12向内核111层发送通知消息,其中,通知消息用于通知第二处理器12上存在目标埋点数据;这样,使得内核层111知晓第二处理器12上有目标埋点数据生成并需要上报,进而使得内核层111可以主动去从第二处理器12获取目标埋点数据并上报至系统层112。
针对第二处理器12来说,需要监控埋点事件进而生成目标埋点数据才可以确定存在目标埋点数据,在一种可选的实施例中,S201可以包括:
当第二处理器12发生目标埋点事件时,第二处理器12记录目标埋点事件对应的现场信息,并将目标埋点事件对应的现场信息存储至第二处理器12的内存中;
第二处理器12利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据;
第二处理器12将目标埋点数据存放至,内核层111和第二处理器12的共享内存中,向内核层111发送通知消息。
可以理解地,当第二处理器12发生目标埋点事件时,需要记录目标埋点事件对应的现场信息,针对充电过程来说,该现场信息为充电过程中发生异常事件时充电相关的信息,并向第二处理器12的内存中申请内存空间,用于存储目标埋点事件对应的现场信息。
由于每个埋点事件都对一个类型,所以这里确定目标埋点事件的类型,即为目标类型,然后将目标类型和目标埋点事件的现场信息,作为目标埋点数据,在得到目标埋点数据之后,为了使得内核层111能够获取到目标埋点数据,需要将目标埋点数据存放至内核层111和第二处理器12的共享内存中,如此,便可以确定第二处理器12中存在目标埋点数据,向内核层111发送通知消息。
其中,第二处理器12可以通过GLINK协议发送通知消息至内核层111,当然,也可以利用其它协议来实现第二处理器12与内核层111的通信,这里,本申请实施例对此不作具体限定。
进一步地,为了提高埋点事件的上报效率,在一种可选的实施例中,当第二处理器12发生目标埋点事件时,记录目标埋点事件对应的现场信息,并将目标埋点事件对应的现场信息存储至第二处理器12的内存中,包括:
当第二处理器12发生目标埋点事件时,获取目标埋点事件对应的现场信息,并确定预设时间段内目标类型的目标埋点事件的累积上报个数N;其中,N的初始值为0;
当N等于预设阈值时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且存在与目标类型相同的目标埋点事件的埋点数据待上报时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且不存在与目标类型相同的目标埋点事件的埋点数据待上报时,将目标埋点事件对应的现场信息存储至第二处理器12的内存中,将N自动加1。
也就是说,当第二处理器12确定发生目标埋点事件且记录目标埋点事件对应的现场信息时,还需要确定预设时间段内目标类型的目标埋点事件的累积上报个数N,即在预设时间段内已经累积上报了N个目标类型的目标埋点事件时,需要进一步判断N与预设阈值之间的关系,当N等于预设阈值时,说明已经上报了预设阈值个目标埋点数据,那么,该类型的目标埋点数据不再上报了,所以,丢弃目标埋点数据对应的现场信息。
当N小于预设阈值时,需要进一步判断是否存在与目标类型相同的目标埋点数据待上报,若存在,为了防止相同类型的埋点数据在相近的时间内重复上报,这里,丢弃目标埋点事件对应的现场信息,若不存在,则将目标埋点事件对应的现场信息存储至第二处理器12的内存中,以用于形成目标埋点数据,并将累计上报个数自动加1。
其中,上述预设时间段可以通过在第二处理器12中设置定时器来实现,预设时间段可以根据需要自行设置,例如可以为1天,还可以为2天,这里,本申请实施例对此不作具体限定。
这里,需要说明的是,当将目标埋点时间对应的现场信息存储至第二处理器12的内存中,并将N自动加1后,此时通知第二处理器12的埋点监控线程目标类型的目标埋点事件需要上报目标埋点数据,如此,来形成目标埋点数据,并通过与内核层111的交互来使得内核层111获取到目标埋点数据并上报至系统层112。
S202:内核层111向第二处理器12发送目标埋点数据的获取消息;
S203:第二处理器12向内核层111发送目标埋点数据;
这里,内核层111在接收到通知消息之后,知晓第二处理器12上存在目标埋点数据,为了实时地获取到目标埋点数据,内核层111向第二处理器12发送目标埋点数据的获取消息,这里,还可以通过GLINK协议来发送目标埋点数据的获取消息,以使得第二处理器12在接收到目标埋点数据的获取消息之后,向内核层111发送目标埋点数据,以使得内核层111能够及时获取到目标埋点数据。
为了防止埋点事件的丢失或者第二处理器12的卡顿,在一种可选的实施例中,在S203之后,该方法还可以包括:
当内核层111在预设时长内获取到目标埋点数据,或者,内核层111超过预设时长未获取到目标埋点数据时,且目标埋点事件对应的现场信息从第二处理器12的内存中未释放时,第二处理器12释放第二处理器12的内存中目标埋点事件对应的现场信息。
可以理解地,在将目标埋点数据上报至内核层111以后,需要判断内核层111是否在预设时长获取到目标埋点事件,其中,这里,第二处理器12可以通过设置定时器来判断内核层111是否在预设时长内获取到目标埋点数据,需要说明的是,当内核层111在预设时长内获取到的目标埋点数据,就关闭该定时器。
当内核层111在预设时长内获取到目标埋点数据,或者,内核层111超过预设时长未获取到目标埋点数据时,需要进一步判断目标埋点事件对应的现场信息是否从第二处理器12的内存中释放掉,若未释放掉,第二处理器12将释放该内存中存放的目标埋点事件对应的现场信息,然后将目标埋点事件的目标类型的标识置为第一预设值,若释放掉,直接将目标埋点事件的目标类型的标识置为第一预设值,例如,针对事件A来说,将事件A的标识置为0,第一预设值指示目标埋点事件对应的目标埋点数据已经上报。
为了将同时发生的多种类型的埋点事件均上报至内核层111,在一种可选的实施例中,在释放第二处理器12的内存中所述目标埋点事件对应的现场信息之后,该方法还包括:
当预设类型的埋点事件的标识还指示发生目标类型的目标埋点事件时,返回执行利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据。
在释放完成第二处理器12的内存中存储的目标埋点数据之后,还需要判断预设类型的埋点事件的标识是否指示发生目标类型的目标埋点事件,这里,需要说明的是,该目标类型除了包括事件A,还可以包括其他类型,例如,事件D,事件E,事件F,在将事件A的埋点数据放入共享内存中之后,当还存在事件D时,返回执行利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据;如此,针对同时发生多种类型的事件,能够将全部满足条件的埋点事件形成目标埋点数据,最终上报至内核层111。
S204:内核层111将目标埋点数据上报至系统层112。
当内核层111获取到目标埋点数据之后,内核层111将目标埋点数据上报至系统层112,以供调用查看。
进一步地,为了提高目标埋点数据上报的有效性,在一种可选的实施例中,该方法还包括:
在内核层111向第二处理器12发送目标埋点数据的获取消息后的预设时长内,接收到来自第二处理器12发送的目标埋点数据时,内核层111根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层112;
当内核层111向第二处理器12发送目标埋点数据的获取消息后的预设时长内,未接收到来自第二处理器12发送的目标埋点数据时,内核层111结束目标埋点数据的上报。
可以理解地,内核层111中可以设定一个定时器,若定时器指示在内核层111向第二处理器12发送目标埋点数据的获取消息后的预设时长内接收到来自第二处理器12的目标埋点数据,也就是说,定时器在内核层111向第二处理器12发送目标埋点数据的获取消息之后开始计时,在预设时长内接收到目标埋点数据时,内核层111会根据目标埋点数据的数据长度来确定是否将目标埋点数据上报至系统层112。
通过定时器计时,若在预设时长内未接收到目标埋点数据时,内核层111不上报将目标埋点数据;如此,将超时的目标埋点数据不上报,直接将上报权限交给下一个目标埋点数据,防止长时间的等待使得目标埋点数据无法实时上报。
为了确定出是否将目标埋点数据上报至系统层112,在一种可选的实施例中,内核层111根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层112,包括:
当目标埋点数据的数据长度为预设长度时,内核层111将目标埋点数据发送至系统层112;
当目标埋点数据的数据长度不为预设长度时,内核层111丢弃目标埋点数据。
这里,内核层111需要判断目标埋点数据的数据长度与预设长度之间的关系,当目标埋点数据的数据长度等于预设长度时,内核层111才将目标埋点数据发送至系统层112,当目标埋点数据的数据长度不等于预设长度时,内核层111不将目标埋点数据发送至系统层112,即不上报该目标埋点数据。
如此,通过数据长度来筛选出哪些合法,哪些不合法,将合法的目标埋点数据上报,将不合法的目标埋点数据不上报,从而提高了上报的目标埋点数据的有效性。
为了实现将目标埋点数据的上报至系统层112,在一种可选的实施例中,内核层111将目标埋点数据上报至系统层112,包括:
将目标埋点数据放入内核层111的缓冲队列中;
通过缓冲队列将目标埋点数据上报至系统层112。
这里,将目标埋点数据放入内核层111的缓冲队列中,利用缓冲队列的形式一个一个的将缓冲队列中的目标埋点数据上报至系统层112。
为了实现通过缓冲队列上报目标埋点数据,在一种可选的实施例中,内核层111通过缓冲队列将目标埋点数据上报至系统层112,包括:
当缓冲队列中存在预设数目的目标埋点数据时,从缓冲队列中获取一条当前目标埋点数据;
当当前目标埋点数据的类型为预设类型时,将当前目标埋点数据中的现场信息上报至系统层111;
当当前目标埋点数据的类型不为预设类型时,丢弃当前目标埋点数据,返回执行从缓冲队列中获取一条当前目标埋点数据。
可以理解地,当缓冲队列中的目标埋点数据达到预设数目时,从缓冲队列中获取一条当前目标埋点数据,然后判断目标埋点数据的类型是否为预设类型,若为预设类型,说明该目标埋点数据合法,若不为预设类型,说明该目标埋点数据不合法,将合法的目标埋点数据上报至系统层112,将不合法的目标埋点数据丢弃,然后重新从缓冲队列中获取一条当前目标埋点数据来确定是否上报。
这样,通过缓冲队列来上报系统层112,可以选取合适的时间段来上报目标埋点数据,防止与其他数据同时占用通道导致数据丢失的问题,另外,上述预设数目可以为缓冲队列中可以存放的目标埋点数据的个数,也可以为小于缓冲队列中可以存放的目标埋点数据的个数的一个值,这里,本申请实施例对此不作具体限定。
由于埋点事件均为第二处理器12发生异常时所发生的,也就是说,在正常情况下很难触发,为了验证埋点上报这一通路是否可靠,在一种可选的实施例中,上述方法还包括:
内核层111向第二处理器12发送设置消息;
当设置值为预设的设置值时,第二处理器12将调试变量设置为设置值;
内核层111向第二处理器12发送调试变量的获取消息;
第二处理器12根据调试变量的获取消息,获取调试变量的获取值,将获取值发送至内核层;
当获取值为设置值时,内核层111确定第二处理器12至内核层111调试成功。
可以理解地,这里,内核层111向第二处理器12发送设置消息,其中,设置消息用于第二处理器12将调试变量设置为设置消息中携带的设置值;这样,使得第二处理器12在确定设置值为合法的,即设置值为预设的设置值时,将调试变量设置为设置值,然后内核层111通过向第二处理器12发送调试变量的获取消息来获取调试变量的获取值,并将获取值发送至内核层111,使得内核层111得到获取值。
其中,内核层判111断设置值是否等于获取值,若相等,内核层111确定第二处理器12至内核层111的通路调试成功,若不相等,内核层111确定第二处理器12至内核层111的通路调试失败。
如此,通过上述设置于获取的方式可以确定第二处理器12至内核层111的通路是否调试成功,起到验证的作用。
下面举实例来对上述一个或多个实施例中的上报方法进行描述。
下面在图3和图4中,以第一处理器为AP,AP的操作系统为android,android包括KERNEL和系统层,第二处理器为ADSP为例,针对ADSP的充电过程来对上述上报方法进行说明。
图3为本申请实施例提供的一种可选的上报方法的实例一的流程交互示意图,如图3所示,在手机开机阶段(图3中的开始)KERNEL初始化的时会创建ADSP监控数据上报线程,该线程主要的作用是时刻监控KERNEL中用于存放ADSP埋点数据的队列(ADSP_FIFO)是否为空,如果ADSP_FIFO为空,表示ADSP没有埋点数据上传,线程被阻塞住,如果不为空,则表示ADSP有埋点数据到ADSP_FIFO中,就需要利用该线程从ADSP_FIFO中取出一个数据,即去将ADSP_FIFO中的数据一个个取出来然后上报。
注意,这里之所以要使用队列来缓存下埋点数据,是因为KERNEL中上传埋点数据到android的系统层,所有的模块用的是同一个通道(比如tp或者sensor,他们也是使用同一个通道上传数据到系统层),这就存在通道复用的问题,比如tp或者sensor模块也在反复的触发埋点,那分配给充电模块的通道时间就相对较小,那么此时充电的ADSP模块也在反复触发埋点,KERNEL接收到ADSP埋点数据不能及时上传到系统层,那么ADSP模块的上传的埋点机制就会被阻塞,为了解决这种多模块多系统并发埋点的情况,这里在KERNEL中会设置一个缓冲队列,目前大小设置为10条,也就是其能缓存10条埋点数据,然后等埋点系统不是那么繁忙的时候,依序将缓冲队列中的埋点数据取出来然后上传至系统层。
其中,一条埋点数据的数据格式是如下所示:
Adsp_type_reason:xxx
Adsp_flag_reason:xxx
Crux_info:xxx
当从ADSP_FIFO中取出一条埋点数据时,首先会检查adsp_type_reason和adsp_flag_reason是否合法性,即是否为预定义值,其中,这两个信息表示是触发了哪一类的埋点(比如电量计异常的埋点),即埋点类型,crux_info的信息为埋点触发的现场保存信息(比如电量计的异常时各个寄存器信息),即现场信息。当不合法时,即adsp_type_reason和adsp_flag_reason信息不为预定义值,就会丢弃这条埋点数据,继而从ADSP_FIFO中去取下一条埋点数据来进行解析;当合法时,即adsp_type_reason和adsp_flag_reason信息为预定义值,则会获取适配器相关的信息,即添加当前充电器的相关信息(例如,充电类型\充电温度\充电电流\充电电压\电池电量信息),然后调用上报埋点通道机制上传埋点数据。
当ADSP的软件记录到有埋点数据要上传时,ADSP通过GLINK协议通知KERNEL表示有埋点数据要上传,然后,KERNEL调用采集ADSP埋点数据的线程,去收集ADSP的埋点数据,其中,发送给ADSP的GLINK的消息类型为ADSP_TRACK_TYPE,将该消息结构体通过GLINK协议发送给ADSP,这样,当ADSP收到该消息时,就会取ADSP的埋点数据并更新到KERNEL和ADSP交互的共享内存中,再回传给KERNEL。
KERNEL通过GLINK协议将该消息发送给ADSP后,会启动一个2s的定时器,该定时器定义为允许ADSP返回数据的最大等待时间是2s,判断ADSP在2s内回复是否超时?如果超时,KERNEL就会默认这次埋点数据的获取失败,报错结束,将所有权让给下一次埋点数据的收集而不会无限制在这里等待。如果未超时,首先就会检查ADSP回复的数据长度是否合法(埋点数据所占用的内存都是固定大小的),如果不合法也就是长度非法,报错结束,该条埋点数据会被丢弃,如果长度也是正常的,即合法,那么其就入缓冲队列,也就是将埋点数据存入ADSP_FIFO中,此时需要唤醒ADSP监控数据上报线程,一唤醒其就会去取ADSP_FIFO中的数据并将其上传系统层。
另外,因为ADSP中所埋的点基本都是软件异常时的埋点信息,正常情况下很难被触发,因此需要使用debugfs调试手段进行手动模拟触发,其在KERNEL加载埋点驱动时会创建ADSP的debugfs调试系统,其关键的操作是有set属性和get属性了,通过set adsp_debug节点文件去模拟设置ADSP埋点数据,其中,set是通过GLINK协议将AP的set值传递给ADSP,并替换ADSP_debug的值,同样,通过get adsp_debug节点文件获取目标ADSP中debug类型是哪种,其中,get就是看下目前ADSP子系统中模拟调试值当前被设置成多少了,当被设置到ADSP中时,在ADSP中会判断KERNEL设置的ADSP_debug是否非法(类型是否是目前已经定义的,不在定义范围内判读为非法),KERNEL来获取ADSP_debug属性会将ADSP_debug的属性值返回给KERNEL(默认值是0,表示KERNEL从没有设置过ADSP_debug)。
图4为本申请实施例提供的一种可选的上报方法的实例二的流程交互示意图,如图4所示,针对ADSP中部分:
开始之后,在ADSP子系统被加载进手机内存中运行,其会创建ADSP埋点监控线程,其作用是为了接收事件发生的通知,然后去处理对应的事件;会初始化KERNEL没有及时来取埋点数据的timeout的定时器;当没有event事件发生时,该线程会被阻塞住等待,如果有事件发生时,就会去判断具体是哪个事件被触发了(目前线程能监控一个64bit变量,也就能监控64种事件的发生,当不同的事件发生时,该事件对应的bit就会设置成1,然后在线程处理中就会对应去检查每一个bit看到底是哪个事件触发);这里,要将事件分为三种类型:一种是KERNEL在规定时间(例如,2s内)及时来取埋点数据的ACK事件B;一种是KERNEL在2s内没及时来取埋点数据造成通信超时的timeout事件C;还有一类是真实埋点触发事件A。
其中,针对每一个真实埋点触发事件,例如,事件A,在通知具体埋点事件A触发,将upload_events中的事件A的bit设置为1,然后判断upload_events的值是否为0,同时判断uploading是否等于true,当均为否是,需要判断upload_events中的哪个bit被设置成1,判断upload_events中的事件A的bit是否置为1,若为是,将Uploading_event置为A,将Uploading置为true,确定Adsp_type_reason=A事件触发type类型,确定Adsp_flag_reason=A事件触发的reason类型,拷贝A事件敏感内存信息到KERNEL和ADSP信息交互的共享内存中,从而形成事件A的埋点数据,然后继续判断upload_events中的事件D的bit是否置为1,与事件A类似,这里不再赘述;在得到所有事件的埋点数据之后,ADSP通过GLINK协议通知AP来取共享内存的埋点数据,开启KERNEL来取ADSP埋点数据的timeout的定时器,使得KERNEL来取事件A的埋点数据。
当事件A对应的埋点数据上传之后,ADSP都要判断该埋点数据是否在规定时间内被KERNEL获取,若为是,生成事件B,若为否,生成事件C。
对于KERNEL在2s内及时来取数据的ACK事件B:其会取消之前通知KERNEL来取数据时设置的timeout的定时器,表明在2s内收到埋点数据其没有通信超时,然后会判断uploading的值是否等于true,正常肯定是等于true的,因为确实在上传埋点数据,并且KERNEL来取ADSP的埋点数据也是成功(如果uploading等于false,表明异常了,错误状态应该结束,就会不往下走了),然后会判断本次完成的是哪种类型埋点数据,即当前上传给KERNEL的是哪个埋点事件(即哪种类型的埋点触发),变量uploading_event=xxx就表示当前已完成xxx事件的埋点数据的上传,然后判断埋点事件xxx的存储敏感信息的内存是否释放(主要看内存指针是否为空),例如,xxx可以为A,即将埋点事件A申请的敏感信息内存是否释放,如果没有释放,就需要进行内存释放,即释放事件A敏感信息占用的内存,之所以需要这样的动作,因为埋点数据一般比较多,比如,1024BYTE,那么,当要记录的埋点事件种类比较多时,分配给每个事件的存储敏感信息的内存就不能常驻,所以,在要记录的埋点事件的时候去申请内存,然后将敏感信息打包到该内存中,等待这些敏感信息用完(也即埋点数据已通过共享内存方式传给AP的KERNEL时),就需要释放这些内存,针对这种低概率埋点触发是很有必要这样做的,能够节约内存资源。
在释放完成事件A的敏感信息的内存之后,标记事件A发生的upload_events变量中的表征A触发的bit也会清0,upload_event是long long类型的数据,其数据长度共有64个bit(1个bit是0或者1),比如,代表事件A发生的upload_event对应的bit是1,那么,当事件A的埋点数据上传给KERNEL后,upload的bit会复位成0;最后,A_uploading会被设置成false,比如,A_uploading等于false,这个标记的作用是同一类型的事件如果还没上传完,那么后续同类事件不给上传,然后设置uploading_event设置成exit用于下一次的埋点数据的上传。
无论是事件B还是事件C,在ADSP的埋点监控线程执行最后都会判断是否有埋点数据要上传,也就是upload_events的值是否为0,不为0表示有事件要上传,因此需要判断upload_events中的哪个bit被设置成1,比如,upload_events中的事件A的bit被设置成1,则uploading_event变量等于A,同时还需要判断uploading是否为true,这里,与上述事件A形成埋点数据并防止共享内存的方式类似,这里,不再赘述。
另外,当ADSP收到KERNEL通过GLINK协议发过来的通知取埋点数据的消息时,其会取之前已经准备好的ADSP的埋点数据,并更新到KERNEL和ADSP交互的共享内存中,并发通知事件B给ADSP埋点监控线程,目的是告诉埋点监控线程KERNEL及时来取埋点数据了,不需要执行timeout的定时器的操作了。
当ADSP的软件行为允许异常需要记录事件A的埋点时,其会判定该埋点事件是否在一天内频繁(例如,超过10次)触发(上传埋点数据量很大的话会占用网络带宽,比较费成本),因此这里,限制在一天内只能上传10条同类型的埋点数据,如果超过10条,则触发超标,丢弃该埋点事件(不记录),即该类型的埋点数据的将不再上传(第二天会重置该限制);如果未超过时,会判断是否之前已经有同类型的埋点数据在待上传了,即判断A_uploading是否为true,若为是,表示事件A的埋点数据已经在待上传,则之后触发的同类型的埋点数据会被丢弃,只有当A_uploading=false的情况下,事件A的埋点数据才能被上传,给事件A的敏感信息分配内存,并给上传事件A的上传次数+1(一天内上传次数大于10将不再上传,第二天会重置该次数),并设置A_uploadiing=true,表示本次事件A的埋点数据即将上传,最后,通知ADSP埋点监控线程事件A需要上传埋点,监控线程收到该通知后,会将upload_events中的事件A的bit设置成1,然后调用上传流程进行上传。
需要指出的是,图3中的标签2与图4中的标签2相连接,图3中的标签3与图4中的标签3相连接,图3中的标签4与图4中的标签4相连接。
需要说明的是,ADSP埋点数据的上传历经ADSP->KERNEL->android的系统层,涉及到各个系统中竞争并发操作,解决该问题一是在KERNEL中设置了缓冲队列,ADSP报给KERNEL的埋点数据会实现放置到缓冲队列中,然后,启动上报埋点线程去缓冲队列中拿埋点数据进行上传;而ADSP中用不同的bit的表征不同埋点事件的上传,上报给KERNEL是1bit1bit的进行处理,比如,事件A和事件E和事件D同时触发了埋点,那么,其在upload_events中会有3bit为1,然后,埋点数据上报的时候先报事件A的bit,上报完后再报事件E的bit,最后再上报事件D的bit,通过KERNEL的缓冲队列的作用和ADSP的bit流处理埋点事件的机制,能够保证ADSP的埋点事件有序不丢失的上传到服务器。
另外,基于ADSP子系统本身的架构设计,使得目前的埋点监控系统只能监控64bit,也就是只能监控64个不同类型的事件,后续随着要监控的软件行为的增多,该方式肯定是不够,那么有两个方式可以解决,一个是再增加监控线程,二是采用分级的bit进行(比如同一行为或者同一器件的埋点事件归为一类,然后具体的事件类型归为二类),这样就有64*64=3000多个事件能够监控了。
针对软件方案存在同类型事件的埋点同时触发时,只能上传前一次埋点数据,比如,事件A触发了两次,分别叫做A1和A2,当A1因为系统间的时序等待问题还没上传OK,那么,当A2触发的时候将被丢弃,还可以被当成独立的事件上传,这里,本申请实施例对此不作具体限定。
本实例中,提出了一种基于ADSP子系统的埋点软件设计方案,该方案设计了ADSP和KERNEL之间埋点数据的交互机制,其能够将ADSP子系统的埋点事件有序安全的上传到服务器中,在保证ADSP埋点功能的同时,其能够兼顾内存(事件内存用完即归还系统)/功耗(中断方式之ADSP主动通知);最后,该设计方案经过实践能够有效监控ADSP子系统的软件行为(比如电量计异常\快充DCHG异常等),为项目的充电功能稳定性提供预警功能。
本实例中,将ADSP子系统的埋点事件有序安全的上传到服务器中,兼顾内存(事件内存用完即归还系统)/功耗(中断方式之ADSP主动通知),能够有效的监控ADSP子系统的软件行为。
本申请实施例提供了一种上报方法,该方法应用于终端设备的第一处理器的操作系统的内核层中,其中,终端设备还包括第二处理器,包括:接收来自第二处理器的通知消息;其中,通知消息用于通知第二处理器上存在目标埋点数据,向第二处理器发送目标埋点数据的获取消息,接收来自第二处理器发送的目标埋点数据,将目标埋点数据上报至操作系统的系统层;也就是说,在本申请实施例中,内核层通过接收到来自第二处理器的通知消息来通知内核层第二处理器上存在目标埋点数据,内核层通过向第二处理器发送目标埋点数据的获取消息,接收到来自第二处理器的目标埋点数据,并上报至系统层,如此,只要第二处理器上存在目标埋点数据就可以通知内核层来获取目标埋点数据,采用这种通知消息和获取消息的方式,使得第二处理器可以将获取到的目标埋点数据实时地上报至内核层,从而使得内核层能够实时获取到目标埋点数据,进而实现了对第二处理器的行为监控。
下面以终端设备中所部属的各个设备侧对上述上报方法进行说明。
首先,以第一处理器侧对设备方法进行描述。
本申请实施例提供一种上报方法,该方法应用于终端设备的第一处理器的操作系统的内核层中,该终端设备还包括第二处理器,图5为本申请实施例提供的一种可选的上报方法的流程示意图,如图5所示,该上报方法可以包括:
S501:接收来自第二处理器的通知消息;
其中,通知消息用于通知第二处理器上存在目标埋点数据;
S502:向第二处理器发送目标埋点数据的获取消息;
S503:接收来自第二处理器发送的目标埋点数据;
S504:将目标埋点数据上报至操作系统的系统层。
在一种可选的实施例中,S503可以包括:
在向第二处理器发送目标埋点数据的获取消息后的预设时长内,接收到来自第二处理器发送的目标埋点数据时,根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层;
当向第二处理器发送目标埋点数据的获取消息后的预设时长内,未接收到来自第二处理器发送的目标埋点数据时,结束目标埋点数据的上报。
在一种可选的实施例中,根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层,包括:
当目标埋点数据的数据长度为预设长度时,将目标埋点数据上报至系统层;
当目标埋点数据的数据长度不为预设长度时,丢弃目标埋点数据。
在一种可选的实施例中,将目标埋点数据上报至系统层,包括:
将目标埋点数据放入内核层的缓冲队列中;
通过缓冲队列将目标埋点数据上报至系统层。
在一种可选的实施例中,通过缓冲队列将目标埋点数据上报至系统层,包括:
当缓冲队列中存在预设数目的目标埋点数据时,从缓冲队列中获取一条当前目标埋点数据;
当当前目标埋点数据的类型为预设类型时,将当前目标埋点数据中的现场信息上报至系统层;
当当前目标埋点数据的类型不为预设类型时,丢弃当前目标埋点数据,返回执行从缓冲队列中获取一条当前目标埋点数据。
在一种可选的实施例中,上述方法还包括:
向第二处理器发送设置消息;其中,设置消息用于第二处理器将调试变量设置为设置消息中携带的设置值;
向第二处理器发送调试变量的获取消息,以获取调试变量的获取值;
当获取值为设置值时,确定第二处理器至内核层之间调试成功。
其次,以第二处理器侧对上述上报方法进行描述。
本申请实施例提供一种上报方法,该方法应用于终端设备的第二处理器中,其中,终端设备还包括第一处理器,第一处理器的操作系统包括内核层和系统层,图6为本申请实施例提供的另一种可选的上报方法的流程示意图,如图6所示,该上报方法可以包括:
S601:当存在目标埋点数据时,向内核层发送通知消息;
其中,通知消息用于通知第二处理器上存在目标埋点数据;
S602:接收来自内核层发送的目标埋点数据的获取消息;
S603:向内核层发送目标埋点数据,以使得内核层将目标埋点数据上报至系统层。
在一种可选的实施例中,S601可以包括:
当第二处理器发生目标埋点事件时,记录目标埋点事件对应的现场信息,并将目标埋点事件对应的现场信息存储至第二处理器的内存中;
利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据;
将目标埋点数据存放至,内核层和第二处理器的共享内存中,向内核层发送通知消息。
在一种可选的实施例中,在向内核层发送目标埋点数据之后,上述方法还包括:
在向内核层发送目标埋点数据之后,当内核层在预设时长内获取到目标埋点数据,或者,内核层超过预设时长未获取到目标埋点数据时,且目标埋点事件对应的现场信息从第二处理器的内存中未释放时,释放第二处理器的内存中目标埋点事件对应的现场信息。
在一种可选的实施例中,在释放第二处理器的内存中目标埋点事件对应的现场信息之后,上述方法还包括:
当预设类型的埋点事件的标识还指示发生目标类型的目标埋点事件时,返回执行利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据。
在一种可选的实施例中,当第二处理器发生目标埋点事件时,记录目标埋点事件对应的现场信息,并将目标埋点事件对应的现场信息存储至第二处理器的内存中,包括:
当第二处理器发生目标埋点事件时,获取目标埋点事件对应的现场信息,并确定预设时间段内目标类型的目标埋点事件的累积上报个数N;其中,N的初始值为0;
当N等于预设阈值时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且存在与目标类型相同的目标埋点事件的埋点数据待上报时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且不存在与目标类型相同的目标埋点事件的埋点数据待上报时,将目标埋点事件对应的现场信息存储至第二处理器的内存中,将N自动加1。
在一种可选的实施例中,上述方法还包括:
接收来自内核层发动的设置信息;其中,设置信息携带有调试变量的设置值;
当设置值为预设的设置值时,将调试变量设置为设置值;
接收来自内核层发送的调试变量的获取消息后,获取调试变量的获取值,将获取值发送至内核层,以确定第二处理器至内核层之间是否调试成功。
另外,基于前述实施例相同的发明构思,本申请实施例提供一种第一处理器,与上述一个或多个实施例提供的所述第一处理器一致。
本申请实施例提供的第一处理器,第一处理器设置于终端设备中,终端设备的第一处理器的操作系统包括内核层和系统层,终端设备还包括第二处理器,图7为本申请实施例提供的一种可选的第一处理器的结构示意图,如图7所示,所述内核层包括:
第一接收模块71,用于接收来自第二处理器的通知消息;其中,通知消息用于通知第二处理器上存在目标埋点数据;
第一发送模块72,用于向第二处理器发送目标埋点数据的获取消息;
第二接收模块73,用于接收来自第二处理器发送的目标埋点数据;
上报模块74,用于将目标埋点数据上报至操作系统的系统层。
在一种可选的实施例中,第二接收模块73,具体用于:
在向第二处理器发送目标埋点数据的获取消息后的预设时长内,接收到来自第二处理器发送的目标埋点数据时,根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层;
当向第二处理器发送目标埋点数据的获取消息后的预设时长内,未接收到来自第二处理器发送的目标埋点数据时,结束目标埋点数据的上报。
在一种可选的实施例中,第二接收模块73根据目标埋点数据的数据长度,确定是否将目标埋点数据上报至系统层中,包括:
当目标埋点数据的数据长度为预设长度时,将目标埋点数据上报至系统层;
当目标埋点数据的数据长度不为预设长度时,丢弃目标埋点数据。
在一种可选的实施例中,上报模块74将目标埋点数据上报至系统层中,包括:
将目标埋点数据放入内核层的缓冲队列中;
通过缓冲队列将目标埋点数据上报至系统层。
在一种可选的实施例中,上报模块74通过缓冲队列将目标埋点数据上报至系统层中,包括:
当缓冲队列中存在预设数目的目标埋点数据时,从缓冲队列中获取一条当前目标埋点数据;
当当前目标埋点数据的类型为预设类型时,将当前目标埋点数据中的现场信息上报至系统层;
当当前目标埋点数据的类型不为预设类型时,丢弃当前目标埋点数据,返回执行从缓冲队列中获取一条当前目标埋点数据。
在一种可选的实施例中,内核层还用于:
向第二处理器发送设置消息;其中,设置消息用于第二处理器将调试变量设置为设置消息中携带的设置值;
向第二处理器发送调试变量的获取消息,以获取调试变量的获取值;
当获取值为设置值时,确定第二处理器至内核层之间调试成功。
在实际应用中,上述第一接收模块71、第一发送模块72、第二接收模块73和上报模块74可由位于终端设备的第一处理器的内核层实现,具体为中央处理器(CPU,CentralProcessing Unit)、微处理器(MPU,Microprocessor Unit)、数字信号处理器(DSP,DigitalSignal Processing)或现场可编程门阵列(FPGA,Field Programmable Gate Array)等实现。
本申请实施例提供一种第二处理器,第二处理器设置于终端设备的中,终端设备还包括第一处理器,第一处理器的操作系统包括内核层和系统层,图8为本申请实施例提供的一种可选的第二处理器的结构示意图,如图8所示,该第二处理器包括:
第二发送模块81,用于当存在目标埋点数据时,向内核层发送通知消息;其中,通知消息用于通知第二处理器上存在目标埋点数据;
第三接收模块82,用于接收来自内核层发送的目标埋点数据的获取消息;
第三发送模块83,用于向内核层发送目标埋点数据,以使得内核层将目标埋点数据上报至系统层。
在一种可选的实施例中,第二发送模块81,具体用于:
当第二处理器发生目标埋点事件时,记录目标埋点事件对应的现场信息,并将所述目标埋点事件对应的现场信息存储至第二处理器的内存中;
利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据;
将目标埋点数据存放至,内核层和第二处理器的共享内存中,向内核层发送通知消息。
在一种可选的实施例中,第二处理器还用于:
在向内核层发送目标埋点数据之后,当内核层在预设时长内获取到目标埋点数据,或者,内核层超过预设时长未获取到目标埋点数据时,且目标埋点事件对应的现场信息从第二处理器的内存中未释放时,释放第二处理器的内存中目标埋点事件对应的现场信息。
在一种可选的实施例中,第二处理器还用于:
在释放第二处理器的内存中目标埋点事件对应的现场信息之后,当预设类型的埋点事件的标识还指示发生目标类型的目标埋点事件时,返回执行利用目标埋点事件的目标类型和目标埋点事件对应的现场信息,形成目标埋点数据。
在一种可选的实施例中,第二发送模块81当第二处理器发生目标埋点事件时,记录目标埋点事件对应的现场信息,并将目标埋点事件对应的现场信息存储至第二处理器的内存中,包括:
当第二处理器发生目标埋点事件时,获取目标埋点事件对应的现场信息,并确定预设时间段内目标类型的目标埋点事件的累积上报个数N;其中,N的初始值为0;
当N等于预设阈值时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且存在与目标类型相同的目标埋点事件的埋点数据待上报时,丢弃目标埋点事件对应的现场信息;
当N小于预设阈值,且不存在与目标类型相同的目标埋点事件的埋点数据待上报时,将目标埋点事件对应的现场信息存储至第二处理器的内存中,将N自动加1。
在一种可选的实施例中,第二处理器还用于:
接收来自内核层发动的设置信息;其中,设置信息携带有调试变量的设置值;
当设置值为预设的设置值时,将调试变量设置为设置值;
接收来自内核层发送的调试变量的获取消息后,获取调试变量的获取值,将获取值发送至内核层,以确定第二处理器至内核层之间是否调试成功。
在实际应用中,上述第二发送模块81、第三接收模块82和第三发送模块83可由位于终端设备的第二处理器实现,具体为CPU、MPU、DSP或FPGA等实现。
本申请实施例提供一种第一处理器,图9为本申请实施例提供的另一种可选的第一处理器的结构示意图,如图9所示,第一处理器900用于从存储器91中调用并运行计算机程序,使得安装有所述第一处理器900的设备执行如上述第一处理器侧实施的一个或多个实施例所述的上报方法。
可选地,如图9所示,第一处理器还可以包括存储器91。其中,第一处理器900可以从存储器91中调用并运行计算机程序,以实现本申请实施例中的方法。其中,存储器91可以是独立于第一处理器900的一个单独的器件,也可以集成在处理器900中。可选地,该第一处理器900还可以包括输入接口92。其中,第一处理器900可以控制该输入接口92与其他设备或芯片进行通信,具体地,可以获取其他设备或芯片发送的信息或数据。可选地,该第一处理器900还可以包括输出接口93。其中,第一处理器900可以控制该输出接口93与其他设备或芯片进行通信,具体地,可以向其他设备或芯片输出信息或数据。
本申请实施例提供一种第二处理器,图10为本申请实施例提供的另一种可选的第二处理器的结构示意图,如图10所示,第二处理器1000用于从存储器101中调用并运行计算机程序,使得安装有所述第二处理器1000的设备执行如上述第二处理器侧实施的一个或多个实施例所述的上报方法。
可选地,如图10所示,第二处理器还可以包括存储器101。其中,第二处理器1000可以从存储器101中调用并运行计算机程序,以实现本申请实施例中的方法。其中,存储器101可以是独立于第二处理器1000的一个单独的器件,也可以集成在第二处理器1000中。可选地,该第二处理器1000还可以包括输入接口102。其中,第二处理器1000可以控制该输入接口102与其他设备或芯片进行通信,具体地,可以获取其他设备或芯片发送的信息或数据。可选地,该第二处理器1000还可以包括输出接口103。其中,第二处理器1000可以控制该输出接口103与其他设备或芯片进行通信,具体地,可以向其他设备或芯片输出信息或数据。
本申请实施例提供一种终端设备,图11为本申请实施例提供的另一种可选的终端设备的结构示意图,如图11所示,终端设备1100包括如上述一个或多个实施例所述的第一处理器113和如上述一个或多个实施例所述的第二处理器114;其中,第一处理器113和第二处理器114之间通过总线相连接。
本申请实施例提供了一种计算机存储介质,计算机可读存储介质用于存储计算机程序,计算机程序使得计算机执行如上述一个或多个实施例所述上报方法的步骤。
其中,计算机可读存储介质可以是磁性随机存取存储器(ferromagnetic randomaccess memory,FRAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(ErasableProgrammable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory,EEPROM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。
Claims (18)
1.一种上报方法,其特征在于,所述方法应用于终端设备的第一处理器的操作系统的内核层中,其中,所述终端设备还包括第二处理器,包括:
接收来自第二处理器的通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
向所述第二处理器发送所述目标埋点数据的获取消息;
接收来自所述第二处理器发送的所述目标埋点数据;
将所述目标埋点数据上报至所述操作系统的系统层。
2.根据权利要求1所述的方法,其特征在于,所述接收来自所述第二处理器发送的所述目标埋点数据,包括:
在向所述第二处理器发送所述目标埋点数据的获取消息后的预设时长内,接收到来自所述第二处理器发送的所述目标埋点数据时,根据所述目标埋点数据的数据长度,确定是否将所述目标埋点数据上报至所述系统层;
当向所述第二处理器发送所述目标埋点数据的获取消息后的预设时长内,未接收到来自所述第二处理器发送的所述目标埋点数据时,结束所述目标埋点数据的上报。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目标埋点数据的数据长度,确定是否将所述目标埋点数据上报至所述系统层,包括:
当所述目标埋点数据的数据长度为预设长度时,将所述目标埋点数据上报至所述系统层;
当所述目标埋点数据的数据长度不为预设长度时,丢弃所述目标埋点数据。
4.根据权利要求1或3所述的方法,其特征在于,所述将所述目标埋点数据上报至所述系统层,包括:
将所述目标埋点数据放入所述内核层的缓冲队列中;
通过所述缓冲队列将所述目标埋点数据上报至所述系统层。
5.根据权利要求4所述的方法,其特征在于,所述通过所述缓冲队列将所述目标埋点数据上报至所述系统层,包括:
当所述缓冲队列中存在预设数目的目标埋点数据时,从所述缓冲队列中获取一条当前目标埋点数据;
当所述当前目标埋点数据的类型为预设类型时,将所述当前目标埋点数据中的现场信息上报至所述系统层;
当所述当前目标埋点数据的类型不为预设类型时,丢弃所述当前目标埋点数据,返回执行所述从所述缓冲队列中获取一条当前目标埋点数据。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
向所述第二处理器发送设置消息;其中,所述设置消息用于所述第二处理器将调试变量设置为所述设置消息中携带的设置值;
向所述第二处理器发送所述调试变量的获取消息,以获取所述调试变量的获取值;
当所述获取值为所述设置值时,确定所述第二处理器至所述内核层之间调试成功。
7.一种上报方法,其特征在于,所述方法应用于终端设备的第二处理器中,其中,所述终端设备还包括第一处理器,所述第一处理器的操作系统包括内核层和系统层,包括:
当存在目标埋点数据时,向所述内核层发送通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
接收来自所述内核层发送的所述目标埋点数据的获取消息;
向所述内核层发送所述目标埋点数据,以使得所述内核层将所述目标埋点数据上报至所述系统层。
8.根据权利要求7所述的方法,其特征在于,所述当存在目标埋点数据时,向所述内核层发送通知消息,包括:
当所述第二处理器发生目标埋点事件时,记录所述目标埋点事件对应的现场信息,并将所述目标埋点事件对应的现场信息存储至所述第二处理器的内存中;
利用所述目标埋点事件的目标类型和所述目标埋点事件对应的现场信息,形成所述目标埋点数据;
将所述目标埋点数据存放至,所述内核层和所述第二处理器的共享内存中,向所述内核层发送所述通知消息。
9.根据权利要求8所述的方法,其特征在于,在向所述内核层发送所述目标埋点数据之后,所述方法还包括:
当所述内核层在预设时长内获取到所述目标埋点数据,或者,所述内核层超过预设时长未获取到所述目标埋点数据时,且所述目标埋点事件对应的现场信息从所述第二处理器的内存中未释放时,释放所述第二处理器的内存中所述目标埋点事件对应的现场信息。
10.根据权利要求9所述的方法,在释放所述第二处理器的内存中所述目标埋点事件对应的现场信息之后,所述方法还包括:
当预设类型的埋点事件的标识还指示发生目标类型的目标埋点事件时,返回执行所述利用所述目标埋点事件的目标类型和所述目标埋点事件对应的现场信息,形成所述目标埋点数据。
11.根据权利要求8所述的方法,其特征在于,所述当所述第二处理器发生目标埋点事件时,记录所述目标埋点事件对应的现场信息,并将所述目标埋点事件对应的现场信息存储至所述第二处理器的内存中,包括:
当所述第二处理器发生目标埋点事件时,获取所述目标埋点事件对应的现场信息,并确定预设时间段内所述目标类型的目标埋点事件的累积上报个数N;其中,N的初始值为0;
当N等于预设阈值时,丢弃所述目标埋点事件对应的现场信息;
当N小于预设阈值,且存在与所述目标类型相同的目标埋点事件的埋点数据待上报时,丢弃所述目标埋点事件对应的现场信息;
当N小于预设阈值,且不存在与所述目标类型相同的目标埋点事件的埋点数据待上报时,将所述目标埋点事件对应的现场信息存储至所述第二处理器的内存中,将N自动加1。
12.根据权利要求7所述的方法,其特征在于,所述方法还包括:
接收来自所述内核层发动的设置信息;其中,所述设置信息携带有调试变量的设置值;
当所述设置值为预设的设置值时,将所述调试变量设置为所述设置值;
接收来自所述内核层发送的所述调试变量的获取消息后,获取所述调试变量的获取值,将所述获取值发送至所述内核层,以确定所述第二处理器至所述内核层之间是否调试成功。
13.一种第一处理器,其特征在于,所述第一处理器设置于终端设备中,所述终端设备的第一处理器的操作系统包括内核层和系统层,所述终端设备还包括第二处理器,所述内核层包括:
第一接收模块,用于接收来自第二处理器的通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
第一发送模块,用于向所述第二处理器发送所述目标埋点数据的获取消息;
第二接收模块,用于接收来自所述第二处理器发送的所述目标埋点数据;
上报模块,用于将所述目标埋点数据上报至所述操作系统的系统层。
14.一种第二处理器,其特征在于,所述第二处理器设置于终端设备的中,所述终端设备还包括第一处理器,所述第一处理器的操作系统包括内核层和系统层,包括:
第二发送模块,用于当存在目标埋点数据时,向所述内核层发送通知消息;其中,所述通知消息用于通知所述第二处理器上存在目标埋点数据;
第三接收模块,用于接收来自所述内核层发送的所述目标埋点数据的获取消息;
第三发送模块,用于向所述内核层发送所述目标埋点数据,以使得所述内核层将所述目标埋点数据上报至所述系统层。
15.一种第一处理器,其特征在于,所述第一处理器的操作系统的内核层用于从存储器中调用并运行计算机程序,使得安装有所述第一处理器的设备执行如权利要求1至6中任一项所述的上报方法。
16.一种第二处理器,其特征在于,用于从存储器中调用并运行计算机程序,使得安装有所述第二处理器的设备执行如权利要求7至12中任一项所述的上报方法。
17.一种终端设备,其特征在于,包括如上述权利要求15所述的第一处理器和如上述权利要求16所述的第二处理器;其中,所述第一处理器和所述第二处理器之间通过总线相连接。
18.一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序使得计算机执行如权利要求1至12任一项所述上报方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210960702.9A CN115421997A (zh) | 2022-08-11 | 2022-08-11 | 一种上报方法、处理器、终端设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210960702.9A CN115421997A (zh) | 2022-08-11 | 2022-08-11 | 一种上报方法、处理器、终端设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115421997A true CN115421997A (zh) | 2022-12-02 |
Family
ID=84198437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210960702.9A Pending CN115421997A (zh) | 2022-08-11 | 2022-08-11 | 一种上报方法、处理器、终端设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421997A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116132455A (zh) * | 2023-02-16 | 2023-05-16 | 无锡宇宁智能科技有限公司 | 基于lxc镜像的通讯方法、装置、设备及存储介质 |
-
2022
- 2022-08-11 CN CN202210960702.9A patent/CN115421997A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116132455A (zh) * | 2023-02-16 | 2023-05-16 | 无锡宇宁智能科技有限公司 | 基于lxc镜像的通讯方法、装置、设备及存储介质 |
CN116132455B (zh) * | 2023-02-16 | 2023-11-21 | 无锡宇宁智能科技有限公司 | 基于lxc镜像的通讯方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11907561B2 (en) | Data backup method and apparatus | |
CN100481021C (zh) | 用于标识计算机程序的未响应部分的方法、系统和装置 | |
CN106682162B (zh) | 日志管理方法及装置 | |
US7757124B1 (en) | Method and system for automatic correlation of asynchronous errors and stimuli | |
EP3206127B1 (en) | Method, computer, and apparatus for migrating memory data | |
CN102521098B (zh) | Cpu死机监控的处理方法和装置 | |
CN109460343A (zh) | 基于日志的系统异常监控方法、装置、设备及存储介质 | |
CN111881014B (zh) | 一种系统测试方法、装置、存储介质及电子设备 | |
CN110224885B (zh) | 设备监控的告警方法、装置、存储介质及电子设备 | |
CN103577298A (zh) | 基板管理控制器监控系统及方法 | |
CN115421997A (zh) | 一种上报方法、处理器、终端设备及计算机可读存储介质 | |
CN111107123A (zh) | 一种断网续传方法及装置 | |
CN110618853B (zh) | 一种僵尸容器的检测方法、装置及设备 | |
CN107783854B (zh) | 处理进程的方法及其装置 | |
US10474518B1 (en) | Obtaining historical information in a device core dump | |
CN105700968A (zh) | 一种嵌入式系统中内存泄漏诊断处理的方法和装置 | |
CN109446034B (zh) | 上报崩溃事件的方法、装置、计算机设备及存储介质 | |
CN111464393A (zh) | 一种区块链运行状态的监测方法、装置及存储介质 | |
CN109062718B (zh) | 一种服务器及数据处理方法 | |
CN106126454B (zh) | 一种计算机系统、高速外围组件互联端点设备的访问方法和装置 | |
CN112053707B (zh) | 多媒体设备的刻录方法及装置、存储介质、电子装置 | |
CN114253825A (zh) | 内存泄漏检测方法、装置、计算机设备和存储介质 | |
CN117593172B (zh) | 进程管理方法、装置、介质及设备 | |
CN116662285A (zh) | 服务器日志的存储方法和装置、存储介质及电子装置 | |
CN114816942B (zh) | 移动端应用稳定性监控方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |