CN116450473A - 踩内存问题的定位方法和电子设备 - Google Patents
踩内存问题的定位方法和电子设备 Download PDFInfo
- Publication number
- CN116450473A CN116450473A CN202210020899.8A CN202210020899A CN116450473A CN 116450473 A CN116450473 A CN 116450473A CN 202210020899 A CN202210020899 A CN 202210020899A CN 116450473 A CN116450473 A CN 116450473A
- Authority
- CN
- China
- Prior art keywords
- memory
- stepping
- information
- memory space
- rewritten
- 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
- 238000000034 method Methods 0.000 title claims abstract description 208
- 230000005856 abnormality Effects 0.000 claims abstract description 24
- 238000012544 monitoring process Methods 0.000 claims abstract description 21
- 230000008569 process Effects 0.000 claims description 69
- 238000012545 processing Methods 0.000 claims description 45
- 230000003068 static effect Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 12
- 230000001360 synchronised effect Effects 0.000 claims description 9
- 230000002159 abnormal effect Effects 0.000 abstract description 13
- 230000006870 function Effects 0.000 description 28
- 238000007726 management method Methods 0.000 description 24
- 238000010586 diagram Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 16
- 230000001976 improved effect Effects 0.000 description 15
- 238000010295 mobile communication Methods 0.000 description 5
- 230000005236 sound signal Effects 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 210000000988 bone and bone Anatomy 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000006386 memory function Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Storage Device Security (AREA)
Abstract
本申请提供了一种踩内存问题的定位方法和电子设备,可以对踩内存问题进行定位,以便于开发人员解决踩内存问题,以提高用户体验。该方法包括:分配第一目标内存空间;监测第一目标内存空间中的信息是否被改写;在第一目标内存空间中的信息被改写的情况下,获取内存异常信息,内存异常信息包括被改写的信息对应的内存区域和/或被改写的信息对应的物理地址;根据内存异常信息,进行踩内存问题的定位。
Description
技术领域
本申请涉及电子设备技术领域,尤其涉及一种踩内存问题的定位方法和电子设备。
背景技术
日常的系统运维和调测过程中,内存数据故障经常是踩内存问题导致的。踩内存问题一般是系统中的程序内存被异常代码修改出现的。踩内存问题可能会导致系统频繁崩溃,降低用户的体验。
导致踩内存问题出现的原因很多,例如,直接存储器访问(direct memoryaccess,DMA)和输入/输出内存管理单元(input/output memory management unit,IOMMU)直接访问内存空间导致的踩内存问题,双倍速率同步动态随机存储器(double data ratesynchronous dynamic random access memory,DDR)和高速缓冲存储器(cache)跳变导致的踩内存问题,以及内核态代码访问用户态进程导致的踩内存问题等等。
目前亟需提供一种踩内存问题的定位方法,以便于开发人员解决踩内存问题。
发明内容
本申请提供了一种踩内存问题的定位方法和电子设备,可以对踩内存问题进行定位,以便于开发人员解决踩内存问题,以提高用户体验。
第一方面,本申请提供了一种踩内存问题的定位方法,包括:分配第一目标内存空间;监测第一目标内存空间中的信息是否被改写;在第一目标内存空间中的信息被改写的情况下,获取内存异常信息,内存异常信息包括被改写的信息对应的内存区域和/或被改写的信息对应的物理地址;根据内存异常信息,进行踩内存问题的定位。
第一目标内存空间可以为用户态进程申请的内存空间,电子设备可以为用户态进程分配第一目标内存空间。
第一目标内存空间可以为电子设备空闲的内存空间或用户态正在使用的内存空间。
在一种可能的实现方式中,第一目标内存空间可以为电子设备空闲的内存空间,即电子设备可以为用户态进程从该空闲的内存空间中分配全部或部分的内存空间作为第一目标内存空间。
在另一种可能的实现方式中,第一目标内存空间可以为用户态正在使用的内存空间,即电子设备可以为用户态进程从该用户态正在使用的内存空间中分配全部或部分的内存空间作为第一目标内存空间。
当第一目标内存空间的个数为多个时,第一目标内存空间可以包括电子设备空闲的内存空间和用户态正在使用的内存空间。
当第一目标内存空间电子设备空闲的内存空间时,第一目标内存空间中的信息是电子设备写入的。当第一目标内存空间可以为用户态正在使用的内存空间时,第一目标内存空间中的信息是用户态进程写入的。
被改写的信息对应的内存区域应小于或等于第一目标内存空间的大小。
被改写的信息对应的物理地址,即被改写的信息对应的内存空间的物理地址。
电子设备可以根据被改写的信息对应的内存区域和/或被改写的信息对应的物理地址,进行踩内存问题的定位。
电子设备获取内存异常信息后,可以直接根据内存异常信息,进行踩内存问题的定位,还可以将内存异常信息保存到日志中,以便于后续查看。
本申请提供的踩内存问题的定位方法,可以根据被改写的信息对应的内存区域和/或被改写的信息对应的物理地址,进行踩内存问题的定位,以便于开发人员解决踩内存问题,以提高用户体验。
结合第一方面,在第一方面的某些实现方式中,上述根据内存异常信息,进行踩内存问题的定位,包括:判断被改写的信息对应的内存区域的大小是否超过第一阈值;在被改写的信息对应的内存区域的大小大于第一阈值的情况下,将踩内存问题确定为内核态代码导致的踩内存问题。
本申请提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的内存区域的大小是否超过第一阈值,确定是内核态代码导致的踩内存问题或者DDR导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
结合第一方面,在第一方面的某些实现方式中,上述在将踩内存问题确定为内核态代码导致的踩内存问题之后,方法还包括:判断被改写的信息对应的物理地址的出现次数是否超过第二阈值;在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将内核态代码导致的踩内存问题确定为由于内核中的输入/输出内存管理单元IOMMU或者直接存储器访问DMA的访问导致的踩内存问题。
本申请提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的物理地址的出现次数超过第二阈值,确定是由于内核中的IOMMU或者DMA的访问导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
结合第一方面,在第一方面的某些实现方式中,上述方法还包括:在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将被改写的信息对应的物理地址设置为不允许IOMMU访问;判断被改写的信息对应的物理地址是否被IOMMU访问;在被改写的信息对应的物理地址被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题
结合第一方面,在第一方面的某些实现方式中,上述方法还包括:在被改写的信息对应的物理地址未被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
本申请提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的物理地址是否被IOMMU访问,确定是由于IOMMU导致的踩内存问题还是由于DMA的访问导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
结合第一方面,在第一方面的某些实现方式中,上述方法还包括:在被改写的信息对应的内存区域的大小小于或等于第一阈值的情况下,将踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
结合第一方面,在第一方面的某些实现方式中,上述方法还包括:输出改写后的信息和/或被改写的信息对应的内核页表状态。
结合第一方面,在第一方面的某些实现方式中,上述在分配第一目标内存空间之前,方法还包括:判断是否存在用于定位踩内存问题的内核线程;在内核线程不存在的情况下,分配第一目标内存空间。
结合第一方面,在第一方面的某些实现方式中,上述第一目标内存空间包括静态内存空间或动态内存空间。
其中,静态内存可以指电子设备在预设时间分配内存空间。动态内存空间可以指电子设备在每隔一段时间分配内存空间。
本申请提供的踩内存问题的定位方法,电子设备可以一直监测目标内存空间,也可以不断更换监测的目标内存空间,可以更全面的对踩内存问题进行定位。
结合第一方面,在第一方面的某些实现方式中,上述在分配第一目标内存空间之前,方法还包括:在开机启动时,创建用于定位踩内存问题的内核线程;通过内核线程分配第二目标内存空间,并监测第二目标内存空间是否被内核态代码访问,第二目标内存空间仅允许用户态进程使用;在第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
电子设备开机启动时,进入内核态,电子设备创建用于定位踩内存问题的内核线程。
第二目标内存空间允许被用户态的进程使用,不允许被内核态代码访问。
第二目标内存空间不允许被内核态代码访问,在第二目标内存空间被内核态代码访问的情况下,出现内核态代码访问第二目标内存空间,即出现异常现象,可以将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
本申请提供的踩内存问题的定位方法,通过监测第二目标内存空间的踩内存问题,可以直接确定踩内存问题为内核态代码访问用户态进程导致的踩内存问题,具备踩内存故障定位的能力,更加全面的监测踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
第二方面,本申请提供了一种电子设备,包括:处理模块和获取模块。处理模块,用于分配第一目标内存空间;以及,监测第一目标内存空间中的信息是否被改写;获取模块,用于在第一目标内存空间中的信息被改写的情况下,获取内存异常信息,内存异常信息包括被改写的信息对应的内存区域和/或被改写的信息对应的物理地址;处理模块还用于:根据内存异常信息,进行踩内存问题的定位。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:判断被改写的信息对应的内存区域的大小是否超过第一阈值;在被改写的信息对应的内存区域的大小大于第一阈值的情况下,将踩内存问题确定为内核态代码导致的踩内存问题。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:判断被改写的信息对应的物理地址的出现次数是否超过第二阈值;在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将内核态代码导致的踩内存问题确定为由于内核中的输入/输出内存管理单元IOMMU或者直接存储器访问DMA的访问导致的踩内存问题。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将被改写的信息对应的物理地址设置为不允许IOMMU访问;判断被改写的信息对应的物理地址是否被IOMMU访问;在被改写的信息对应的物理地址被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:在被改写的信息对应的物理地址未被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:在被改写的信息对应的内存区域的大小小于或等于第一阈值的情况下,将踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:输出改写后的信息和/或被改写的信息对应的内核页表状态。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:判断是否存在用于定位踩内存问题的内核线程;在内核线程不存在的情况下,分配第一目标内存空间。
结合第二方面,在第二方面的某些实现方式中,上述第一目标内存空间包括静态内存空间或动态内存空间。
结合第二方面,在第二方面的某些实现方式中,上述处理模块还用于:在开机启动时,创建用于定位踩内存问题的内核线程;通过内核线程分配第二目标内存空间,并监测第二目标内存空间是否被内核态代码访问,第二目标内存空间仅允许用户态进程使用;在第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
第三方面,本申请提供了一种电子设备,包括处理器,该处理器与存储器耦合,可用于执行存储器中的指令,以实现上述第一方面中任一种可能实现方式中的方法。可选地,该用于运行应用程序的装置还包括存储器。可选地,该电子设备还包括通信接口,处理器与通信接口耦合。
第四方面,本申请提供了一种处理器,包括:输入电路、输出电路和处理电路。处理电路用于通过输入电路接收信号,并通过输出电路发射信号,使得处理器执行上述第一方面中任一种可能实现方式中的方法。
在具体实现过程中,上述处理器可以为芯片,输入电路可以为输入管脚,输出电路可以为输出管脚,处理电路可以为晶体管、门电路、触发器和各种逻辑电路等。输入电路所接收的输入的信号可以是由例如但不限于接收器接收并输入的,输出电路所输出的信号可以是例如但不限于输出给发射器并由发射器发射的,且输入电路和输出电路可以是同一电路,该电路在不同的时刻分别用作输入电路和输出电路。本申请对处理器及各种电路的具体实现方式不做限定。
第五方面,本申请提供了一种处理装置,包括处理器和存储器。该处理器用于读取存储器中存储的指令,并可通过接收器接收信号,通过发射器发射信号,以执行上述第一方面中任一种可能实现方式中的方法。
可选地,处理器为一个或多个,存储器为一个或多个。
可选地,存储器可以与处理器集成在一起,或者存储器与处理器分离设置。
在具体实现过程中,存储器可以为非瞬时性(non-transitory)存储器,例如只读存储器(read only memory,ROM),其可以与处理器集成在同一块芯片上,也可以分别设置在不同的芯片上,本申请对存储器的类型以及存储器与处理器的设置方式不做限定。
应理解,相关的数据交互过程例如发送指示信息可以为从处理器输出指示信息的过程,接收能力信息可以为处理器接收输入能力信息的过程。具体地,处理输出的数据可以输出给发射器,处理器接收的输入数据可以来自接收器。其中,发射器和接收器可以统称为收发器。
上述第五方面中的处理装置可以是一个芯片,该处理器可以通过硬件来实现也可以通过软件来实现,当通过硬件实现时,该处理器可以是逻辑电路、集成电路等;当通过软件来实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现,该存储器可以集成在处理器中,可以位于该处理器之外,独立存在。
第六方面,本申请提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序(也可以称为代码,或指令)当其在计算机上运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。
第七方面,本申请提供了一种计算机程序产品,计算机程序产品包括:计算机程序(也可以称为代码,或指令),当计算机程序被运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。
附图说明
图1为本申请实施例提供的一种电子设备的结构示意图;
图2为本申请实施例提供的一种电子设备的软件结构的示意性框图;
图3为本申请实施例提供的一种第一踩内存定位模块的软件结构的示意性框图;
图4为本申请实施例提供的一种踩内存问题的定位方法的示意性流程图;
图5为本申请实施例提供的另一种踩内存问题的定位方法的示意性流程图;
图6为本申请实施例提供的又一种踩内存问题的定位方法的示意性流程图;
图7为本申请实施例提供的另一种踩内存问题的定位方法的示意性流程图;
图8为本申请实施例提供的又一种踩内存问题的定位方法的示意性流程图;
图9为本申请实施例提供的一种电子设备的示意性框图;
图10为本申请实施例提供的另一种电子设备的示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一阈值和第二阈值是为了区分不同的阈值,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
需要说明的是,本申请中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性地”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。
此外,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b和c中的至少一项(个),可以表示:a,或b,或c,或a和b,或a和c,或b和c,或a、b和c,其中a,b,c可以是单个,也可以是多个。
为了更好的理解本申请实施例,首先对本申请实施例涉及的术语进行介绍。
1、踩内存问题
系统中的程序内存由于被异常代码修改而出现的错误,可以称为踩内存问题。踩内存也可以简单理解为进程访问了不该访问的内存。
踩内存常见的现象包括以下几种:
1)越界踩内存:进程踩的内存空间在该进程对应的内存空间的旁边,也就是说,该进程申请的内存空间太小,导致该进程使用的内存空间超出了申请的内存空间。
2)内存释放后仍被占用:进程申请的内存空间在进程使用后被释放,但该内存空间仍为被使用的状态,也就是说,存在异常程序占用了被释放的内存空间。
3)内存被重复释放:进程申请内存空间后,该内存空间被其他进程释放,该进程在使用后会释放该内存空间,会存在同一块内存空间被重复释放。
2、内核态和用户态
当一个进程(或任务)执行系统调用而陷入内核代码中执行时,一般称该进程处于内核运行态,或者简称为内核态。
当进程在执行用户自己的代码时,则称其处于用户运行态,或者简称为用户态。
3、内存管理单元(memory management unit,MMU)
MMU部署于CPU,是CPU架构中不可或缺的一部分。
MMU可以具有以下功能:
1)进行虚拟地址翻译。在用户访问内存时,MMU可以将用户访问的虚拟地址翻译为实际的物理地址,以便CPU对实际的物理地址进行访问。
2)访问权限控制。MMU可以对一些虚拟地址进行访问权限控制,以便于对用户程序的访问权限和范围进行管理,如代码段一般设置为只读,如果有用户程序对代码段进行写操作,系统会触发异常。
3)引申的物理内存管理。MMU可以对系统的物理内存资源进行管理,为用户程序提供物理内存的申请、释放等操作接口。
4、输入/输出内存管理单元(input/output memory management unit,IOMMU)
IOMMU是内存管理单元,用于将电子设备的外部设备访问内存时的虚拟地址转换为物理地址。
5、双倍速率同步动态随机存储器(double datarate synchronous dynamicrandom access memory,DDR)
DDR可以在一个时钟周期内传输两次数据。例如,一个时钟周期包括时钟的上升期和时钟的下降期,DDR可以在时钟的上升期传输一次数据,可以在时钟的下降期传输一次数据。
日常的系统运维和调测过程中,内存数据故障经常是踩内存问题导致的。踩内存问题一般是系统中的程序内存被异常代码修改出现的。踩内存问题可能会导致系统频繁崩溃,降低用户的体验。
导致踩内存问题出现的原因很多,例如,直接存储器访问(direct memoryaccess,DMA)和输入/输出内存管理单元(input/output memory management unit,IOMMU)直接访问内存空间导致的踩内存问题,双倍速率同步动态随机存储器(double data ratesynchronous dynamic random access memory,DDR)和高速缓冲存储器(cache)跳变导致的踩内存问题,以及内核态代码访问用户态进程的导致的踩内存问题等等。
示例性地,内核态代码可以通过内核线性映射页表直接写物理内存页,在该物理内存页被释放的情况下,该物理内存页被用户态进程使用,就会发生内核态代码访问用户态进程导致踩内存问题。其中,执行内核态代码的情况可以包括用户态进程调用系统调用,驱动代码执行,内核线程等。
目前的技术在出现踩内存问题时,可以输出造成内存异常的进程标识、指令地址以及堆栈信息等信息,以便于用户或者开发人员利用输出的信息定位故障。该方法需要人工去定位踩内存的故障源,不具备踩内存故障定位能力,可能会导致解决踩内存问题的时间较长,影响解决踩内存问题的效率。
有鉴于此,本申请实施例提供了一种踩内存问题的定位方法和电子设备,可以针对特殊踩内存问题(例如IOMMU、DMA、DDR或者内核踩用户态内存)进行定位,以便于开发人员解决踩内存问题,以提高用户体验。
本申请实施例涉及的电子设备可以为具有操作系统的电子设备,例如,手机、平板电脑、个人计算机(personal computer,PC)、智能手表等可穿戴电子设备,各种教学辅助工具(例如学习机、早教机)、智能玩具、便携式机器人、个人数字助理(personal digitalassistant,PDA)、增强现实技术(augmented reality,AR)设备、虚拟现实(virtualreality,VR)设备等。
为了能够更好地理解本申请实施例,下面对本申请实施例的电子设备的硬件结构进行介绍。示例性地,图1为本申请实施例提供的一种电子设备的结构示意图。
电子设备可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,传感器模块180,按键190,指示器192,摄像头193,以及显示屏194等。
可选地,上述传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备的具体限定。在本申请另一些实施例中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。处理器110中还可以设置存储器,用于存储指令和数据。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备充电,也可以用于电子设备与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。电源管理模块141用于连接充电管理模块140与处理器110。
电子设备的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备中的天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。
移动通信模块150可以提供应用在电子设备上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。
无线通信模块160可以提供应用在电子设备上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM)等无线通信的解决方案。
电子设备通过GPU,显示屏194以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,电子设备可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
摄像头193用于捕获静态图像或视频。在一些实施例中,电子设备可以包括1个或N个摄像头193,N为大于1的正整数。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。
电子设备可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备可以通过扬声器170A收听音乐,或收听免提通话。受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。陀螺仪传感器180B可以用于确定电子设备的运动姿态。气压传感器180C用于测量气压。磁传感器180D包括霍尔传感器。加速度传感器180E可检测电子设备在各个方向上(一般为三轴)加速度的大小。距离传感器180F,用于测量距离。接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。环境光传感器180L用于感知环境光亮度。指纹传感器180H用于采集指纹。温度传感器180J用于检测温度。触摸传感器180K,也称“触控器件”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。骨传导传感器180M可以获取振动信号。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备可以接收按键输入,产生与电子设备的用户设置以及功能控制有关的键信号输入。指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
电子设备的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。分层架构可以采用安卓(Android)系统,也可以采用苹果(IOS)系统,还可以采样其他操作系统,本申请实施例对此不作限定。
下面以分层架构的Android系统为例,示例性说明电子设备的软件结构。
图2为本申请实施例适用的电子设备的一种软件结构框图。分层架构将电子设备的软件系统分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,可以将Android系统分为四层,从上到下依次为应用程序层、应用程序框架层(application framework)、系统服务、安卓运行时(Android runtime)和系统库、以及内核层(kernel)。
应用程序层可以包括一系列应用程序包,应用程序层通过调用应用程序框架层所提供的应用程序接口(application programming interface,API)运行应用程序。如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供API和编程框架。应用程序框架层包括一些预先定义的函数。如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。电话管理器用于提供电子设备的通信功能。例如通话状态的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
安卓系统运行时包括核心库和虚拟机。安卓系统运行时负责安卓系统的调度和管理。核心库包含两部分:一部分是Java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的Java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统服务可以包括C语言或者C++语言的库,可以被Android系统中不同的组件使用,还可以通过应用程序框架层为开发者提供服务。系统服务可以包括第一踩内存定位模块和内存使用模块。第一踩内存定位模块用于监测内存空间是否发生踩内存问题,并在发生踩内存问题的情况下,对踩内存问题进行定位。内存使用模块包括用户态已经被占用的内存空间。
系统库可以包含多个功能的模块,例如:图层管理器和媒体库等。
图层(Surface)管理器用于对显示子系统进行管理,并且为多个应用程序提供了二维图层和三维图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:JPG,PNG等。
可选地,第一踩内存定位模块可以包括多个模块,分别用于监测内存空间是否发生踩内存问题,用于在发生踩内存问题的情况下,对踩内存问题进行定位,本申请实施例对该模块的数量不作限定。
示例性地,图3为本申请实施例中的第一踩内存定位模块的软件结构框图。如图3所示,第一踩内存定位模块可以包括扫描线程模块(scan thread module)、扫描策略模块(scan policy module)、获取内存模块(hold memory module)、输出信息模块(dumpmodule)以及定位模块(position module)。
其中,扫描线程模块用于创建监测线程,以对内存空间进行监测。扫描策略模块用于确定监测的内存空间的大小、监测的内存空间的个数以及监测的内存空间为静态内存或动态内存中。获取内存模块用于根据扫描策略模块中的策略获取内存空间。输出信息模块用于输出监测的内存空间的异常信息。定位模块用于根据内存空间的异常信息对踩内存问题进行定位。
内核层是硬件和软件之间的层。内核层用于驱动硬件,使得硬件工作。内核层至少包含摄像头驱动和传感器驱动等,本申请实施例对此不做限制。内核层也可以同时作为硬件和软件栈之间的抽象层,可以包含多个库模块,库模块如可以为第二踩内存定位模块和内存分配模块等。其中,第二踩内存定位模块用于检测内存空间是否发生踩内存问题,并在发生踩内存问题的情况下,对踩内存问题进行定位。内存分配模块用于分配内存空间。
可选地,内存分配模块可以通过内存分配函数(例如memfd_create)分配内存空间。在一种可能的实现方式中,内存分配模块分配的内存空间可以仅允许用户态的进程使用(可以通过MMU或者IOMMU等内存硬件配置),可以不允许内核代码访问。Android系统可以为设备硬件加载相应的库模块,进而实现应用程序框架层访问设备硬件的目的。
可选地,第二踩内存定位模块可以包括多个模块,分别用于监测内存空间是否发生踩内存问题,用于在发生踩内存问题的情况下,对踩内存问题进行定位,本申请实施例对该模块的数量不作限定。
示例性地,第二踩内存定位模块可以与上述第一踩内存定位模块类似,包括扫描线程模块、扫描策略模块、获取内存模块、输出信息模块以及定位模块,这些模块的功能如上所述,此处不再赘述。但应理解,上述第一踩内存定位模块和第二踩内存定位模块中所包括的模块的数量可以相同,也可以不同,本申请实施例对此不作限定。
为了实现本申请实施例的踩内存问题的定位方法,下面先结合表一对上述第一踩内存定位模块、内存使用模块、第二踩内存定位模块以及内存分配模块进行详细说明。
表一
如表一所示,第一踩内存定位模块和内存分配模块均为内核层新增模块,第一踩内存定位模块用于在内核启动时间内,对踩内存问题进行定位。内存分配模块用于分配内存空间,还可以使分配的内存空间仅允许用户态的进程使用。第二踩内存定位模块和内存使用模块均为系统服务新增模块,第二踩内存定位模块用于在系统处于用户态时,对踩内存问题进行定位。内存使用模块包括用户态已经被占用的内存空间。
可选地,上述第一踩内存定位模块也可以称为内核占位模块,内存分配模块也可以称为保护内存模块,第二踩内存定位模块也可以称为用户态内核占位模块。
应理解,上述图2和图3中所示出的各个模块的名称仅仅为本申请实施例为了便于介绍给出的示例,本申请实施例对这些模块的名称不作限定。
图4为本申请实施例提供的一种踩内存问题的定位方法400的示意性流程图。该方法可以应用于电子设备,电子设备的硬件结构图可以如图1所示,电子设备的软件结构框图可以如图2所示,但本申请实施例对此不作限定。
如图4所示,该方法400包括以下步骤:
S401、分配第一目标内存空间。
第一目标内存空间可以为用户态进程申请的内存空间,电子设备可以为用户态进程分配第一目标内存空间。
第一目标内存空间可以为1吉字节(Gigabyte,GB)、2GB或者4GB,本申请实施例对第一目标内存空间的大小不作限定。应理解,第一目标内存空间的大小也可以称为第一目标内存空间的长度,本申请实施例对此不作限定。
第一目标内存空间可以为1个、2个或者2个以上,本申请实施例对第一目标内存空间的个数不作限定。应理解,当第一目标内存空间为1个时,第一目标内存空间的大小不得超过电子设备内存空间的总数;当第一目标内存空间为多个时,第一目标内存空间的总和不得超过电子设备内存空间的总数。
示例性地,电子设备的内存空间的总数为8G,当第一目标内存空间为1个时,第一目标内存空间不得超过8G;当第一目标内存空间为多个时,第一目标内存空间的总和不能超过8G。
第一目标内存空间可以为电子设备空闲的内存空间或用户态正在使用的内存空间。
在一种可能的实现方式中,第一目标内存空间可以为电子设备空闲的内存空间,即电子设备可以为用户态进程从该空闲的内存空间中分配全部或部分的内存空间作为第一目标内存空间。
示例性地,电子设备内存空间的总数为8G,电子设备空闲的内存空间为4G,电子设备可以为用户态进程从该空闲的内存空间中分配1G作为第一目标内存空间。
在另一种可能的实现方式中,第一目标内存空间可以为用户态正在使用的内存空间,即电子设备可以为用户态进程从该用户态正在使用的内存空间中分配全部或部分的内存空间作为第一目标内存空间。
示例性地,电子设备内存空间的总数为8G,用户态正在使用的内存空间为4G,电子设备可以为用户态进程从用户态正在使用的内存空间中分配1G作为第一目标内存空间。
当第一目标内存空间的个数为多个时,第一目标内存空间可以包括电子设备空闲的内存空间和用户态正在使用的内存空间。
示例性地,第一目标内存空间的个数为3个,分别为目标内存空间1、目标内存空间2以及目标内存空间3。目标内存空间1、目标内存空间2可以均为电子设备空闲的内存空间,目标内存空间3可以为用户态正在使用的内存空间。
S402、监测第一目标内存空间中的信息是否被改写。
第一目标内存空间中的信息被改写,即第一目标内存空间中的信息发生改变。
示例性地,第一目标内存空间中的信息为10100111,第一目标内存空间中的信息被改写后变为10100000。
当第一目标内存空间电子设备空闲的内存空间时,第一目标内存空间中的信息是电子设备写入的。当第一目标内存空间可以为用户态正在使用的内存空间时,第一目标内存空间中的信息是用户态进程写入的。
可选地,电子设备可以每隔一段时间监测第一目标内存空间中的信息是否被改写,不需要一直监测,可以节省电子设备的处理资源。
S403、在第一目标内存空间中的信息被改写的情况下,获取内存异常信息,内存异常信息包括被改写的信息对应的内存区域和/或被改写的信息对应的物理地址。
应理解,被改写的信息对应的内存区域应小于或等于第一目标内存空间的大小。
被改写的信息对应的物理地址,即被改写的信息对应的内存空间的物理地址。
可选地,上述方法还包括:输出改写后的信息和/或所述被改写的信息对应的内核页表状态。
内核页表状态可以包括内核页表的访问权限、内核页表的读、内核页表的写操作或者内核页表的读写操作中的至少一个。
电子设备输出改写后的信息和/或所述被改写的信息对应的内核页表状态,以便于用户或者开发人员确定电子设备定位的踩内存问题是否正确。
应理解,本申请实施例中的输出可以是显示输出也可以是隐式输出。显示输出可以指以窗口的形式显示在界面上。隐式输出可以指在输出到文档中。本申请实施例对具体的输出方式不作限定。
S404、根据内存异常信息,进行踩内存问题的定位。
电子设备可以根据被改写的信息对应的内存区域和/或被改写的信息对应的物理地址,进行踩内存问题的定位。
电子设备获取内存异常信息后,可以直接根据内存异常信息,进行踩内存问题的定位,还可以将内存异常信息保存到日志中,以便于后续查看。
本申请实施例提供的踩内存问题的定位方法,可以根据被改写的信息对应的内存区域和/或被改写的信息对应的物理地址,进行踩内存问题的定位,以便于开发人员解决踩内存问题,以提高用户体验。
可选地,上述第一目标内存空间可以包括静态内存空间和/或动态内存空间。其中,静态内存可以指电子设备在预设时间分配内存空间。动态内存空间可以指电子设备在每隔一段时间分配内存空间。
在一种可能的实现方式中,第一目标内存空间为静态内存空间。例如,电子设备可以为电子设备开机30分钟后分配第一目标内存空间。
该方式中,电子设备可以一直监测第一目标内存空间,可以定位出该第一目标内存空间的踩内存问题,有利于后续解决该第一目标内存空间的踩内存问题。
在另一种可能的实现方式中,第一目标内存空间为动态内存空间。例如,电子设备可以为电子设备开机30分钟后,每隔10分钟分配一次第一目标内存空间,每次分配的第一目标内存空间可以不同。
该方式中,电子设备可以不断更换监测的第一目标内存空间,可以对不同时间不同内存空间的踩内存问题进行定位,有利于定位出更多的踩内存问题。
在又一种可能的实现方式中,第一目标内存空间包括静态内存空间和动态内存空间。
应理解,该实现方式中,第一目标内存空间的个数为多个,即至少两个。
该方式中,电子设备可以一直监测目标内存空间,也可以不断更换监测的目标内存空间,可以更全面的对踩内存问题进行定位。
作为一个可选的实施例,上述S404、根据内存异常信息,进行踩内存问题的定位,可以包括:判断被改写的信息对应的内存区域的大小是否超过第一阈值;在被改写的信息对应的内存区域的大小大于第一阈值的情况下,将踩内存问题确定为内核态代码导致的踩内存问题。
第一阈值可以是预设的,例如,第一阈值可以为字节(byte),即当被改写的信息大于1比特时,电子设备将踩内存问题确定为内核态代码导致的踩内存问题。应理解,本申请实施例对第一阈值的具体大小不做限定。
可选地,在被改写的信息对应的内存区域的大小小于或等于第一阈值的情况下,将踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
应理解,上述电子设备确定内核态代码导致的踩内存问题或DDR导致的踩内存问题的同时,可以输出改写后的信息和/或所述被改写的信息对应的内核页表状态,以便于用户或者开发人员确定电子设备定位的踩内存问题是否正确。
本申请实施例提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的内存区域的大小是否超过第一阈值,确定是内核态代码导致的踩内存问题或者DDR导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
作为一个可选的实施例,在将踩内存问题确定为内核态代码导致的踩内存问题之后,上述方法400还包括:判断被改写的信息对应的物理地址的出现次数是否超过第二阈值;在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将内核态代码导致的踩内存问题确定为由于内核中的IOMMU或者DMA的访问导致的踩内存问题。
第二阈值可以是预设的,例如,第二阈值可以为6次,即当被改写的信息对应的物理地址的出现次数超过6次时,电子设备将内核态代码导致的踩内存问题确定为由于内核中的IOMMU或者DMA的访问导致的踩内存问题。应理解,本申请实施例对第二阈值的具体大小不做限定。
还应理解,本申请实施例对被改写的信息对应的物理地址的出现次数小于或等于第二阈值的情况不做限定。
可选地,上述由于内核中的IOMMU或者DMA的访问导致的踩内存问题的同时,可以输出改写后的信息和/或所述被改写的信息对应的内核页表状态,以便于用户或者开发人员确定电子设备定位的踩内存问题是否正确。
本申请实施例提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的物理地址的出现次数超过第二阈值,确定是由于内核中的IOMMU或者DMA的访问导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
作为一个可选的实施例,在上述被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,电子设备还可以将被改写的信息对应的物理地址设置为不允许IOMMU访问;判断被改写的信息对应的物理地址是否被IOMMU访问;在被改写的信息对应的物理地址被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题。
可选地,在被改写的信息对应的物理地址未被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
本申请实施例提供的踩内存问题的定位方法,可以通过判断被改写的信息对应的物理地址是否被IOMMU访问,确定是由于IOMMU导致的踩内存问题还是由于DMA的访问导致的踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
在图3所示的第一踩内存定位模块的软件结构框图的基础之上,图5进一步示出了基于图2和图3所示的软件架构的踩内存问题的定位方法500的示意性流程图。
如图5所示,该方法500可以包括如下步骤:
S501、扫描线程模块创建开始线程,以开始进行踩内存问题的定位。
示例性地,开始线程可以为start scan kthread。扫描线程模块通过start scankthread开始进行踩内存问题的定位。
S502、扫描策略模块确定第一目标内存空间的信息,该第一目标内存空间的信息包括第一目标内存空间的大小、第一目标内存空间的个数以及第一目标内存空间为静态内存或者动态内存。
第一目标内存空间的信息可以参考上述方法400,此处不再赘述。
S503、扫描策略向获取内存模块发送第一目标内存空间的信息,对应地,获取内存模块接收第一目标内存空间的信息。
S504、获取内存模块基于第一目标内存空间的信息,向内存分配模块发送申请第一目标内存空间的请求,对应地,内存分配模块接收申请第一目标内存空间的请求。
示例性地,获取内存模块可以基于分配内存函数(allocMemory)向内存分配模块发送申请第一目标内存空间的请求。
S505、内存分配模块基于该申请第一目标内存空间的请求,向获取内存模块发送第一目标内存空间,对应地,获取内存模块接收第一目标内存空间。
内存分配模块可以在电子设备空间的内存空间中分配第一目标内存空间,也可以在用户态已经占用的内存空间中分配第一目标内存空间。
在内存分配模块在用户态已经占用的内存空间中分配第一目标内存空间的情况下,内存分配模块可以分配内存使用模块中用户态进程已经使用的内存空间。
第一目标内存空间可以允许内核态代码访问,也可以不允许内核态代码访问,本申请实施例对此不作限定。
S506、扫描线程模块创建监测线程,该监测线程用于监测第一目标内存空间的信息是否被改写。
在第一目标内存空间为空闲的内存空间的情况下,扫描线程模块还可以创建填充线程(例如fillMagic),该填充线程用于在第一目标内存空间中写入信息,监测线程监测第一目标内存空间的信息是否被改写。
在第一目标内存空间为用户态已经占用的内存空间的情况下,第一目标内存空间中已存有信息,监测线程监测第一目标内存空间的信息是否被改写。
S507、在第一目标内存空间中的信息被改写的情况下,扫描线程模块向输出信息模块发送指示信息,该指示信息用以指示输出信息模块输出内存异常信息,对应地,输出信息模块接收该指示信息。
S508、输出信息模块基于该指示信息,输出内存异常信息。
示例性地,输出信息模块可以通过转储(dump)函数获取内存异常信息并输出。输出信息模块可以将异常信息保存在tombstone日志中,以便后续查看。
内存异常信息中包括的具体信息可以参考上述方法400,此处不再赘述。
S509、输出信息模块向定位模块发送内存异常信息。
S510、定位模块根据该内存异常信息,进行踩内存问题的定位。
定位模块的具体定位方法可以参考上述方法400的描述,此处不再赘述。
本申请实施例提供的踩内存问题的定位方法,可以根据内存异常信息,进行踩内存问题的定位,具备踩内存故障定位的能力,以便于开发人员解决踩内存问题,以提高用户体验。
上述方法400和方法500描述的是在用户态进行踩内存问题的定位方法,下面,将结合方法600和方法700描述在内核态进行踩内存问题的定位方法。
图6为本申请实施例提供的又一种踩内存问题的定位方法600的示意性流程图。该方法600可以应用于电子设备,电子设备的硬件结构图可以如图1所示,电子设备的软件结构框图可以如图2所示,但本申请实施例对此不作限定。
如图6所示,该方法600包括以下步骤:
S601、在开机启动时,创建用于定位踩内存问题的内核线程。
电子设备开机启动时,进入内核态,电子设备创建用于定位踩内存问题的内核线程。
S602、通过内核线程分配第二目标内存空间,并监测第二目标内存空间是否被内核态代码访问,第二目标内存空间仅允许用户态进程使用。
第二目标内存空间允许被用户态的进程使用,不允许被内核态代码访问。
第二目标内存空间可以为1吉字节(gigabyte,GB)、2GB或者4GB,本申请实施例对第二目标内存空间的大小不作限定。应理解,第二目标内存空间的大小也可以称为第二目标内存空间的长度,本申请实施例对此不作限定。
第二目标内存空间可以为1个、2个或者2个以上,本申请实施例对第一目标内存空间的个数不作限定。应理解,当第二目标内存空间为1个时,第一目标内存空间的大小不得超过电子设备内存空间的总数;当第二目标内存空间为多个时,第一目标内存空间的总和不得超过电子设备内存空间的总数。
第一目标内存空间可以为电子设备空闲的内存空间或用户态正在使用的内存空间。
可选地,上述第一目标内存空间可以包括静态内存空间和/或动态内存空间。
S603、在第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
应理解,第二目标内存空间不允许被内核态代码访问,在第二目标内存空间被内核态代码访问的情况下,出现内核态代码访问第二目标内存空间,即出现异常现象,可以将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
本申请实施例提供的踩内存问题的定位方法,通过监测第二目标内存空间的踩内存问题,可以直接确定踩内存问题为内核态代码访问用户态进程导致的踩内存问题,具备踩内存故障定位的能力,更加全面的监测踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
在上面介绍的第二踩内存定位模块的软件结构框图的基础之上,图7进一步示出了基于图2和第二踩内存定位模块的软件架构的踩内存问题的定位方法700的示意性流程图。
如图7所示,该方法700可以包括如下步骤:
S701、在开机启动时,扫描线程模块创建用于定位踩内存问题的内核线程。
示例性地,用于定位踩内存问题的内核线程可以为start kthread。扫描线程模块通过start kthread开始进行踩内存问题的定位。
S702、扫描策略模块确定第二目标内存空间的信息,该第二目标内存空间的信息包括第二目标内存空间的大小、第二目标内存空间的个数以及第二目标内存空间为静态内存或者动态内存。
第二目标内存空间的信息可以参考上述方法400中第一目标内存空间的信息,此处不再赘述。
S703、扫描策略向获取内存模块发送第二目标内存空间的信息,对应地,获取内存模块接收第二目标内存空间的信息。
S704、获取内存模块基于第二目标内存空间的信息,向内存分配模块发送申请第二目标内存空间的请求,对应地,内存分配模块接收申请第二目标内存空间的请求。
示例性地,获取内存模块可以基于分配内存函数(allocMemory)向内存分配模块发送申请第一目标内存空间的请求。
S705、内存分配模块基于该申请第二目标内存空间的请求,向获取内存模块发送第二目标内存空间,该第二目标内存空间仅允许用户态进程使用,对应地,获取内存模块接收第二目标内存空间。
内存分配模块可以在电子设备空间的内存空间中分配第二目标内存空间,也可以在用户态已经占用的内存空间中分配第二目标内存空间。
在内存分配模块在用户态已经占用的内存空间中分配第二目标内存空间的情况下,内存分配模块可以分配内存使用模块中用户态进程已经使用的内存空间。
S706、扫描线程模块创建监测内核线程,该监测线程用于监测第二目标内存空间是否被内核态代码访问。
S707、在第二目标内存空间被内核态代码访问的情况下,扫描线程模块向定位模块发送包括第二目标内存空间被内核态代码访问的信息,对应地,定位模块接收包括第二目标内存空间被内核态代码访问的信息。
S708、定位模块根据包括第二目标内存空间被内核态代码访问的信息,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
可选地,在第二目标内存空间被内核态代码访问的情况下,扫描线程模块还可以指示输出信息模块输出内存异常信息,该内存异常信息用于判断定位模块定位的踩内存问题的准确性。
本申请实施例提供的踩内存问题的定位方法,通过监测第二目标内存空间的踩内存问题,可以确定踩内存问题为内核态代码访问用户态进程导致的踩内存问题,具备踩内存故障定位的能力,更加全面的监测踩内存问题,以便于开发人员解决踩内存问题,以提高用户体验。
应理解,上述方法600和方法700均描述在内核态对第二目标内存空间进行踩内存问题的定位方法。
电子设备可以通过多种可能的实现方式执行上述方法400和方法600。
在一种可能的实现方式中,电子设备可以执行上述方法400或者上述方法600,即电子设备可以只在内核态对踩内存问题进行定位或者只在用户态对踩内存问题进行定位。
在另一种可能的实现方式中,电子设备可以在方法400之前执行上述600,在方法600执行一段时间之后,释放执行方法600的线程,并执行方法400,其中,该段时间的时长可以是预设的,例如,30分钟。
示例性地,在上述S401、分配第一目标内存空间之前,上述方法400还包括:判断是否存在用于定位踩内存问题的内核线程;在内核线程不存在的情况下,分配第一目标内存空间。
具体而言,用于定位踩内存问题的内核线程部署于内核态,可以定位内核态的踩内存问题,上述S401~S404部署于用户态,可以定位用户态的踩内存问题,电子设备要先判断是否存在用于定位踩内存问题的内核线程,在用于定位踩内存问题的内核线程不存在的情况下,电子设备可以执行上述方法400。在用于定位踩内存问题的内核线程存在的情况下,电子设备进入等待状态并实时监测,当监测到用于定位踩内存问题的内核线程不存在时,电子设备可以开始执行上述方法400。
可选地,电子设备可以在方法400之前执行上述600,在电子设备进入用户态时,释放执行方法600的线程,并执行方法400。
该实现方式中,电子设备在用户态或者内核态并不同时执行踩内存问题的定位方法,有利于减少电子设备的功率损失,提升电子设备的性能。
在又一种可能的实现方式中,电子设备可以在方法400之前执行上述600,在方法400执行一段时间之后,执行方法400,此时,方法600和方法400同时执行。
电子设备在开机启动时处于内核态,可以执行方法600,一段时间后,电子设备进入用户态和内核态并存的状态,可以执行方法600和方法400。
该实现方式中,在用户态和内核态分别执行踩内存问题的定位方法,可以监测用户态和内核态的踩内存问题,有利于监测更多的踩内存问题,提高定位踩内存问题的效率。
可选地,在电子设备执行方法400的情况下,电子设备可以在执行方法400之前,可以先判断电子设备的内存空间总数是否大于或等于预设阈值,在电子设备的内存空间总数大于或等于预设阈值的情况下,执行方法400。例如,预设阈值可以为8G。
可选地,上述电子设备在执行方法600之前,可以先判断电子设备的内存空间总数是否大于或等于预设阈值,在电子设备的内存空间总数大于或等于预设阈值的情况下,电子设备执行方法600。例如,预设阈值可以为8G。
示例性地,图8示出了又一种踩内存问题的定位方法800的示意性流程图。该如图8所示,该方法800可以应用于电子设备,电子设备的硬件结构图可以如图1所示,电子设备的软件结构框图可以如图2所示,但本申请实施例对此不作限定。
如图8所示,该方法800可以包括以下步骤:
S801、在开机启动时,进行初始化。
电子设备在开机启动时,先启动内核,可以先对内核进行初始化。例如,电子设备可以通过内核初始化函数(kernel init)对内核进行初始化。
S802、判断电子设备的内存空间总数是否大于或等于预设阈值。
S803、在电子设备的内存空间总数大于或等于预设阈值的情况下,创建用于定位踩内存问题的内核线程。
S804、通过内核线程分配第二目标内存空间,并监测第二目标内存空间是否被内核态代码访问,第二目标内存空间仅允许用户态进程使用。
S805、在第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
应理解,在电子设备的内存空间总数小于预设阈值的情况下,电子设备将不进行踩内存问题的定位。
本申请实施例提供的踩内存问题的定位方法,在对踩内存问题进行定位之前,先判断内存空间总数是否大于或等于预设阈值,在电子设备的内存空间总数大于或等于预设阈值的情况下,对踩内存问题进行定位,在电子设备在进行踩内存问题定位的同时,有利于保证电子设备的其他功能正常使用,有利于提高电子设备的性能。
上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
上文中结合图1至图8,详细描述了本申请实施例提供的用于运行应用程序的方法,下面将结合图9和图10,详细描述本申请实施例提供的电子设备。
图9示出了本申请实施例提供的一种电子设备900,该电子设备900包括:处理模块910和获取模块920。其中,处理模块910用于:分配第一目标内存空间;以及,监测第一目标内存空间中的信息是否被改写;获取模块920用于:在第一目标内存空间中的信息被改写的情况下,获取内存异常信息,内存异常信息包括被改写的信息对应的内存区域和/或被改写的信息对应的物理地址;处理模块用于:根据内存异常信息,进行踩内存问题的定位。
可选地,上述处理模块910还用于:判断被改写的信息对应的内存区域的大小是否超过第一阈值;在被改写的信息对应的内存区域的大小大于第一阈值的情况下,将踩内存问题确定为内核态代码导致的踩内存问题。
可选地,上述处理模块910还用于:判断被改写的信息对应的物理地址的出现次数是否超过第二阈值;在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将内核态代码导致的踩内存问题确定为由于内核中的输入/输出内存管理单元IOMMU或者直接存储器访问DMA的访问导致的踩内存问题。
可选地,上述处理模块910还用于:在被改写的信息对应的物理地址的出现次数超过第二阈值的情况下,将被改写的信息对应的物理地址设置为不允许IOMMU访问;判断被改写的信息对应的物理地址是否被IOMMU访问;在被改写的信息对应的物理地址被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题。
可选地,上述处理模块910还用于:在被改写的信息对应的物理地址未被IOMMU访问的情况下,将内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
可选地,上述处理模块910还用于:在被改写的信息对应的内存区域的大小小于或等于第一阈值的情况下,将踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
可选地,上述处理模块910还用于:输出改写后的信息和/或被改写的信息对应的内核页表状态。
可选地,上述处理模块910还用于:判断是否存在用于定位踩内存问题的内核线程;在内核线程不存在的情况下,分配第一目标内存空间。
可选地,上述第一目标内存空间包括静态内存空间或动态内存空间。
可选地,上述处理模块910还用于:在开机启动时,创建用于定位踩内存问题的内核线程;通过内核线程分配第二目标内存空间,并监测第二目标内存空间是否被内核态代码访问,第二目标内存空间仅允许用户态进程使用;在第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
应理解,这里的电子设备900以功能模块的形式体现。这里的术语“模块”可以指应用特有集成电路(application specific integrated circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。在一个可选的例子中,本领域技术人员可以理解,电子设备900可以具体为上述方法实施例中的电子设备,或者,上述方法实施例中电子设备的功能可以集成在电子设备900中,电子设备900可以用于执行上述方法实施例中与电子设备对应的各个流程和/或步骤,为避免重复,在此不再赘述。
上述电子设备900具有实现上述方法实施例中电子设备执行的相应步骤的功能;上述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
在本申请的实施例中,图9中的电子设备900也可以是芯片或者芯片系统,例如:片上系统(system on chip,SoC)。
图10是本申请实施例提供的另一种电子设备1000的示意性框图。该电子设备1000包括处理器1010、通信接口1020和存储器1030。其中,处理器1010、通信接口1020和存储器1030通过内部连接通路互相通信,该存储器1030用于存储指令,该处理器1020用于执行该存储器1030存储的指令,以控制该通信接口1020发送信号和/或接收信号。
应理解,电子设备1000可以具体为上述方法实施例中的电子设备,或者,上述方法实施例中电子设备的功能可以集成在电子设备1000中,电子设备1000可以用于执行上述方法实施例中与电子设备对应的各个步骤和/或流程。可选地,该存储器1030可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。该处理器1010可以用于执行存储器中存储的指令,并且该处理器执行该指令时,该处理器可以执行上述方法实施例中与电子设备对应的各个步骤和/或流程。
应理解,在本申请实施例中,该处理器1010可以是中央处理单元(centralprocessing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器执行存储器中的指令,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质用于存储计算机程序,该计算机程序用于实现上述方法实施例中电子设备对应的方法。
本申请还提供了一种芯片系统,该芯片系统用于支持上述方法实施例中电子设备实现本申请实施例所示的功能。
本申请还提供了一种计算机程序产品,该计算机程序产品包括计算机程序(也可以称为代码,或指令),当该计算机程序在计算机上运行时,该计算机可以执行上述方法实施例所示的电子设备对应的方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应所述以权利要求的保护范围为准。
Claims (24)
1.一种踩内存问题的定位方法,其特征在于,包括:
分配第一目标内存空间;
监测所述第一目标内存空间中的信息是否被改写;
在所述第一目标内存空间中的信息被改写的情况下,获取内存异常信息,所述内存异常信息包括被改写的信息对应的内存区域和/或所述被改写的信息对应的物理地址;
根据所述内存异常信息,进行踩内存问题的定位。
2.根据权利要求1所述的方法,其特征在于,所述根据所述内存异常信息,进行踩内存问题的定位,包括:
判断所述被改写的信息对应的内存区域的大小是否超过第一阈值;
在所述被改写的信息对应的内存区域的大小大于所述第一阈值的情况下,将所述踩内存问题确定为内核态代码导致的踩内存问题。
3.根据权利要求2所述的方法,其特征在于,在所述将所述踩内存问题确定为内核态代码导致的踩内存问题之后,所述方法还包括:
判断所述被改写的信息对应的物理地址的出现次数是否超过第二阈值;
在所述被改写的信息对应的物理地址的出现次数超过所述第二阈值的情况下,将所述内核态代码导致的踩内存问题确定为由于内核中的输入/输出内存管理单元IOMMU或者直接存储器访问DMA的访问导致的踩内存问题。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述被改写的信息对应的物理地址的出现次数超过所述第二阈值的情况下,将所述被改写的信息对应的物理地址设置为不允许IOMMU访问;
判断所述被改写的信息对应的物理地址是否被IOMMU访问;
在所述被改写的信息对应的物理地址被IOMMU访问的情况下,将所述内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述被改写的信息对应的物理地址未被IOMMU访问的情况下,将所述内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
6.根据权利要求2至5中任一项所述的方法,其特征在于,所述方法还包括:
在所述被改写的信息对应的内存区域的大小小于或等于所述第一阈值的情况下,将所述踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述方法还包括:
输出改写后的信息和/或所述被改写的信息对应的内核页表状态。
8.根据权利要求1至7中任一项所述的方法,其特征在于,在所述分配第一目标内存空间之前,所述方法还包括:
判断是否存在用于定位踩内存问题的内核线程;
在所述内核线程不存在的情况下,分配所述第一目标内存空间。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述第一目标内存空间包括静态内存空间或动态内存空间。
10.根据权利要求1至9中任一项所述的方法,其特征在于,在所述分配第一目标内存空间之前,所述方法还包括:
在开机启动时,创建用于定位踩内存问题的内核线程;
通过所述内核线程分配第二目标内存空间,并监测所述第二目标内存空间是否被内核态代码访问,所述第二目标内存空间仅允许用户态进程使用;
在所述第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
11.一种电子设备,其特征在于,包括:
处理模块,用于分配第一目标内存空间;以及,监测所述第一目标内存空间中的信息是否被改写;
获取模块,用于在所述第一目标内存空间中的信息被改写的情况下,获取内存异常信息,所述内存异常信息包括被改写的信息对应的内存区域和/或所述被改写的信息对应的物理地址;
所述处理模块还用于:根据所述内存异常信息,进行踩内存问题的定位。
12.根据权利要求11所述的电子设备,其特征在于,所述处理模块还用于:
判断所述被改写的信息对应的内存区域的大小是否超过第一阈值;
在所述被改写的信息对应的内存区域的大小大于所述第一阈值的情况下,将所述踩内存问题确定为内核态代码导致的踩内存问题。
13.根据权利要求12所述的电子设备,其特征在于,所述处理模块还用于:
判断所述被改写的信息对应的物理地址的出现次数是否超过第二阈值;
在所述被改写的信息对应的物理地址的出现次数超过所述第二阈值的情况下,将所述内核态代码导致的踩内存问题确定为由于内核中的输入/输出内存管理单元IOMMU或者直接存储器访问DMA的访问导致的踩内存问题。
14.根据权利要求13所述的电子设备,其特征在于,所述处理模块还用于:
在所述被改写的信息对应的物理地址的出现次数超过所述第二阈值的情况下,将所述被改写的信息对应的物理地址设置为不允许IOMMU访问;
判断所述被改写的信息对应的物理地址是否被IOMMU访问;
在所述被改写的信息对应的物理地址被IOMMU访问的情况下,将所述内核态代码导致的踩内存问题确定为由于IOMMU的访问导致的踩内存问题。
15.根据权利要求14所述的电子设备,其特征在于,所述处理模块还用于:
在所述被改写的信息对应的物理地址未被IOMMU访问的情况下,将所述内核态代码导致的踩内存问题确定为由于DMA的访问导致的踩内存问题。
16.根据权利要求12至15中任一项所述的电子设备,其特征在于,所述处理模块还用于:
在所述被改写的信息对应的内存区域的大小小于或等于所述第一阈值的情况下,将所述踩内存问题确定为双倍速率同步动态随机存储器DDR导致的踩内存问题。
17.根据权利要求11至16中任一项所述的电子设备,其特征在于,所述处理模块还用于:
输出改写后的信息和/或所述被改写的信息对应的内核页表状态。
18.根据权利要求11至17中任一项所述的电子设备,其特征在于,所述处理模块还用于:
判断是否存在用于定位踩内存问题的内核线程;
在所述内核线程不存在的情况下,分配所述第一目标内存空间。
19.根据权利要求11至18中任一项所述的电子设备,其特征在于,所述第一目标内存空间包括静态内存空间或动态内存空间。
20.根据权利要求11至19中任一项所述的电子设备,其特征在于,所述处理模块还用于:
在开机启动时,创建用于定位踩内存问题的内核线程;
通过所述内核线程分配第二目标内存空间,并监测所述第二目标内存空间是否被内核态代码访问,所述第二目标内存空间仅允许用户态进程使用;
在所述第二目标内存空间被内核态代码访问的情况下,将踩内存问题确定为内核态代码访问用户态进程导致的踩内存问题。
21.一种电子设备,其特征在于,包括:处理器,所述处理器与存储器耦合,所述存储器用于存储计算机程序,当所述处理器调用所述计算机程序时,使得所述装置执行如权利要求1至10中任一项所述的方法。
22.一种芯片系统,其特征在于,包括:处理器,用于从存储器中调用并运行计算机程序,使得安装有所述芯片系统的设备实现如权利要求1至10中任一项所述的方法。
23.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序包括用于实现如权利要求1至10中任一项所述的方法的指令。
24.一种计算机程序产品,其特征在于,所述计算机程序产品中包括计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机实现如权利要求1至10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210020899.8A CN116450473A (zh) | 2022-01-10 | 2022-01-10 | 踩内存问题的定位方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210020899.8A CN116450473A (zh) | 2022-01-10 | 2022-01-10 | 踩内存问题的定位方法和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116450473A true CN116450473A (zh) | 2023-07-18 |
Family
ID=87132569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210020899.8A Pending CN116450473A (zh) | 2022-01-10 | 2022-01-10 | 踩内存问题的定位方法和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116450473A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891368A (zh) * | 2024-03-18 | 2024-04-16 | 成都融见软件科技有限公司 | 一种代码定位方法、电子设备及存储介质 |
-
2022
- 2022-01-10 CN CN202210020899.8A patent/CN116450473A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891368A (zh) * | 2024-03-18 | 2024-04-16 | 成都融见软件科技有限公司 | 一种代码定位方法、电子设备及存储介质 |
CN117891368B (zh) * | 2024-03-18 | 2024-05-14 | 成都融见软件科技有限公司 | 一种代码定位方法、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240231890A1 (en) | Memory management method and electronic device | |
CN113448815B (zh) | 一种采集追踪trace调用链的方法和电子设备 | |
US20150347263A1 (en) | Function-level dynamic instrumentation | |
CN116450473A (zh) | 踩内存问题的定位方法和电子设备 | |
CN116467221B (zh) | 一种基于解释器的插桩方法、系统及相关电子设备 | |
CN117130541B (zh) | 存储空间配置方法及相关设备 | |
CN108132817B (zh) | 对象管理方法及装置 | |
CN114398296B (zh) | 用于问题定位的方法和终端设备 | |
WO2021052489A1 (zh) | 一种确定多核处理器中故障计算核的方法及电子设备 | |
WO2021238376A1 (zh) | 功能包的加载方法、装置、服务器和电子设备 | |
CN112783418B (zh) | 一种存储应用程序数据的方法及移动终端 | |
CN116088955B (zh) | 进程处理方法和终端设备 | |
CN113312249A (zh) | 日志数据生成方法、日志数据显示方法及装置 | |
CN116662270B (zh) | 文件解析方法及相关装置 | |
CN116095685B (zh) | 关键信息的保护方法和终端设备 | |
CN116450372A (zh) | 共享内存泄露的定位方法和定位装置 | |
CN116088943B (zh) | 背光模组的控制方法和终端设备 | |
CN112732568B (zh) | 一种系统日志获取方法、装置、存储介质及终端 | |
WO2023169212A1 (zh) | 一种识别应用程序中sdk的方法、终端及服务器 | |
CN116450228A (zh) | 用于运行应用程序的方法和电子设备 | |
CN113536387A (zh) | 一种检测内核数据完整性的终端和方法 | |
CN116991532A (zh) | 一种虚拟机窗口的显示方法、电子设备及系统 | |
CN118277120A (zh) | 一种管理系统服务的方法及相关装置 | |
CN116627855A (zh) | 内存处理方法及相关装置 | |
CN116954936A (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 |