一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种异构众核软件调试装置及调试方法与流程

2022-03-22 20:21:29 来源:中国专利 TAG:


1.本发明涉及一种异构众核软件调试装置及调试方法,属于高性能计算领域。


背景技术:

2.软件调试工具提供断点、单步、打印等基本调试功能,分段执行被调试程序,分段粒度可从一条指令到一段程序,除了一系列调试功能,用户在应用中还可挖掘更多的调试技巧。调试工具是一个体系结构相关的软件,软硬件适配过程比较复杂,处理器的微结构和中断异常机制、操作系统的调试接口、语言编译器的调试信息规范、运行时库等都与之相关,调试工具从单核处理器发展到多核,按照一种固定的处理器硬件架构,来控制和理解程序的运行。现有软件调试工具按照一种固定的处理器硬件架构,来控制和理解程序的运行,同时,依赖的os调试接口只能面向传统的linux线程,不支持硬件线程的调试。异构众核处理器的两种处理器单元具有不同的微结构和中断机制,这种复杂性使当前所有的开源调试软件既不能支持异构处理器架构,也不能支持从核的软件调试。
3.当前,并行计算已广泛采用基于异构众核的低功耗高性能加速计算,而开源社区发布的软件调试器工具仍然处于多核处理器版本,其中gdb是linux上一个广泛使用、更新活跃的开源软件,支持主流编程语言的源码级调试,支持众多主流多核处理器的软件调试,但是没有发布主流众核芯片的版本,与众核体系结构相关的软件调试技术也很不成熟,这方面的软件发展明显滞后于硬件体系结构的发展。


技术实现要素:

