CN111752718B - 一种低开销的死锁预测方法、装置及电子设备 - Google Patents

一种低开销的死锁预测方法、装置及电子设备 Download PDF

Info

Publication number
CN111752718B
CN111752718B CN202010468645.3A CN202010468645A CN111752718B CN 111752718 B CN111752718 B CN 111752718B CN 202010468645 A CN202010468645 A CN 202010468645A CN 111752718 B CN111752718 B CN 111752718B
Authority
CN
China
Prior art keywords
lock
predictive
ring
deadlock
edge
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.)
Active
Application number
CN202010468645.3A
Other languages
English (en)
Other versions
CN111752718A (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xi'an Xinxin Information Technology Co ltd
Original Assignee
Xi'an Xinxin Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xi'an Xinxin Information Technology Co ltd filed Critical Xi'an Xinxin Information Technology Co ltd
Priority to CN202010468645.3A priority Critical patent/CN111752718B/zh
Publication of CN111752718A publication Critical patent/CN111752718A/zh
Application granted granted Critical
Publication of CN111752718B publication Critical patent/CN111752718B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种低时间开销的死锁预测方法、装置及电子设备;该方法包括:在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录预测性可达关系图对应的程序执行路径信息;其中,该预测性可达关系图,用于表征锁操作涉及的各个锁之间存在的可达性关系;在执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测多线程程序中存在的死锁。本发明可以有效降低死锁预测的时间开销。

Description

一种低开销的死锁预测方法、装置及电子设备
技术领域
本发明属于软件测试技术领域,特别涉及一种低开销的死锁预测方法、装置及电子设备。
背景技术
多核处理器的快速发展极大推动了大规模多线程程序的广泛使用。从底层的操作系统到上层的应用程序、从服务器到客户端都大量使用并发处理。多线程程序开发的复杂性带来了严重的并发缺陷。死锁作为一类重要的并发缺陷,其发生会阻止程序的进一步运行,严重影响软件的可用性和可靠性。死锁是由于多个线程之间的不正确同步引起的,多个线程在相互等待别的线程所拥有的锁,从而进入一个僵持状态,造成死锁。
程序中已经发生的死锁很容易在测试过程中被检测到。但是由于线程交错顺序的不确定性,程序中潜在的一些死锁在程序有限次的执行过程中却很难暴露。虽然理论上,模型检测技术可以遍历所有的线程交错状态,从而发现全部的潜在死锁。但是由于线程交错状态空间爆炸的问题,该方法在真实的大规模程序上并不实用。因此,在线的死锁预测变得十分必要。然而,目前已有的预测性死锁检测方法主要针对离线测试,即将程序执行轨迹映射到一个大的数据结构上,在该数据结构上运行指数级时间复杂度的算法来发现环,并将发现的环作为死锁报告出来。然而,这类方法会引入几十倍乃至上千倍的时间开销,而通常情况下在线测试工具所允许的时间开销仅在5%以内。
发明内容
为了降低在线死锁预测的时间开销,本发明提出一种低时间开销的死锁预测方法、装置及电子设备。
本发明要解决的技术问题通过以下技术方案实现:
第一方面,本发明提供了一种低时间开销的死锁预测方法,包括:
在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录所述预测性可达关系图对应的程序执行路径信息;其中,所述预测性可达关系图,用于表征所述锁操作涉及的各个锁之间存在的可达性关系;
在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁。
在一种可选实现方式中,所述锁操作包括锁获取操作、锁释放操作和锁销毁操作;
所述在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,包括:
在多线程程序的执行过程中,
根据所述锁获取操作或所述锁释放操作所涉及的锁之间存在的可达性关系,构建所述预测性可达关系图的内容;
根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减。
在一种可选实现方式中,所述预测性可达关系图包括:已执行所述锁获取操作,且未执行所述锁销毁操作的每个锁的第一边集和第二边集;
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;
任一所述边为一直接边或一间接边;所述直接边用于表征位于同一锁集合的两个锁之间的可达性关系;所述间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为所述直接边。
在一种可选实现方式中,所述在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁,包括:
在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图,利用多项式时间复杂度的算法,判断当前维护的预测性可达关系图中是否存在有简单环;
当存在简单环时,或者,当不存在简单环,但存在非简单环的直接环时,根据所存在的简单环或存在的非简单环的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
当不存在简单环,当存在非简单环的间接环时,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环;根据重构的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
其中,所述简单环为由两个锁通过所述边构成的环;所述非简单环为由至少三个锁通过所述边构成的环;所述直接环中的每条边均为所述直接边;所述间接环中至少有一个边为所述间接边;任一非简单环的间接环对应的最小子图为:构成该间接环的锁的直接边集合。
在一种可选实现方式中,所述预测性可达关系图存储于计算机的内存中,所述执行路径信息存储于所述计算机的外存中;
所述根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减,包括:
根据所述锁销毁操作所要销毁的锁的入度和出度,判断所要销毁的锁是否会参与死锁的形成;
当判断结果为是时,根据所述入度和出度,对所述预测性可达关系图的内容进行约减;
当判断结果为否时,将所要销毁的锁的第一边集和第二边集移动到所述外存中。
在一种可选实现方式中,所述根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环,包括:
根据所存在的非简单环的间接环对应的最小子图,以及所述外存中存储的各个锁的第一边集和第二边集,利用指数级时间复杂度的算法重构直接环。
在一种可选实现方式中,所述指数级时间复杂度的算法为深度优先遍历算法。
在一种可选实现方式中,所述程序执行路径信息为以所述边为索引的路径集合。
第二方面,本发明提供了一种低时间开销的死锁预测装置,包括:
维护模块,用于在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录所述预测性可达关系图对应的程序执行路径信息;其中,所述预测性可达关系图,用于表征所述锁操作涉及的各个锁之间存在的可达性关系;
预测模块,用于在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁。
在一种可选实现方式中,所述锁操作包括锁获取操作、锁释放操作和锁销毁操作;
所述维护模块,包括维护子模块;
所述维护子模块,具体用于:
在多线程程序的执行过程中,
根据所述锁获取操作或所述锁释放操作所涉及的锁之间存在的可达性关系,构建所述预测性可达关系图的内容;
根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减。
在一种可选实现方式中,所述预测性可达关系图包括:已执行所述锁获取操作,且未执行所述锁销毁操作的每个锁的第一边集和第二边集;
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;
任一所述边为一直接边或一间接边;所述直接边用于表征位于同一锁集合的两个锁之间的可达性关系;所述间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为所述直接边。
在一种可选实现方式中,所述预测模块,具体用于:
在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图,利用多项式时间复杂度的算法,判断当前维护的预测性可达关系图中是否存在有简单环;
当存在简单环时,或者,当不存在简单环,但存在非简单环的直接环时,根据所存在的简单环或存在的非简单环的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
当不存在简单环,但存在非简单环的间接环时,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环;根据重构的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
其中,所述简单环为由两个锁通过所述边构成的环;所述非简单环为由至少三个锁通过所述边构成的环;所述直接环中的每条边均为所述直接边;所述间接环中至少有一个边为所述间接边;任一非简单环的间接环对应的最小子图为:构成该间接环的锁的直接边集合。
在一种可选实现方式中,所述预测性可达关系图存储于计算机的内存中,所述执行路径信息存储于所述计算机的外存中;
所述维护模块根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减,包括:
根据所述锁销毁操作所要销毁的锁的入度和出度,判断所要销毁的锁是否会参与死锁的形成;
当判断结果为是时,根据所述入度和出度,对所述预测性可达关系图的内容进行约减;
当判断结果为否时,将所要销毁的锁的第一边集和第二边集移动到所述外存中。
在一种可选实现方式中,所述预测模块根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环,包括:
根据所存在的非简单环的间接环对应的最小子图,以及所述外存中存储的各个锁的第一边集和第二边集,利用指数级时间复杂度的算法重构直接环。
在一种可选实现方式中,所述指数级时间复杂度的算法为深度优先遍历算法。
在一种可选实现方式中,所述程序执行路径信息为以所述边为索引的路径集合。
第三方面,本发明提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现上述任一种低时间开销的死锁预测方法所述的方法步骤。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种低时间开销的死锁预测方法所述的方法步骤。
在本发明的又一方面中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一种低时间开销的死锁预测方法所述的方法步骤。
本发明与现有技术相比的有益效果在于:本发明在多线程程序的执行过程中,响应于锁操作来维护一个预测性可达关系图,并记录该预测性可达关系图对应的程序执行路径信息;由于预测性可达关系图仅仅用于表征锁操作涉及的各个锁之间存在的可达性关系,且程序执行路径信息也仅仅是该预测性可达关系图对应的执行路径信息,故与现有技术相比,本发明所映射的数据结构较为精简,从而可以根据预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测多线程程序中存在的死锁。相较于现有技术将整个多线程程序的执行过程映射为一个庞大的数据结构,并利用指数级时间复杂度的算法在该数据结构的基础上进行运算的方式,本发明可以有效降低在线死锁预测的时间开销。
并且,在锁销毁操作时,本发明可以对预测性可达关系图进行约减,从而可以确保该预测性可达关系图的大小基本稳定;由此,进一步精简了死锁预测时所需的数据量。
本发明在保证死锁预测完备性的前提下,是目前首个可以用于客户端的在线死锁预测方法。与此同时,本发明可以在程序运行过程中的任意时刻进行死锁预测,实现了在长时间运行的程序上的死锁检测。另外,本发明还支持高频的在线死锁预测。
以下将结合附图及对本发明做进一步详细说明。
附图说明
图1是本发明实施例提供的一种低时间开销的死锁预测方法的流程示意图;
图2是本发明实施例提供的低时间开销的死锁预测方法中,根据直接边更新间接边的可达性传递规则的示意图;
图3是本发明实施例提供的低时间开销的死锁预测方法中,根据间接环重构直接环的示意图;
图4是本发明实施例提供的一种低时间开销的死锁预测装置的结构示意图;
图5是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
为了有效降低在线死锁预测的时间开销,本发明实施例提供了一种低时间开销的死锁预测方法、装置及电子设备。其中,本发明实施例提供的低时间开销的死锁预测方法的执行主体,即为该低时间开销的死锁预测装置;该装置可以应用于电子设备中,在具体应用中,该电子设备可以是作为服务器或客户端设备使用的计算机。
首先,对本发明实施例提供的一种低时间开销的死锁预测方法进行详细说明,如图1所示,该方法可以包括以下步骤:
S10:在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录预测性可达关系图对应的程序执行路径信息。
其中,预测性可达关系图,用于表征锁操作涉及的各个锁之间存在的可达性关系。
该步骤中,锁操作主要包括锁获取操作、锁释放操作和锁销毁操作。
具体的,该预测性可达关系图可以包括:已执行锁获取操作,且未执行锁销毁操作的每个锁的第一边集和第二边集。
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;任意一个边可以是一个直接边或一个间接边。这里,直接边用于表征同一锁集合中的两个锁之间的可达性关系;间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为直接边。另外,预测性可达关系图对应的程序执行路径信息也是以边为索引的路径集合。
其中,响应于锁获取操作或锁释放操作,对预测性可达关系图的维护操作可以包括:根据这两种操作所涉及的锁之间存在的可达性关系,构建预测性可达关系图的内容,即构建所涉及的锁的第一边集和第二边集。
举例而言,假设在多线程程序的执行过程中,遇到锁获取操作OnACQ(t,l),一方面,对于锁集合LS(t)中的每一个锁
Figure GDA0003658006260000101
产生多条直接边m→l记录在预测性可达关系图中,箭头代表从m到l的方向;并且,当一条新的直接边m→l加入到预测性可达关系图中,第二边集To(m)中的锁和第一边集Fr(l)中的锁之间的间接边也进行相应的更新,更新规则如图2所示,该更新过程可看作动态有向图的传递闭包。图2中,m′代表任意可达锁m的所有锁的集合,l'代表由锁l任意可达的所有锁的集合;实线箭头连接m′、m、l以及l′所构成的边,为新加入到预测性可达关系图中的一条直接边;虚线箭头连接m′和l所构成的边、虚线箭头连接m′和l′所构成的边以及虚线箭头连接m和l′所构成的边,为根据新加入的这条直接边所需更新的三条间接边。间接边更新完成后,即完成了根据该锁获取操作OnACQ(t,l),构建预测性可达关系图的内容的操作。可以理解的是,该锁获取操作OnACQ(t,l)仅仅构建了整个预测性可达关系图的一部分内容,整个预测性可达关系图则是由已执行锁获取操作,且未执行锁销毁操作的全部锁的第一边集和第二边集构成的。
另一方面,对于锁集合LS(t)中的每一个锁m,以直接边m→l为索引,将变形的锁依赖{t,LS(t)\{m}}存储在对应的程序执行路径信息Tr(m→l)中。
而响应于锁销毁操作,对预测性可达关系图的维护操作可以包括:根据锁销毁操作所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减,即对所要销毁的锁的第一边集和第二边集进行整体删除,或对该锁的第一边集和第二边集中的部分边进行删除。这样,可以使维护的预测性可达关系图的大小稳定。可见,相较于现有技术将整个程序映射为一个庞大的数据结构,本发明实施例维护预测性可达关系图以及对应的程序路径信息的数据量小,且数据复杂度低。
另外,在对预测性可达关系图进行约减的过程中,还可以对预测性可达关系图对应的程序执行路径信息进行相应的约减。
S20:在执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测多线程程序中存在的死锁。
这里,死锁检测需求可以根据用户的需求进行配置。
实现该步骤所依赖的原则是,预测性可达关系图中存在环的情况下,才可能出现死锁;否则,无需预测死锁。这里所说的环包括简单环和非简单环两种,且简单环和非简单环各自都可以进一步划分为直接环和间接环两种类型。其中,简单环是指由两个锁通过边构成的环;非简单环是指由至少三个锁通过边构成的环;直接环中的每条边均为直接边;间接环中至少有一个边为间接边。
具体的,在执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图,利用多项式时间复杂度的算法,判断当前维护的预测性可达关系图中是否存在有简单环;
(a)当存在简单环时,或者,当不存在简单环,但存在非简单环的直接环时,根据所存在的简单环或存在的非简单环的直接环以及对应的程序执行路径信息构造死锁,作为多线程程序中存在的死锁;
(b)当不存在简单环,但存在非简单环的间接环时,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环;根据重构的直接环以及对应的程序执行路径信息构造死锁,作为多线程程序中存在的死锁。
其中,非简单环的间接环对应的最小子图为:构成该间接环的锁的直接边集合。
可以理解的是,当不存在任何一种环时,则说明该多线程程序不存在死锁。
需要指出的是,在实际应用中,根据非简单环的间接环对应的最小子图重构直接环执行概率很小,这是因为大部分死锁是由两个锁构成的,即由简单环造成死锁的情况更多。
另外,在执行多线程程序的过程中,为了减小计算机内存的占有率,可以将预测性可达关系图存储于计算机的内存中,而执行路径信息则存储于计算机的外存中。这里说的计算机,即是执行本发明实施例所提供方法的计算机。
另外,当遇到锁销毁操作时,根据锁销毁操作所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减,同样可以达到减小计算机内存的占有率的效果。
基于将预测性可达关系图和执行路径信息分开存储的设定,根据锁销毁操作所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减的步骤,可以具体包括:
根据锁销毁操作所要销毁的锁的入度和出度,判断所要销毁的锁是否会参与死锁的形成;
当判断结果为是时,根据所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减;
当判断结果为否时,将所要销毁的锁的第一边集和第二边集移动到外存中。
这里,将可能参与死锁形成的锁的第一边集和第二边集移动到外存中,一方面可以对预测性可达关系图起到约减的效果,使得预测性可达关系图的大小稳定;在真实的大规模程序执行过程中,存活的锁的数目基本稳定。因此预测性可达关系图上仅保留存活的锁及其相关的边,可以有效保证预测性可达关系图的大小基本稳定。另一方面,将可能参与死锁形成的锁的第一边集和第二边集移动到外存中,还可以供后续重构直接环的时候使用。
在具体约减过程中,对于任一待销毁的锁l而言,根据该锁l的入度和出度是否为0,包括下述4种约减情况:
情况1:当锁l的入度和出度均为0时,该锁l不在预测性可达关系图上,无需对预测性可达关系图进行约减。
情况2:当锁l的入度为0但出度不为0时,该锁不会参与死锁的形成。对该锁的第一边集Fr(l)中涉及的每个锁m,删除第一边集Fr(l)中的各个l→m的边,并删除第二边集To(m)中各个l→m的边,然后删除在l→m索引下的程序执行路径信息。
情况3:当锁l的出度为0但入度不为0时,该锁l不会参与死锁的形成。对于该锁l的第二边集To(l)中涉及的每个锁m,删除第二边集To(l)中的m→l的边和第一边集Fr(m)m→l的边,并删除以m→l为索引的程序执行路径信息。
情况4:当锁l的入度和出度均不为0时,该锁l可能参与死锁的形成。此时可以把与锁l相关的边从预测性可达关系图上移动到外存上的边集ExternalFr中保存,即把锁l的第一边集和第二边集移动到外存上进行保存。
在一种实现方式中,基于外存中存储的边集ExternalFr,上述的步骤(b)中,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环,可以包括:
根据所存在的非简单环的间接环对应的最小子图,以及外存中存储的各个锁的第一边集和第二边集,利用指数级时间复杂度的算法重构直接环。
这样,更容易发现潜在的死锁。
举例而言,对于锁集合中的每个锁l而言,可以首先遍历锁l的第一边集Fr(l),在遍历过程中,对于Fr(l)中涉及的每一个锁m,如果锁l也在该锁m的第一边集Fr(m)中,即检测到一个简单环,该简单环可以是直接环,也可以是间接环。而对于检测到非简单环的间接环的情况而言,引入边集IndCycleDirFr和集合IndCycleLocks来存储该间接环;其中,边集IndCycleDirFr用来存储构成该间接环的锁的直接边,也就是说,边集IndCycleDirFr即是该间接环对应的最小子图;IndCycleLocks则用于存储构成该间接环的锁的集合;然后,在边集IndCycleDirFr和边集ExternalF上进行深度优先遍历,重构直接环;这里,该边集ExternalF即是外存中存储的各个锁的第一边集和第二边集。图3示例性的示出了根据间接环重构直接环的过程。其中,上方的环为间接环,环下方箭头尾部示出的一条从l1到ln的边为重构直接环时所需用到的另外一条直接边;此外,l和ln之间是有直接边的,且m和l1之间也是有直接边的。由此,重构出的直接环包括:从l到m的直接边,从m到l1的直接边,从l1到ln的直接边,从ln到l的直接边。
然后,根据检测到的简单环或非简单环的直接环以及对应的程序执行路径信息构造死锁。或者,根据重构的直接环以及应的程序执行路径信息构造死锁。在具体构建死锁时,可以结合多线程程序的线程编号、当前的锁集合以及程序执行路径信息,对于每一个简单环或非简单环的直接环,提取每条边上的路径信息,按照预定的准则来构建死锁。这里说的准则包括:一个环上的每条边由不同的线程组成,且不同边所涉及的锁的集合不存在交集。
可选地,上述的指数级时间复杂度的算法可以采用深度优先遍历算法。
本发明实施例提供的低时间开销的死锁预测方法,更为适用于资源死锁的预测。
经过测试验证,使用本发明所提供的方法进行死锁预测的时间开销可以达到小于5%的需求,且平均时间开销仅有3.5%,相比于现有技术至少可以降低三个数量级。另外,在高频死锁预测情形下,使用本发明所提供的方法进行死锁预测的时间开销,仍可以满足小于5%的需求。
相应于本发明实施例提供的上述方法,本发明实施例还提供了一种低开销的死锁预测装置。如图4所示,该装置可以包括:
维护模块401,用于在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录预测性可达关系图对应的程序执行路径信息;其中,预测性可达关系图,用于表征锁操作涉及的各个锁之间存在的可达性关系;
预测模块402,用于在上述的执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测多线程程序中存在的死锁。
在一种可选实现方式中,锁操作包括锁获取操作、锁释放操作和锁销毁操作;
维护模块401,包括维护子模块,该维护子模块,具体用于:
在多线程程序的执行过程中,
根据锁获取操作或锁释放操作所涉及的锁之间存在的可达性关系,构建预测性可达关系图的内容;
根据锁销毁操作所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减。
在一种可选实现方式中,预测性可达关系图包括:已执行锁获取操作,且未执行锁销毁操作的每个锁的第一边集和第二边集;
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;
任一边为一直接边或一间接边;直接边用于表征位于同一锁集合的两个锁之间的可达性关系;间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为直接边。
在一种可选实现方式中,预测模块402,具体用于:
在执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图,利用多项式时间复杂度的算法,判断当前维护的预测性可达关系图中是否存在有简单环;
当存在简单环时,或者,当不存在简单环,但存在非简单环的直接环时,根据所存在的简单环或存在的非简单环的直接环以及对应的程序执行路径信息构造死锁,作为多线程程序中存在的死锁;
当不存在简单环,但存在非简单环的间接环时,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环;根据重构的直接环以及对应的程序执行路径信息构造死锁,作为多线程程序中存在的死锁;
其中,简单环为由两个锁通过边构成的环;非简单环为由至少三个锁通过边构成的环;直接环中的每条边均为直接边;间接环中至少有一个边为间接边;任一非简单环的间接环对应的最小子图为:构成该间接环的锁的直接边集合。
在一种可选实现方式中,预测性可达关系图存储于计算机的内存中,执行路径信息存储于计算机的外存中;
维护模块401根据锁销毁操作所要销毁的锁的入度和出度,对预测性可达关系图的内容进行约减,包括:
根据锁销毁操作所要销毁的锁的入度和出度,判断所要销毁的锁是否会参与死锁的形成;
当判断结果为是时,根据入度和出度,对预测性可达关系图的内容进行约减;
当判断结果为否时,将所要销毁的锁的第一边集和第二边集移动到外存中。
在一种可选实现方式中,预测模块402根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环,包括:
根据所存在的非简单环的间接环对应的最小子图,以及外存中存储的各个锁的第一边集和第二边集,利用指数级时间复杂度的算法重构直接环。
在一种可选实现方式中,指数级时间复杂度的算法为深度优先遍历算法。
在一种可选实现方式中,程序执行路径信息为以边为索引的路径集合。
本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,
存储器503,用于存放计算机程序;
处理器501,用于执行存储器503上所存放的程序时,实现上述任一种低开销的死锁预测方法所述的方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明还提供了一种计算机可读存储介质。在该计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时,实现上述任一种低开销的死锁预测方法所述的方法步骤。
可选地,该计算机可读存储介质可以为非易失性存储器(Non-Volatile Memory,NVM),例如为至少一个磁盘存储器。
可选的,所述计算机可读存储器还可以是至少一个位于远离前述处理器的存储装置。
在本发明的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一低开销的死锁预测方法所述的方法步骤。
需要说明的是,对于装置/电子设备/存储介质/计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。此外,本领域的技术人员可以将本说明书中描述的不同实施例或示例进行接合和组合。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
本申请是参照本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

Claims (9)

1.一种低时间开销的死锁预测方法,其特征在于,包括:
在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,并记录所述预测性可达关系图对应的程序执行路径信息;其中,所述预测性可达关系图,用于表征所述锁操作涉及的各个锁之间存在的可达性关系;
在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁;
所述锁操作包括锁获取操作、锁释放操作和锁销毁操作;
所述预测性可达关系图包括:已执行所述锁获取操作,且未执行所述锁销毁操作的每个锁的第一边集和第二边集;
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;
任一所述边为一直接边或一间接边;所述直接边用于表征位于同一锁集合的两个锁之间的可达性关系;所述间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为所述直接边。
2.根据权利要求1所述的方法,其特征在于,所述在多线程程序的执行过程中,响应于锁操作,维护一个预测性可达关系图,包括:
在多线程程序的执行过程中,
根据所述锁获取操作或所述锁释放操作所涉及的锁之间存在的可达性关系,构建所述预测性可达关系图的内容;
根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减。
3.根据权利要求2所述的方法,其特征在于,所述在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁,包括:
在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图,利用多项式时间复杂度的算法,判断当前维护的预测性可达关系图中是否存在有简单环;
当存在简单环时,或者,当不存在简单环,但存在非简单环的直接环时,根据所存在的简单环或存在的非简单环的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
当不存在简单环,但存在非简单环的间接环时,根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环;根据重构的直接环以及对应的程序执行路径信息构造死锁,作为所述多线程程序中存在的死锁;
其中,所述简单环为由两个锁通过所述边构成的环;所述非简单环为由至少三个锁通过所述边构成的环;所述直接环中的每条边均为所述直接边;所述间接环中至少有一个边为所述间接边;任一非简单环的间接环对应的最小子图为:构成该间接环的锁的直接边集合。
4.根据权利要求3所述的方法,其特征在于,所述预测性可达关系图存储于计算机的内存中,所述执行路径信息存储于所述计算机的外存中;
所述根据所述锁销毁操作所要销毁的锁的入度和出度,对所述预测性可达关系图的内容进行约减,包括:
根据所述锁销毁操作所要销毁的锁的入度和出度,判断所要销毁的锁是否会参与死锁的形成;
当判断结果为是时,根据所述入度和出度,对所述预测性可达关系图的内容进行约减;
当判断结果为否时,将所要销毁的锁的第一边集和第二边集移动到所述外存中。
5.根据权利要求4所述的方法,其特征在于,所述根据所存在的非简单环的间接环对应的最小子图,利用指数级时间复杂度的算法重构直接环,包括:
根据所存在的非简单环的间接环对应的最小子图,以及所述外存中存储的各个锁的第一边集和第二边集,利用指数级时间复杂度的算法重构直接环。
6.根据权利要求5所述的方法,其特征在于,所述指数级时间复杂度的算法为深度优先遍历算法。
7.根据权利要求1所述的方法,其特征在于,所述程序执行路径信息为以所述边为索引的路径集合。
8.一种低时间开销的死锁预测装置,其特征在于,包括:
维护模块,用于在多线程程序的执行过程中,响应于锁操作,维护一预测性可达关系图,并记录所述预测性可达关系图对应的程序执行路径信息;其中,所述预测性可达关系图,用于表征所述锁操作涉及的各个锁之间存在的可达性关系;
预测模块,用于在所述执行过程中的任一时刻,响应于死锁检测需求,根据当前维护的预测性可达关系图和对应的程序执行路径信息,利用多项式时间复杂度的算法,预测所述多线程程序中存在的死锁;
所述锁操作包括锁获取操作、锁释放操作和锁销毁操作;
所述预测性可达关系图包括:已执行所述锁获取操作,且未执行所述锁销毁操作的每个锁的第一边集和第二边集;
其中,每个锁的第一边集由该锁通往其他锁的边构成,每个锁的第二边集由其他锁通往该锁的边构成;
任一所述边为一直接边或一间接边;所述直接边用于表征位于同一锁集合的两个锁之间的可达性关系;所述间接边用于表征同一锁序列中位置不相邻的两个锁之间的可达性关系;同一锁序列中位置相邻的任意两个锁之间的可达性关系为所述直接边。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现权利要求1-7任一所述的方法步骤。
CN202010468645.3A 2020-05-28 2020-05-28 一种低开销的死锁预测方法、装置及电子设备 Active CN111752718B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010468645.3A CN111752718B (zh) 2020-05-28 2020-05-28 一种低开销的死锁预测方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010468645.3A CN111752718B (zh) 2020-05-28 2020-05-28 一种低开销的死锁预测方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN111752718A CN111752718A (zh) 2020-10-09
CN111752718B true CN111752718B (zh) 2022-07-12

Family

ID=72673542

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010468645.3A Active CN111752718B (zh) 2020-05-28 2020-05-28 一种低开销的死锁预测方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN111752718B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576830A (zh) * 2009-06-04 2009-11-11 中兴通讯股份有限公司 数据库事务锁机制的死锁检测方法及装置
CN101937365A (zh) * 2009-06-30 2011-01-05 国际商业机器公司 并行程序的死锁检测方法和系统
CN102053861A (zh) * 2009-10-30 2011-05-11 国际商业机器公司 并行程序中死锁检测的方法和系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070150897A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Methods and apparatus for detecting deadlock in multithreading programs
US10915424B2 (en) * 2017-10-12 2021-02-09 The Board Of Regents Of The University Of Texas System Defeating deadlocks in production software

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576830A (zh) * 2009-06-04 2009-11-11 中兴通讯股份有限公司 数据库事务锁机制的死锁检测方法及装置
CN101937365A (zh) * 2009-06-30 2011-01-05 国际商业机器公司 并行程序的死锁检测方法和系统
CN102053861A (zh) * 2009-10-30 2011-05-11 国际商业机器公司 并行程序中死锁检测的方法和系统

Also Published As

Publication number Publication date
CN111752718A (zh) 2020-10-09

Similar Documents

Publication Publication Date Title
US11086665B2 (en) Scheduling services for quantum computing
Sen Effective random testing of concurrent programs
Dean et al. Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds
CN110018914B (zh) 基于共享内存的消息采集方法及装置
US9146746B2 (en) Systems and methods for providing deterministic execution
JP2009123216A (ja) 並行バグ用のエラートレースを生成するシステムおよび方法
López Cueva et al. Debugging embedded multimedia application traces through periodic pattern mining
US9207967B2 (en) Using nonspeculative operations for lock elision
US20110179399A1 (en) Establishing a useful debugging state for multithreaded computer program
WO2019056720A1 (zh) 自动化测试用例管理方法、装置、设备及存储介质
CN111352704B (zh) 基于策略管理的分布式全局事务处理系统和方法
US20180046548A1 (en) Method and Apparatus for Tracking Objects in a First Memory
Huang Human error analysis in software engineering
Ha et al. An Efficient Algorithm for On‐the‐Fly Data Race Detection Using an Epoch‐Based Technique
JP6963552B2 (ja) ブロックアトミック実行モデルを利用するプロセッサベースシステムにおける部分的に実行された命令ブロックのリプレイ
US10565511B1 (en) Reverse debugging of software failures
US20120059997A1 (en) Apparatus and method for detecting data race
CN111752718B (zh) 一种低开销的死锁预测方法、装置及电子设备
Sun et al. Reasoning about modern datacenter infrastructures using partial histories
Yang et al. Histlock+: precise memory access maintenance without lockset comparison for complete hybrid data race detection
US8856070B2 (en) Consistent replication of transactional updates
CN111124694A (zh) 一种基于petri网的可达图的死锁检测和解决方法
Li et al. Efficient microarchitectural vulnerabilities prediction using boosted regression trees and patient rule inductions
US9619345B2 (en) Apparatus for determining failure context in hardware transactional memories
WO2015045091A1 (ja) ベイジアンネットワークの構造学習におけるスーパーストラクチャ抽出のための方法及びプログラム

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
GR01 Patent grant
GR01 Patent grant