4.本发明的目的是提供一种异构众核软件调试装置及调试方法,其可实现对异构并行代码的执行跟踪和错误定位。
5.为达到上述目的,本发明采用的技术方案是:提供一种异构众核软件调试装置,其特征在于,包括以下配置:从核调试代理线程sdbth:sdbth由主核os创建,运行在被跟踪进程tracee的地址空间内,循环执行一个低优先级的睡眠;当从核发出对主核的中断请求时,唤醒sdbth,所述中断请求包含调试中断请求和i/o请求;sdbth被唤醒后,在os核心态继续执行睡眠的系统调用,并给自己发调试信号;在从核心态返回用户态时,os检查发现调试信号,并发现进程跟踪标志位tf,于是唤醒调试器进程debug;调试器进程debug被唤醒后,得到对从核程序的执行控制权;如果中断请求是i/o请求,则将中断请求返给进程tracee,按照os缺省方式处理,即完成i/o请求原来设定的处理过程;如果中断请求是从核调试中断请求,则分析断点现场,返回给用户人工查看从核
程序停在断点的执行状态;在调试器进程debug中增加一套从核架构数据和一个切换开关;从核架构数据包括反汇编、硬件寄存器的读写、硬件断点的插入和删除操作、软件单步算法中下一条指令的地址计算;切换开关,用于控制主核与从核两种处理器架构的切换。
6.上述技术方案中进一步改进的方案如下:所述从核调试代理线程sdbth的创建时机包括以下两种情况:在应用程序执行到从核并行初始化时,如果被调试的标志tf已置,则从核运行时库在完成从核资源申请后创建sdbth,在从核资源释放后终止sdbth,否则,不创建sdbth;主核os增加一个/proc/lwpid/scoreid文件,其中,lwpid是线程号,scoreid是文件名,在创建sdbth时根据申请的从核资源创建其对应的scoreid文件,如果scoreid文件中存放-1,则lwpid指定的线程是主核上其它被调试的用户线程,如果scoreid文件中存放非负的整数,则lwpid表示从核号,该lwpid就是sdbth;在创建sdbth时,在scoreid文件中存放对应的从核号,而其它地方创建的线程,其scoreid文件的数据初始化为-1,表示主核线程;在调试器进程debug执行传统的attach流程之前,对tracee发送一个约定信号,tracee在从核运行时库中执行约定信号的中断处理函数,由中断处理函数创建sdbth,debug在执行传统的detach流程之前,终止sdbth。
7.还提供一种异构众核软件调试方法,基于上述的异构众核软件调试装置,其特征在于,包括以下步骤:s1、debug进程fork子进程,即tracee进程,置其调试标志tf,建立调试进程与被调试进程的控制关系;s2、tracee进程执行被调试的异构程序,完成从核资源申请和空间初始化;s3、当tf为真,tracee进程创建各从核对应的调试代理线程sdbth,在scorid文件中写入从核核号;s4、debug进程逐一捕获tracee进程空间的线程;s5、debug进程发现scorid非负的sdbth线程,建立sdbth与对应从核的控制关系;s6、debug进程初始化控制从核调试的架构数据;s7、debug进程根据从核正文段地址范围判断用户设置的断点是主核还是从核的断点;s8、debug进程按照主核架构,设置主核断点;s9、debug进程按照从核架构,设置从核断点;s10、debug进程恢复tracee进程运行;s11、tracee进程运行到达从核硬件断点,发送调试中断给主核;s12、操作系统处理中断,置从核调试中断标志,并发调试信号给sdbth线程;s13、debug进程被 sdbth的调试信号唤醒,判断中断标志,进行主从核架构数据的切换,将硬件架构数据结构转换切换为从核架构数据结构;s14、debug进程将硬件现场转换为对应的从核程序现场具体转换方法同主核调试;
s15、debug进程退出,终止sdbth。
8.还提供一种异构众核软件调试方法,基于上述的异构众核软件调试装置,其特征在于,包括以下步骤:s1、debug进程查到正在运行的异构程序进程号;s2、debug进程对运行中的tracee进程发送一个约定信号,tracee进入从核运行时库中执行约定信号的中断处理函数,由中断处理函数创建sdbth;s3、debug进程逐一捕获tracee进程空间的线程;s4、debug进程发现scorid非负的sdbth线程,建立sdbth与对应从核的控制关系;s5、debug进程初始化控制从核调试的架构数据;s6、debug进程根据从核正文段地址范围判断用户设置的断点是主核还是从核的断点;s7、debug进程按照主核架构,设置主核断点;s8、debug进程按照从核架构,设置从核断点;s9、debug进程恢复tracee进程运行;s10、tracee进程运行到达从核硬件断点,发送调试中断给主核;s11、操作系统处理中断,置从核调试中断标志,并发调试信号给sdbth线程;s12、debug进程被 sdbth的调试信号唤醒,判断中断标志,进行主从核架构数据的切换,将硬件架构数据结构转换切换为从核架构数据结构;s13、debug进程将硬件现场转换为对应的从核程序现场具体转换方法同主核调试;s14、debug进程退出,终止sdbth。
9.由于上述技术方案的运用,本发明与现有技术相比具有下列优点:本发明提出了一种异构众核软件调试装置及调试方法,可实现对异构并行代码的执行跟踪和错误定位,且可软件复用开源软件gdb现有的代码架构,具有良好的可移植性和可行性。
附图说明
10.附图1为本发明一种异构众核软件调试装置的示意图。
具体实施方式
11.实施例:本发明提供一种异构众核软件调试装置,其特征在于,包括以下配置:从核调试代理线程sdbth:sdbth由主核os创建,运行在被跟踪进程tracee的地址空间内,循环执行一个低优先级的睡眠;当从核发出对主核的中断请求时,唤醒sdbth,所述中断请求包含调试中断请求和i/o请求;sdbth被唤醒后,在os核心态继续执行睡眠的系统调用,并给自己发调试信号;在从核心态返回用户态时,os检查发现调试信号,并发现进程跟踪标志位tf,于是唤醒调试器进程debug;
调试器进程debug被唤醒后,得到对从核程序的执行控制权;如果中断请求是i/o请求,则将中断请求返给进程tracee,按照os缺省方式处理,即完成i/o请求原来设定的处理过程;如果中断请求是从核调试中断请求,则分析断点现场,返回给用户人工查看从核程序停在断点的执行状态;所述从核调试代理线程sdbth的创建时机包括以下两种情况:在应用程序执行到从核并行初始化时,如果被调试的标志tf已置,则从核运行时库在完成从核资源申请后创建sdbth,在从核资源释放后终止sdbth,否则,不创建sdbth;sdbth线程也有一个正常的linux线程号(lwpid),为了让debug能够区分sdbth与其它被调试的用户线程,主核os增加一个/proc/lwpid/scoreid文件,其中,lwpid是线程号,scoreid是文件名,在创建sdbth时根据申请的从核资源创建其对应的scoreid文件,如果scoreid文件中存放-1,则lwpid指定的线程是主核上其它被调试的用户线程,如果scoreid文件中存放非负的整数,则lwpid表示从核号,该lwpid就是sdbth;在创建sdbth时,在scoreid文件中存放对应的从核号,而其它地方创建的线程,其scoreid文件的数据初始化为-1,表示主核线程;在调试器进程debug执行传统的attach流程之前,对tracee发送一个约定信号,tracee在从核运行时库中执行约定信号的中断处理函数,由中断处理函数创建sdbth,debug在执行传统的detach流程之前,终止sdbth;这两种情况保证无论是在调试工具中启动异构程序的调试,还是调试正在运行的异构程序,都能通过sdbth调试从核上运行的代码,与主核上执行的调试共同组成一站式异构调试;在调试器进程debug中增加一套从核架构数据和一个切换开关;从核架构数据包括反汇编、硬件寄存器的读写、硬件断点的插入和删除操作、软件单步算法中下一条指令的地址计算;切换开关,用于控制主核与从核两种处理器架构的切换。
12.还提供一种异构众核软件调试方法,基于上述的异构众核软件调试装置,其特征在于,包括以下步骤:s1、debug进程fork子进程,即tracee进程,置其调试标志tf,建立调试进程与被调试进程的控制关系;s2、tracee进程执行被调试的异构程序,完成从核资源申请和空间初始化;s3、当tf为真,tracee进程创建各从核对应的调试代理线程sdbth,在scorid文件中写入从核核号;s4、debug进程逐一捕获tracee进程空间的线程;s5、debug进程发现scorid非负的sdbth线程,建立sdbth与对应从核的控制关系;s6、debug进程初始化控制从核调试的架构数据;s7、debug进程根据从核正文段地址范围判断用户设置的断点是主核还是从核的断点;s8、debug进程按照主核架构,设置主核断点;s9、debug进程按照从核架构,设置从核断点;
s10、debug进程恢复tracee进程运行;s11、tracee进程运行到达从核硬件断点,发送调试中断给主核;s12、操作系统处理中断,置从核调试中断标志,并发调试信号给sdbth线程;s13、debug进程被 sdbth的调试信号唤醒,判断中断标志,进行主从核架构数据的切换,将硬件架构数据结构转换切换为从核架构数据结构;s14、debug进程将硬件现场转换为对应的从核程序现场具体转换方法同主核调试;s15、debug进程退出,终止sdbth。
13.还提供一种异构众核软件调试方法,基于上述的异构众核软件调试装置,其特征在于,包括以下步骤:s1、debug进程查到正在运行的异构程序进程号;s2、debug进程对运行中的tracee进程发送一个约定信号,tracee进入从核运行时库中执行约定信号的中断处理函数,由中断处理函数创建sdbth;s3、debug进程逐一捕获tracee进程空间的线程;s4、debug进程发现scorid非负的sdbth线程,建立sdbth与对应从核的控制关系;s5、debug进程初始化控制从核调试的架构数据;s6、debug进程根据从核正文段地址范围判断用户设置的断点是主核还是从核的断点;s7、debug进程按照主核架构,设置主核断点;s8、debug进程按照从核架构,设置从核断点;s9、debug进程恢复tracee进程运行;s10、tracee进程运行到达从核硬件断点,发送调试中断给主核;s11、操作系统处理中断,置从核调试中断标志,并发调试信号给sdbth线程;s12、debug进程被 sdbth的调试信号唤醒,判断中断标志,进行主从核架构数据的切换,将硬件架构数据结构转换切换为从核架构数据结构;s13、debug进程将硬件现场转换为对应的从核程序现场具体转换方法同主核调试;s14、debug进程退出,终止sdbth。
14.对上述实施例的进一步解释如下:由于从核的精简架构设计,为支持异构软件调试,从核硬件提供硬件断点支持,并在从核断点、从核异常、从核i/o请求等发生时,中断主核os。
15.包括从核代理线程的创建机制、区别于常规linux线程的判别机制即两种处理器架构的判别机制、调试多元处理器架构的切换机制。
16.扩展了主核的os调试接口,使传统的调试接口支持从核硬件线程的调试;并在gdb中增加新的控制开关,可支持多种处理器架构的切换,从而复用开源代码,支持异构众核处理器的软件调试功能;需要对linux系统增加少量的支撑模块,可重用开源社区不断更新的linux和gdb版本,促进开源调试软件追上异构众核硬件的发展步伐,为基于异构众核的并行计算应用提供调试工具。
17.提出一种从核调试代理线程(sdbth):由主核os创建sdbth,sdbth运行在被跟踪进程(tracee)的地址空间内,循环执行一个低优先级的睡眠。当从核发出对主核的中断请求时,唤醒sdbth。sdbth被唤醒后在os核心态继续执行睡眠的系统调用,并给自己发调试信号,在从核心态返回用户态时,os检查发现调试信号,并发现进程跟踪标志位tf,于是唤醒调试器进程(debug)。
18.在现有设计中,debug此时应当在一个用户级循环中执行系统调用wait,等待由tracee唤醒, debug被唤醒后就得到了对从核程序的执行控制权。
19.有两种sdbth创建时机:1)run:当tracee在debug控制下由run调试命令启动运行时,tf位在tracee进程创建时被置上,在应用程序执行到从核并行初始化时,如果tf已置,则从核运行时库在完成从核资源申请后创建sdbth,在从核资源释放后终止sdbth;否则不创建sdbth。
20.2)attach:tracee已经正在运行,debug后执行,执行attach调试命令申请对异构众核的跟踪调试,这时sdbth尚未创建,因此debug在执行传统的attach流程之前,需要增加一个设计:对tracee发送一个约定信号(例如:30),tracee执行信号30的中断处理函数(在从核运行时库中),由中断处理函数创建sdbth。debug在执行传统的detach流程之前,终止sdbth。
21.需要一个判别机制:判断一个线程是从核调试代理sdbth,还是通常的linux线程。
22.一个简单的设计方法是增加一个/proc文件,例如/proc/lwpid/scoreid,这里,lwpid是线程号,scoreid是文件名,约定在scoreid文件中存放不同的数据值,以区别lwpid指定的线程是通常的linux线程,还是sdbth。
23.在创建sdbth时,在scoreid文件中存放对应的从核号;而其它地方创建的线程,其scoreid文件的数据初始化为-1,表示主核线程。
24.通过该设计,os和debug就能判别sdbth,从而区分对主核和从核的调试,并将对应从核的硬件寄存器映射到sdbth的寄存器缓冲区中,便于调试器将从核硬件现场转换为程序现场。
25.现有的gdb版本在代码结构上支持多种处理器架构的设计,但是在运行时只能固定一个处理器架构。因此,debug需要增加两个设计:1)一套从核架构数据,包括反汇编、硬件寄存器的读写、硬件断点的插入和删除操作、软件单步算法中下一条指令的地址计算等; 2)一个切换开关,用于控制主核与从核两种处理器架构的切换。
26.debug在自身初始化时,根据编译时设定的处理器架构进行初始化,编译时只能设定众核中的主核架构;在运行时,debug通过线程切换执行多线程调试,在每次线程切换时,调用开关设计:判别线程scoreid文件,切换对应的处理器架构;如果是切换到sdbth,而从核架构指针未初始化,则保存当前处理器架构数据指针到主核架构指针中,重新调用从核架构初始化流程,执行从核架构数据初始化,赋予当前架构指针为从核架构指针。
27.通过这种指针切换,debug在两种处理器架构中切换,各种调试命令的处理流程在执行到体系结构相关部分时调用对应架构的处理函数,从而实现对异构众核的程序调试。
28.采用上述一种异构众核软件调试装置时,其可实现对异构并行代码的执行跟踪和错误定位,且可软件复用开源软件gdb现有的代码架构,具有良好的可移植性和可行性。
29.为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:异构众核处理器:一种低功耗高性能处理器架构,一颗完整芯片上集成了少量承担管理、通信和运算功能的通用主核处理单元和大量承担运算功能的精简从核处理单元(从核阵列),主核运行通用的操作系统(os),主要承担整个芯片的管理和控制功能,也承担一定的运算功能和芯片与外部的通信功能;从核为减少内存开销,不运行os,完全发挥加速计算的功能。
30.硬件线程:是由硬件技术和资源确定的运行单位;区别于传统的软件线程,软件线程是由os创建的竞争处理器资源的调度单位,而硬件线程非os创建和调度,或者仅由os管理其地址空间。
31.软件断点:由硬件支持的一种伪指令,具有指令系统中最短的指令长度,可替换被调试程序的一条指令,运行时发生程序异常,然后转去执行预设的中断处理程序,把程序执行的控制权移交给用户。
32.硬件断点:处理器取指过程中进行指令地址匹配,与之相关的硬件资源是硬件断点寄存器,其中存放用户设置的指令地址,当寄存器中的指令地址与程序计数器(pc)的数据值匹配时发生调试中断,转去执行预设的中断处理程序;可见,硬件断点的数量受限于寄存器的数量。
33.上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献