US20100333110A1 - Deadlock detection method and system for parallel programs - Google Patents

Deadlock detection method and system for parallel programs Download PDF

Info

Publication number
US20100333110A1
US20100333110A1 US12/826,759 US82675910A US2010333110A1 US 20100333110 A1 US20100333110 A1 US 20100333110A1 US 82675910 A US82675910 A US 82675910A US 2010333110 A1 US2010333110 A1 US 2010333110A1
Authority
US
United States
Prior art keywords
lock
parallel programs
parallel
programs
graph
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.)
Abandoned
Application number
US12/826,759
Inventor
Zhi Da Luo
Yao Qi
Yong Zheng
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Assigned to INTERNATIONAL BUSINESS MACHINES CORPORATION reassignment INTERNATIONAL BUSINESS MACHINES CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: LUO, ZHI DA, QI, Yao, ZHENG, YONG
Publication of US20100333110A1 publication Critical patent/US20100333110A1/en
Priority to US13/437,339 priority Critical patent/US8661450B2/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • 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

Definitions

  • the present invention relates to parallel programs, more particularly to a deadlock detection method and system for parallel programs.
  • parallel computing comprises time parallel and space parallel processing, in which the time parallel is related with pipeline technology while the space parallel is related with the parallel technology performed by multiple processors.
  • parallel computing is implemented by parallel programs in which processing of a task is separated into multiple portions (threads) and these threads can be executed in parallel, and they can communicate with each other by accessing shared data structures and using proper synchronization methods so as to work cooperatively and correctly.
  • process (thread) deadlock is a vital problem for parallel programs.
  • Process (thread) deadlock is a situation wherein two or more processes (threads) are waiting for the other to finish due to a competing shared resource during execution, and two transactions in deadlock will wait indefinitely unless one process (thread) in deadlock gives up the shared resource.
  • process (thread) deadlock will result in a breakdown of the whole system.
  • factors that will trigger process (thread) deadlock mainly including: (1) limited system resource; (2) improper order of processes (threads) execution; and (3) unsuitable resource allocation. If system resources are abundant and the parallel processes' requests for resources can all be met, the possibility that a deadlock occurs is low.
  • a deadlock may occur due to competing limited resources. Further, the order and speed of advancement of process execution is different, which may also cause deadlock. In order to avoid damage on the system due to process (thread) deadlock and improve stability of the system, there is a need for an efficient method to detect deadlock such that process (thread) deadlock can be found in time and proper measures can be taken to release the deadlock, thereby preventing the operational condition of the system from further deterioration.
  • a lock graph corresponds to a running procedure of parallel programs that may be acquired by recording lock operations in the running procedure of the parallel programs, and nodes and directed edges are accordingly added in the lock graph.
  • a node denotes a lock for resource
  • a directed edge pointing from one node to another denotes that a process holding a lock is requesting to acquire a lock of another resource. If directed edges between two or more nodes in a lock graph form a closed directed loop, there is a deadlock in the parallel programs, and thus deadlock can be detected by checking whether there is a directed loop in the lock graph.
  • T1 shows a diagram of deadlock state of parallel programs, in which thread T1 has acquired a lock of resource R 1 and requests a lock of resource R2, thread T2 has the lock of resource R2 and requests the lock of resource R 1 . Both threads need to acquire the resource held by the other thread for further processing. However, the resources held by T1 or T2 will not be released until the other thread releases its resources, and thus they fall in a deadlock state.
  • FIG. 2 shows an example of a lock graph of parallel programs in which there are 1014 nodes and 3051 directed edges, and the operation of detecting directed loop in the lock graph is very slow, thereby consuming large amounts of time and computing resources, and greatly reducing efficiency of deadlock detection.
  • the present invention provides a deadlock detection method and system for parallel programs.
  • a deadlock detection method for parallel programs comprising: determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs; deleting a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and performing deadlock detection on the updated lock graph.
  • a deadlock detection system for parallel programs comprising: a determining means configured to determine that a lock of the parallel programs is no longer used in a running procedure of the parallel programs; a lock deleting means configured to delete a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and a deadlock detection means configured to perform deadlock detection on the updated lock graph.
  • nodes of locks that are no longer used, and their related edges are deleted from the lock graph of parallel programs in time, thereby efficiently reducing complexity of the lock graph by reducing large amounts of nodes and edges.
  • Directed loop detection is then done based on pruned lock graph, which can save a large amount of time and computing resources, and thus greatly improve the efficiency of deadlock detection.
  • FIG. 1 shows a diagram of a deadlock state of parallel programs
  • FIG. 2 shows an example of a lock graph of parallel programs
  • FIG. 3 shows a deadlock detection method for parallel programs according to an embodiment of the present invention
  • FIG. 4 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to a first embodiment
  • FIG. 4 b shows a lock graph after nodes of mutual exclusive lock request_mutex and edges related to the mutual exclusive lock request_mutex are deleted from the lock graph of FIG. 4 a;
  • FIG. 4 c shows a lock graph after nodes-of mutual exclusive lock control_mutex and edges related to mutual exclusive lock control_mutex are deleted from the lock graph of FIG. 4 b;
  • FIG. 5 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to a second embodiment
  • FIG. 5 b shows a lock graph after nodes of lock G and edges related to lock G are deleted from the lock graph of FIG. 5 a;
  • FIG. 5 c shows a lock graph after nodes of lock L1 and edges related to lock L1 are deleted from the lock graph of FIG. 5 b;
  • FIG. 6 a shows a lock graph of byte code in a Java program running on a Java virtual machine (JVM) corresponding to a third embodiment
  • FIG. 6 b shows a lock graph after nodes of lock G and edges related to lock G are deleted from FIG. 6 a;
  • FIG. 6 c shows a lock graph after nodes of lock L1 and edges related to lock L1 are deleted from FIG. 6 b ;
  • FIG. 7 shows a block diagram of a deadlock detection system for parallel programs according to an embodiment of the present invention.
  • FIG. 3 shows a deadlock detection method for parallel programs according to an embodiment of the present invention, comprising: in step S 301 , it is determined that a lock of the parallel programs is no longer used in the running procedure of the parallel programs; in step S 302 , a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, are deleted from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and in step S 303 , deadlock detection is performed on the updated lock graph.
  • step S 301 wherein determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs, further comprises: in response to receiving event notifications that a lock of the parallel programs is no longer used, it is determined that the lock of the parallel programs is no longer used.
  • Determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs further comprises: a lifecycle of the lock of the parallel programs is analyzed by scanning code of the parallel programs.
  • analyzing a lifecycle of the lock of the parallel programs further comprises: detecting a location where the lock of the parallel programs is finally used in the running procedure of the parallel programs in response to detecting that there is an explicit function call in the parallel programs to destroy the lock, and marks are added in the vicinity of location that the lock of the parallel programs is finally used.
  • the marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used.
  • multi-thread application program often uses a mutual exclusive lock Mutex provided by pthread library, and a function that destroys a lock is int pthread_mutex_destroy(pthread_mutex_t*mutex); while a semaphore used to achieve mutual exclusive by multi-process is also a special lock, and a function that destroys a lock is int semctl(int semid, int stylum, IPC_RMID, . . . ).
  • analyzing a lifecycle of the lock further comprises: identifying a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Specifically, in response to detecting that there is no explicit function call in the parallel programs to destroy a lock, a data stream of the parallel programs is analyzed, and a set of locations where the lock of the parallel programs is defined and used are determined, so as to identify the set of locations where the lock of the parallel programs may be finally used during the running procedure of the parallel programs.
  • a mark is added near the location that the lock of parallel programs may be finally used, where the marks are used to trigger an notification event that the lock of parallel programs may no longer be used during the running procedure of the parallel programs; and in response to receiving the notification event triggered by the mark, it is determined that the lock of the parallel programs are no longer used.
  • a static code analysis method can be used to analyze a lifecycles of lock of parallel programs, and the static code analysis performs a code check without executing the code (e.g. perform source code check, binary code check or byte code check).
  • Static code scan is a primary step of static code analysis, and examples of performing static code analysis with respect to multi-thread parallel programs with and without an explicit function call that destroys a lock are listed below. In order to facilitate understanding, each of the following embodiments utilizes static analysis for source code.
  • mark “ ⁇ Lock_Could_Be_Removed_From_Graph>” is added after lines 42 and 54 of parallel programs respectively, so that the event notification that mutual exclusive lock is no longer used is triggered by the added marks in the running procedure of parallel programs.
  • FIG. 4 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to the first embodiment.
  • nodes of mutual exclusive lock request_mutex, and edges related to mutual exclusive lock request_mutex are deleted from the lock graph, as shown in FIG. 4 b .
  • nodes of mutual exclusive lock control_mutex, and edges related to mutual exclusive lock control_mutex are deleted from the lock graph, as shown in FIG. 4 c . It can be seen from the simplified lock graph that only one node of mutual exclusive lock list_mutex remains, thus there is no deadlock.
  • Example2.java */ 01: new T1.start( ); 02 new T2.start( ); /* Thread 1, named as T1 */ 03: synchronized(G) ⁇ 04: synchronized(L1) ⁇ 05: synchronized(L2) ⁇ ⁇ 06: ⁇ 07: ⁇ ; 08: t3 new T3( ); 09: t2.start( ); 10: t3.join( ); 11: synchronized(L2) ⁇ 12: synchronized(L1) ⁇ ⁇ 13: ⁇ 14: /* Thread 2, named as T2 */ 15: synchronized(G) ⁇ 16: synchronized(L2) ⁇ 17: synchronized(L1) ⁇ ⁇ 18: ⁇ 19: ⁇ 20: /* Thread 3, named as T3 */ 21: synchronized(L1) ⁇ 22: synchronized(L2) ⁇ ⁇ 23: ⁇ 24:
  • thread T1 acquires lock G at line 3, releases lock G at line 7; thread 2 acquires lock G at line 15, releases lock G at line 19; thread T4 acquires lock L1 at line 4, releases lock L1 at line 6; thread T1 acquires lock L1 at line 12, releases lock L1 at line 12; thread T2 acquires lock L1 at line 17, releases lock L1 at line 17; thread T3 acquires lock L1 at line 21, releases lock L1 at line 23; thread T1 acquires lock L2 at line 5, releases lock L2 at line 5; thread T1 acquires lock L2 at line 11, releases lock L2 at line 13; thread T2 acquires lock L2 at line 16, releases lock L2 at line 18; and thread T3 acquires lock L2 at line 22, releases the lock at line 22.
  • a set of corresponding locations where locks G, L1 and L2 may be finally used is generated based on the result of the scan, as shown in table 2.
  • marks are added in the vicinal locations in the Java program where locks G, L1 and L2 may be finally used, so that an event notification that locks G, L1 and L2 might no longer be used will be triggered based on the added marks in the running procedure of parallel programs.
  • marks “ ⁇ Lock_G_Might_Be_Removed_From_Graph>”, “ ⁇ Lock_L1_Might_Be_Removed_From_Graph>” and “ ⁇ Lock_L2_Might_Be_Removd_From_Graph>” are added in the vicinal locations where locks (G, L1 and L2) may be finally used.
  • the embodiment of the present invention selects to add marks after locations where locks (G, L1 and L2) may be finally used, nevertheless, those skilled in the art can appreciate that the purpose of the present invention can also be achieved by adding marks before locations where locks may be finally used.
  • the event notification is triggered by marks, and table 2 is updated in response to receiving the event notification; on different platforms such as Windows, Linux, a different event notification mechanism can be used.
  • Example2.java */ 01: new T1.start( ); 02 new T2.start( ); /* Thread 1, named as T1 */ 03: synchronized(G) ⁇ 04: synchronized(L1) ⁇ 05: synchronized(L2) ⁇ ⁇ 06: ⁇ 07: ⁇ ; ⁇ Lock_G_Might_Be_Removed_From_Graph > 08: t3 new T3( ); 09: t2.start( ); 10: t3.join( ); 11: synchronized(L2) ⁇ 12: synchronized(L1) ⁇ ⁇ ⁇ Lock_L1_Might_Be_Removed_From_Graph > 13: ⁇ ⁇ Lock_L2_Might_Be_Removed_From_Graph > 14: /* Thread 2, named as T2 */ 15: synchronized(G) ⁇ 16: synchronized(L2) ⁇ 17: synchronized(L1) ⁇ ⁇ ⁇ Lock_L1_Might_Be_Removed_From_
  • FIG. 5 a shows a lock graph of execution procedure of multi-thread program corresponding to the second embodiment, accordingly, nodes of lock G and edges related to lock G are deleted from FIG. 5 a .
  • FIG. 5 b shows the updated lock graph, and then deadlock detection is performed on the updated lock graph 5 b.
  • FIG. 5 c shows the updated lock graph, and then deadlock detection is performed on the updated lock graph 5 c.
  • a garbage collection notification mechanism provided by virtual machine can be used to determine that a lock is no longer used.
  • Garbage collection or referred to as memory garbage collection, is a common automatic memory management technique.
  • a garbage collector attempts to reclaim memory space used by objects which may no longer be used by the objects. For example, when a program de-references an object, memory space allocated for that object can be reclaimed. Since the runtime environment can provide a notification mechanism when an object is reclaimed, the object used as a lock that requires to be notified when reclaimed by GC can be registered in the runtime environment. In response to detecting that locks are reclaimed in the running procedure of parallel programs, i.e., receiving an event notification issued from the runtime environment that locks are reclaimed, it is determined that these locks are no longer used.
  • FIG. 6 a shows a lock graph of Java program running on JVM corresponding to the third embodiment, nodes of lock G and edges related to lock G are deleted from the lock graph of FIG. 6 a .
  • FIG. 6 b shows the updated lock graph after nodes of lock G and edges related to lock G are deleted from FIG. 6 a , and then deadlock detection is performed on the updated lock graph 6b.
  • FIG. 6 c shows the updated lock graph after nodes of lock L1 and edges related to lock L1 are deleted from FIG. 6 b , and then deadlock detection is performed on the updated lock graph 6 c.
  • static code analysis before running of parallel programs can be combined with dynamic analysis during the running procedure of parallel programs (garbage collection notification mechanism) to determine that a lock is no longer used.
  • some locks may have a lot of locations where they could be finally used, e.g. hundreds of locations, thus scanning all the code consume large amounts of time and computing resources. It is relatively difficult to efficiently determine that these locks are no longer used solely by relying on static code analysis, in order to more efficiently determine that these locks are no longer used.
  • Locks that need to be dynamically analyzed may be filtered first through static code analysis, and then the garbage collection notification mechanism can be utilized in the running procedure of the program to determine that the locks are no longer used.
  • JVM Java virtual machine
  • the lock with more locations where it may be finally used is found (e.g. lock L1) to perform dynamic scan.
  • Lock L1 and its corresponding set of locations where it may be finally used are deleted from table 2, and lock L1 that requires to be notified of garbage collection is registered on JVM.
  • the locations that locks G and L2 may be finally used in table 2 are updated in the running procedure of parallel programs by the static code analysis method of the second embodiment, so as to determine that locks G and L2 are no longer used in the running procedure of parallel programs, accordingly, nodes of locks G and L2 and edges related to locks G and L2 are deleted from the lock graph.
  • FIG. 7 shows a block diagram of the deadlock detection system for parallel programs according to an embodiment of the present invention.
  • the deadlock detection system for parallel programs comprises: a determining means 701 configured to determine that a lock of the parallel programs is no longer used in the running procedure of the parallel programs; a lock deleting means 702 configured to delete a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a corresponding lock graph to generate an updated lock graph, wherein the lock graph is constructed according to lock operation of the parallel programs; and a deadlock detection means 703 is configured to perform deadlock detection on the updated lock graph.
  • the determining means 701 is further configured to: in response to receiving event notifications that a lock of the parallel programs is no longer used, determining in the running procedure of the parallel programs that the lock of the parallel programs is no longer used.
  • the determining means 701 further comprises: a lock lifecycle analyzing means configured to analyze a lifecycle of the lock of the parallel programs by scanning code of the parallel programs.
  • the lock lifecycle analyzing means is further configured to: identify a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: in response to detecting that there is no function call in the parallel programs that destroys a lock, analyze data stream of the parallel programs, determine a location where the lock of the parallel programs is defined and used, so as to find the set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: add marks in the vicinity of locations that the lock of the parallel programs may be finally used.
  • the marks are used to trigger, in the running procedure of the parallel programs, an event notification that the lock of the parallel programs may no longer be used.
  • the determining means 701 is configured to: in response to receiving all the event notifications that the lock of the parallel programs may no longer be used as triggered by the mark, determine that the lock of the parallel programs is no longer used.
  • the determining means is further configured to: in response to detecting that lock of the parallel programs is reclaimed by GC in the running procedure of the parallel programs, identify that the lock of the parallel programs is no longer used.
  • the lock lifecycle analyzing means is further configured to: in response to detecting that there is a function call in the parallel programs that destroys a lock, identify a location where the lock is finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: add marks in the vicinity of the location where the lock is finally used so as to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used.
  • the determining means is further configured to: in response to detecting that a lock of the parallel programs is reclaimed as garbage in the running procedure of the parallel programs, identify that the lock of the parallel programs is no longer used.
  • directed loop detection is performed based on a pruned lock graph to determine whether there is a potential deadlock, which can save a large amount of time and computing resources.
  • a lock graph of a parallel program has N nodes and E edges
  • the algorithm of checking direction loop in the lock graph is divided into the following two steps: 1. find all strongly connected components in the lock graph, the complexity of the algorithm is O(N+E); 2. find all directed loops in each of the strongly connected components, the complexity of the algorithm is O(N2).
  • the complexity of the entire algorithm is O(N2+E). It can be seen that the reduced number of nodes greatly degrades the complexity of the algorithm, and improves the efficiency of deadlock detection.
  • a program defining functions related to the present invention may be transferred to a data storage system or computer system through a variety of signal bearing medium, which includes but not limited to, non-writable memory medium (e.g. CD-ROM), writable memory medium (e.g. floppy disk, hard driver, read/write CD ROM, optical medium) and communication medium such as a computer including Ethernet and a telephone network.
  • signal bearing medium includes but not limited to, non-writable memory medium (e.g. CD-ROM), writable memory medium (e.g. floppy disk, hard driver, read/write CD ROM, optical medium) and communication medium such as a computer including Ethernet and a telephone network.
  • the present invention may be implemented in a single computer system in a centralized manner or in a distributed manner. In such distributed manner, different parts are, distributed across several interconnected computer systems. Any computer system or other apparatus adapted to perform the method described herein is suitable.
  • the present invention is implemented in a combination of computer software and general-purpose computer hardware. In such implementation, when loaded and executed, the computer program will control the computer system to perform the method of the present invention or compose the system of the present invention.

Abstract

A deadlock detection method and computer system for parallel programs. A determination is made that a lock of the parallel programs is no longer used in a running procedure of the parallel programs. A node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, are deleted from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph. The lock graph is constructed according to a lock operation of the parallel programs. Deadlock detection is then performed on the updated lock graph.

Description

    BACKGROUND
  • 1. Field
  • The present invention relates to parallel programs, more particularly to a deadlock detection method and system for parallel programs.
  • 2. Description of the Related Art
  • With the rapid development of computer technology, a single-core processor is gradually replaced by a multi-core processor. The multi-core processor significantly improves processing capability and computing capability of a computer, and sufficiently presents the advantage of parallel computing by integrating a plurality of execution cores into one physical processor. So called parallel computing comprises time parallel and space parallel processing, in which the time parallel is related with pipeline technology while the space parallel is related with the parallel technology performed by multiple processors. Generally, parallel computing is implemented by parallel programs in which processing of a task is separated into multiple portions (threads) and these threads can be executed in parallel, and they can communicate with each other by accessing shared data structures and using proper synchronization methods so as to work cooperatively and correctly.
  • However, process (thread) deadlock is a vital problem for parallel programs. Process (thread) deadlock is a situation wherein two or more processes (threads) are waiting for the other to finish due to a competing shared resource during execution, and two transactions in deadlock will wait indefinitely unless one process (thread) in deadlock gives up the shared resource. Generally, process (thread) deadlock will result in a breakdown of the whole system. There are a lot of factors that will trigger process (thread) deadlock, mainly including: (1) limited system resource; (2) improper order of processes (threads) execution; and (3) unsuitable resource allocation. If system resources are abundant and the parallel processes' requests for resources can all be met, the possibility that a deadlock occurs is low. Otherwise, a deadlock may occur due to competing limited resources. Further, the order and speed of advancement of process execution is different, which may also cause deadlock. In order to avoid damage on the system due to process (thread) deadlock and improve stability of the system, there is a need for an efficient method to detect deadlock such that process (thread) deadlock can be found in time and proper measures can be taken to release the deadlock, thereby preventing the operational condition of the system from further deterioration.
  • Typically, a lock graph is utilized to intuitively represent a deadlock condition. A lock graph corresponds to a running procedure of parallel programs that may be acquired by recording lock operations in the running procedure of the parallel programs, and nodes and directed edges are accordingly added in the lock graph. In the lock graph, a node denotes a lock for resource, and a directed edge pointing from one node to another denotes that a process holding a lock is requesting to acquire a lock of another resource. If directed edges between two or more nodes in a lock graph form a closed directed loop, there is a deadlock in the parallel programs, and thus deadlock can be detected by checking whether there is a directed loop in the lock graph. FIG. 1 shows a diagram of deadlock state of parallel programs, in which thread T1 has acquired a lock of resource R1 and requests a lock of resource R2, thread T2 has the lock of resource R2 and requests the lock of resource R1. Both threads need to acquire the resource held by the other thread for further processing. However, the resources held by T1 or T2 will not be released until the other thread releases its resources, and thus they fall in a deadlock state.
  • However, in practice, it is not very efficient to apply the above approach in deadlock detection since, as the program runs, more and more nodes and edges are added into the lock graph. FIG. 2 shows an example of a lock graph of parallel programs in which there are 1014 nodes and 3051 directed edges, and the operation of detecting directed loop in the lock graph is very slow, thereby consuming large amounts of time and computing resources, and greatly reducing efficiency of deadlock detection.
  • Thus, there is a need for an improved deadlock detection method to enhance efficiency of deadlock detection.
  • SUMMARY
  • In view of the above problems, the present invention provides a deadlock detection method and system for parallel programs.
  • According to an aspect of the invention, there is provided a deadlock detection method for parallel programs, comprising: determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs; deleting a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and performing deadlock detection on the updated lock graph.
  • According to an aspect of the invention, there is provided a deadlock detection system for parallel programs, comprising: a determining means configured to determine that a lock of the parallel programs is no longer used in a running procedure of the parallel programs; a lock deleting means configured to delete a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and a deadlock detection means configured to perform deadlock detection on the updated lock graph.
  • With a deadlock detection method and system for parallel programs provided in the present invention, nodes of locks that are no longer used, and their related edges, are deleted from the lock graph of parallel programs in time, thereby efficiently reducing complexity of the lock graph by reducing large amounts of nodes and edges. Directed loop detection is then done based on pruned lock graph, which can save a large amount of time and computing resources, and thus greatly improve the efficiency of deadlock detection.
  • BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS
  • The invention itself, preferred mode of use, objects and advantages thereof will be better understood from the following detailed description of exemplary embodiments, in conjunction with accompanying drawings, in which:
  • FIG. 1 shows a diagram of a deadlock state of parallel programs;
  • FIG. 2 shows an example of a lock graph of parallel programs;
  • FIG. 3 shows a deadlock detection method for parallel programs according to an embodiment of the present invention;
  • FIG. 4 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to a first embodiment;
  • FIG. 4 b shows a lock graph after nodes of mutual exclusive lock request_mutex and edges related to the mutual exclusive lock request_mutex are deleted from the lock graph of FIG. 4 a;
  • FIG. 4 c shows a lock graph after nodes-of mutual exclusive lock control_mutex and edges related to mutual exclusive lock control_mutex are deleted from the lock graph of FIG. 4 b;
  • FIG. 5 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to a second embodiment;
  • FIG. 5 b shows a lock graph after nodes of lock G and edges related to lock G are deleted from the lock graph of FIG. 5 a;
  • FIG. 5 c shows a lock graph after nodes of lock L1 and edges related to lock L1 are deleted from the lock graph of FIG. 5 b;
  • FIG. 6 a shows a lock graph of byte code in a Java program running on a Java virtual machine (JVM) corresponding to a third embodiment;
  • FIG. 6 b shows a lock graph after nodes of lock G and edges related to lock G are deleted from FIG. 6 a;
  • FIG. 6 c shows a lock graph after nodes of lock L1 and edges related to lock L1 are deleted from FIG. 6 b; and
  • FIG. 7 shows a block diagram of a deadlock detection system for parallel programs according to an embodiment of the present invention.
  • DETAILED DESCRIPTION
  • The deadlock detection method and system for parallel programs according to embodiments of the present invention are described below in connection with the corresponding drawings. FIG. 3 shows a deadlock detection method for parallel programs according to an embodiment of the present invention, comprising: in step S301, it is determined that a lock of the parallel programs is no longer used in the running procedure of the parallel programs; in step S302, a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, are deleted from a lock graph corresponding to the running procedure of the parallel programs in order to acquire an updated lock graph, wherein the lock graph is constructed according to a lock operation of the parallel programs; and in step S303, deadlock detection is performed on the updated lock graph.
  • Specifically, in step S301, wherein determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs, further comprises: in response to receiving event notifications that a lock of the parallel programs is no longer used, it is determined that the lock of the parallel programs is no longer used.
  • Determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs further comprises: a lifecycle of the lock of the parallel programs is analyzed by scanning code of the parallel programs.
  • According to one embodiment of the present invention, analyzing a lifecycle of the lock of the parallel programs further comprises: detecting a location where the lock of the parallel programs is finally used in the running procedure of the parallel programs in response to detecting that there is an explicit function call in the parallel programs to destroy the lock, and marks are added in the vicinity of location that the lock of the parallel programs is finally used. The marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used. For example, in Linux, multi-thread application program often uses a mutual exclusive lock Mutex provided by pthread library, and a function that destroys a lock is int pthread_mutex_destroy(pthread_mutex_t*mutex); while a semaphore used to achieve mutual exclusive by multi-process is also a special lock, and a function that destroys a lock is int semctl(int semid, int semnum, IPC_RMID, . . . ).
  • According to one embodiment of the present invention, analyzing a lifecycle of the lock further comprises: identifying a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Specifically, in response to detecting that there is no explicit function call in the parallel programs to destroy a lock, a data stream of the parallel programs is analyzed, and a set of locations where the lock of the parallel programs is defined and used are determined, so as to identify the set of locations where the lock of the parallel programs may be finally used during the running procedure of the parallel programs. A mark is added near the location that the lock of parallel programs may be finally used, where the marks are used to trigger an notification event that the lock of parallel programs may no longer be used during the running procedure of the parallel programs; and in response to receiving the notification event triggered by the mark, it is determined that the lock of the parallel programs are no longer used.
  • According to one embodiment of the present invention, a static code analysis method can be used to analyze a lifecycles of lock of parallel programs, and the static code analysis performs a code check without executing the code (e.g. perform source code check, binary code check or byte code check). Static code scan is a primary step of static code analysis, and examples of performing static code analysis with respect to multi-thread parallel programs with and without an explicit function call that destroys a lock are listed below. In order to facilitate understanding, each of the following embodiments utilizes static analysis for source code.
  • First Embodiment
  • An example of static code analysis on a c language program example1.c with an explicit function call to destroy a lock is shown below, in which the c language program example1.c contains the mutual exclusive lock Mutex in pthread library of Linux, and a function that destroys the mutual exclusive lock Mutex is: int pthread_mutex_destroy(pthread_mutex_t*mutex); static code analysis needs to scan source code of example1.c without executing the code, identify function code that matches the Mutex destroying function, identify locations that the lock is finally used in the running procedure of parallel programs, and add a mark in the vicinity of these locations to trigger an notification event that the lock is destroyed during running procedure of parallel programs.
  • 1 : #controller thread, named as T1
    2 :  #include <pthread.h>
    3 :
    4 :  pthread_mutex_t list_mutex;
    5 :  pthread_mutex_t request_mutex;
    6 :  pthread_mutex_t control_mutex;
    7 :
    8 :  void controller_thread( )
    9 :  {
    10 :   ...
    11 :   //create worker_thread
    12 :   pthread_create(&tid2, NULL, requester_thread, NULL);
    13 :   //create responser_thread
    14 :   pthread_create(&tid3, NULL, responser_thread, NULL);
    15 :
    16 :   /* control the requester and responser */
    17 :   pthread_mutex_lock(&list_mutex);
    18 :
    19 :   //check the list of request and send out controller message
    20 :   pthread_mutex_lock(&request_mutex);
    21 :
    22 :   /* send message to response_thread */
    23 :   pthread_mutex_lock(&control_mutex);
    24 :   send_control_message( );
    25 :   pthread_mutex_unlock(&control_mutex);
    26 :   ...
    27 :   pthread_mutex_unlock(&request_mutex);
    28 :
    29 :   pthread_mutex_unlock(&list_mutex);
    30 :   .../* other operations */
    31 : }
    32 :
    33 : #requester_thread, named as T2
    34 : void requester_thread( )
    35 : {
    36 :   pthread_mutex_lock(&list_mutex);
    37 :   if (<request_in_list <= 10)
    38 :   {
    39 :     pthread_mutex_lock(&request_mutex);
    40 :     //trigger a new request
    41 :     pthread_mutex_unlock(&request_mutex);
    42 :         pthread_mutex_destroy(&request_mutex);
            < Lock_Could_Be_Removed_From_Graph>
    43 :   }
    44 :   pthread_mutex_unlock(&list_mutex);
    45 : }
    46 :
    47 : #responser_thread, named as T3
    48 : void responser_thread( )
    49 : {
    50 :   pthread_mutex_lock(&list_mutex);
    51 :   pthread_mutex_lock(&control_mutex);
    52 :   //handle the control message from controller
    53 :   pthread_mutex_unlock(&control_mutex);
    54 :   pthread_mutex_destroy(&control_mutex);
            < Lock_Could_Be_Removed_From_Graph>
    55 :   pthread_mutex_unlock(&list_mutex);
    56 : }
  • It is identified by static scan that function calls that match destroy function of mutual exclusive lock Mutex are pthread_mutex_destroy (&request_mutex) located at line 42 and pthread_mutex_destroy(&control_mutex) located at line 54, respectively. Locations of destroy point corresponding to function call of mutual exclusive lock Mutex are determined based on the result of static scanning, as shown in table 1.
  • TABLE 1
    lock location of lock destroy point
    request_mutex example1.c@<line42_instruction_address>
    control_mutex example1.c@<line54_instruction_address>
  • Next, marks are added in the vicinity of locations of all destroy points of mutual lock Mutex in parallel programs, so that an event notification that mutual exclusive lock Mutex is no longer used may be triggered based on the added marks during the running procedure of parallel programs, as shown below, mark “<Lock_Could_Be_Removed_From_Graph>” is added after lines 42 and 54 of parallel programs respectively, so that the event notification that mutual exclusive lock is no longer used is triggered by the added marks in the running procedure of parallel programs. In response to receiving the event notification that mutual exclusive lock Mutex is no longer used, it is determined that mutual exclusive lock Mutex is no longer used in the running procedure of parallel programs.
  •   1 : #controller thread, named as T1
    ......
    42 :       pthread_mutex_destroy(&request_mutex);
          < Lock_Could_Be_Removed_From_Graph>
    .......
    54 :   pthread_mutex_destroy(&control_mutex);
          < Lock_Could_Be_Removed_From_Graph>
    55 :   pthread_mutex_unlock(&list_mutex);
    56 : }
  • FIG. 4 a shows a lock graph of execution procedure of multi-thread parallel programs corresponding to the first embodiment. When the program runs to the location of line 42, nodes of mutual exclusive lock request_mutex, and edges related to mutual exclusive lock request_mutex, are deleted from the lock graph, as shown in FIG. 4 b. Next, when the program runs to the location of line 54, nodes of mutual exclusive lock control_mutex, and edges related to mutual exclusive lock control_mutex, are deleted from the lock graph, as shown in FIG. 4 c. It can be seen from the simplified lock graph that only one node of mutual exclusive lock list_mutex remains, thus there is no deadlock.
  • Second Embodiment
  • An example of static code analysis on a Java language program example2.java without an explicit function call that destroys a lock is shown below.
  • /* main in Example2.java */
    01: new T1.start( );
    02 new T2.start( );
    /* Thread 1, named as T1 */
    03: synchronized(G){
    04:  synchronized(L1){
    05:   synchronized(L2){ }
    06:  }
    07: };
    08: t3 = new T3( );
    09: t2.start( );
    10: t3.join( );
    11: synchronized(L2){
    12:  synchronized(L1){ }
    13: }
    14:
    /* Thread 2, named as T2 */
    15: synchronized(G){
    16:  synchronized(L2){
    17:   synchronized(L1){ }
    18:  }
    19: }
    20:
    /* Thread 3, named as T3 */
    21: synchronized(L1){
    22:  synchronized(L2){ }
    23: }
    24:
  • There is no explicit function call that destroys locks (G, L1 and L2) in the above example of Java language program, thus it is required to analyze the data stream of parallel programs to determine locations in the parallel programs where the lock is defined and used so as to find a set of locations where the lock may be finally used in the running procedure of parallel programs. It is identified through static scan that thread T1 acquires lock G at line 3, releases lock G at line 7; thread 2 acquires lock G at line 15, releases lock G at line 19; thread T4 acquires lock L1 at line 4, releases lock L1 at line 6; thread T1 acquires lock L1 at line 12, releases lock L1 at line 12; thread T2 acquires lock L1 at line 17, releases lock L1 at line 17; thread T3 acquires lock L1 at line 21, releases lock L1 at line 23; thread T1 acquires lock L2 at line 5, releases lock L2 at line 5; thread T1 acquires lock L2 at line 11, releases lock L2 at line 13; thread T2 acquires lock L2 at line 16, releases lock L2 at line 18; and thread T3 acquires lock L2 at line 22, releases the lock at line 22. A set of corresponding locations where locks G, L1 and L2 may be finally used is generated based on the result of the scan, as shown in table 2.
  • TABLE 2
    lock set of locations of possible lock destroy points
    G T1@<line8_instruction_address>
    T2@<line20_instruction_address>
    L1 T1@<line13_instruction_address>
    T2@<line18_instruction_address>
    T3@<line24_instruction_address>
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • Next, as shown below, marks are added in the vicinal locations in the Java program where locks G, L1 and L2 may be finally used, so that an event notification that locks G, L1 and L2 might no longer be used will be triggered based on the added marks in the running procedure of parallel programs. As shown below, marks “<Lock_G_Might_Be_Removed_From_Graph>”, “<Lock_L1_Might_Be_Removed_From_Graph>” and “<Lock_L2_Might_Be_Removd_From_Graph>” are added in the vicinal locations where locks (G, L1 and L2) may be finally used. The embodiment of the present invention selects to add marks after locations where locks (G, L1 and L2) may be finally used, nevertheless, those skilled in the art can appreciate that the purpose of the present invention can also be achieved by adding marks before locations where locks may be finally used. During execution of the program, the event notification is triggered by marks, and table 2 is updated in response to receiving the event notification; on different platforms such as Windows, Linux, a different event notification mechanism can be used.
  • /* main in Example2.java */
    01: new T1.start( );
    02 new T2.start( );
    /* Thread 1, named as T1 */
    03: synchronized(G){
    04:  synchronized(L1){
    05:   synchronized(L2){ }
    06:  }
    07: };
     < Lock_G_Might_Be_Removed_From_Graph >
    08: t3 = new T3( );
    09: t2.start( );
    10: t3.join( );
    11: synchronized(L2){
    12:  synchronized(L1){ }
     < Lock_L1_Might_Be_Removed_From_Graph >
    13: }
     < Lock_L2_Might_Be_Removed_From_Graph >
    14:
    /* Thread 2, named as T2 */
    15: synchronized(G){
    16:  synchronized(L2){
    17:   synchronized(L1){ }
     < Lock_L1_Might_Be_Removed_From_Graph >
    18: }
     < Lock_L2_Might_Be_Removed_From_Graph >
    19: }
     < Lock_G_Might_Be_Removed_From_Graph >
    20:
    /* Thread 3, named as T3 */
    21: synchronized(L1){
    22:  synchronized(L2){ }
     < Lock_L2_Might_Be_Removed_From_Graph >
    23: }
    24: < Lock_L1_Might_Be_Removed_From_Graph >
  • According to the embodiments of the present invention, the following two conditions need to be met when lock G is no longer used: 1) thread T1 proceeds to instruction at line 8; and 2) thread T2 proceeds to instruction at line. 20. In practice, when thread T1 first proceeds to instruction at line 8, the mark will trigger an event notification that lock G may no longer be used to update of table 2, “T1@<line8_instruction_address>” will be deleted from table 2, and the updated table 2 is shown in table 3:
  • TABLE 3
    lock set of locations where lock may be finally used
    G T2@<line20_instruction_address>
    L1 T1@<line13_instruction_address>
    T2@<line18_instruction_address>
    T3@<line24_instruction_address>
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • Next, when thread T2 proceeds to instruction at line 20, the mark triggers an event notification that lock G is no longer used and table 3 is updated, in response to receiving the event notification that lock G may no longer be used, “T2@<line20_instruction_address>” in table 3 is deleted, since all the event notifications that lock G may no longer be used triggered by marks of lock G is received, it is determined that lock G is no longer used, and since the set of locations where lock G may be finally used has been updated as null, lock G is deleted from table 3 and lock graph is notified to update, the updated table 3 is shown in table 4:
  • TABLE 4
    lock set of locations where lock may be finally used
    L1 T1@<line13_instruction_address>
    T2@<line18_instruction_address>
    T3@<line24_instruction_address>
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • FIG. 5 a shows a lock graph of execution procedure of multi-thread program corresponding to the second embodiment, accordingly, nodes of lock G and edges related to lock G are deleted from FIG. 5 a. FIG. 5 b shows the updated lock graph, and then deadlock detection is performed on the updated lock graph 5 b.
  • The following three conditions need to be met when lock L1 is no longer used: 1) thread T1 proceeds to instruction at line 13; 2) thread T2 proceeds to instruction at line 18; and 3) thread T3 proceeds to instruction at line 24. In practice, when thread T2 first proceeds to instruction at line 18, the mark will trigger an event notification that lock L1 may no longer be used and notify updating table 4, “T2@<line 18_instruction_address>” is deleted from table 4, and the updated table 4 is shown in table 5:
  • TABLE 5
    lcok set of locations where lock may be finally used
    L1 T1@<line13_instruction_address>
    T3@<line24_instruction_address>
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • Next, when thread T1 proceeds to instruction at line 13, the mark triggers an event notification that lock L1 is no longer used and notify updating table 6, “T1@<line13_instruction_address>” is deleted from table 5, and the updated table 5 is shown in table 6:
  • lock set of locations where lock may be finally used
    L1 T3@<line24_instruction_address>
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • Finally, when thread T3 proceeds to instruction at line 24, the mark triggers an event notification that lock L1 may no longer be used and updates table 6, in response to receiving the event notification that lock L1 is no longer used, “T3@<line23_instruction_address>” is deleted from table 6, and the updated table 6 is shown in table 7:
  • TABLE 7
    lock set of locations where lock may be finally used
    L2 T1@<line14_instruction_address>
    T2@<line19_instruction_address>
    T3@<line23_instruction_address>
  • Since all the event notifications that lock L1 may no longer be used are received, it is determined that lock L1 is no longer used, accordingly, nodes of lock L1 and edges related to lock L1 are deleted from FIG. 5 b. FIG. 5 c shows the updated lock graph, and then deadlock detection is performed on the updated lock graph 5 c.
  • The above two embodiments of the present invention implements, analysis of lock lifecycle with static code scan, however, it is not limited thereto. Those skilled in the art can appreciate that code scan may also be performed in the running procedure of parallel programs so as to implement analysis of lock lifecycle.
  • According to another embodiment of the invention, for a runtime environment that supports garbage collection, a garbage collection notification mechanism provided by virtual machine can be used to determine that a lock is no longer used. Garbage collection (GC), or referred to as memory garbage collection, is a common automatic memory management technique. A garbage collector attempts to reclaim memory space used by objects which may no longer be used by the objects. For example, when a program de-references an object, memory space allocated for that object can be reclaimed. Since the runtime environment can provide a notification mechanism when an object is reclaimed, the object used as a lock that requires to be notified when reclaimed by GC can be registered in the runtime environment. In response to detecting that locks are reclaimed in the running procedure of parallel programs, i.e., receiving an event notification issued from the runtime environment that locks are reclaimed, it is determined that these locks are no longer used.
  • Third Embodiment
  • An example of dynamically analyzing byte code of Java language program Example3.java running on a JVM (Java virtual machine) by using garbage collection is shown below.
  • /* main in Example3.java */
    1:
    2:
    3: new T1( ).start( ); // start thread T1
    4:
    5: T1:
    6:
    7: synchronized(G) {
    8:  synchronized(L1) {
    9:   synchronized(L2) {
    10:  }
    11: }
    12: new T2( ).start( ); // start thread T2
    13: ...
    14://lock G is garbage collected at this moment
    15:
    16: T2:
    17:
    18: synchronized(L1) {
    19:  synchronized(L2) { }
    20: }
    21: ...
    22//lock L1 is garbage collected at this moment
  • First, objects of locks G, L1 and L2 that require to be notified when reclaimed by GC are registered on the virtual machine, in response to receiving an event notification issued from JVM that lock G is reclaimed. When the. Java program proceeds to instruction at line 14, it is determined that lock G is no longer used. FIG. 6 a shows a lock graph of Java program running on JVM corresponding to the third embodiment, nodes of lock G and edges related to lock G are deleted from the lock graph of FIG. 6 a. FIG. 6 b shows the updated lock graph after nodes of lock G and edges related to lock G are deleted from FIG. 6 a, and then deadlock detection is performed on the updated lock graph 6b. In response to receiving an event notification issued from JVM that lock L1 is reclaimed when the Java program proceeds to instruction at line 22 on JVM, it is determined that lock L1 is no longer used, and nodes of lock L1 and edges related to lock L1 are deleted from FIG. 6 b. FIG. 6 c shows the updated lock graph after nodes of lock L1 and edges related to lock L1 are deleted from FIG. 6 b, and then deadlock detection is performed on the updated lock graph 6 c.
  • According to another embodiment of the present invention, for a runtime environment that supports garbage collection, static code analysis before running of parallel programs can be combined with dynamic analysis during the running procedure of parallel programs (garbage collection notification mechanism) to determine that a lock is no longer used. For certain application program, some locks may have a lot of locations where they could be finally used, e.g. hundreds of locations, thus scanning all the code consume large amounts of time and computing resources. It is relatively difficult to efficiently determine that these locks are no longer used solely by relying on static code analysis, in order to more efficiently determine that these locks are no longer used. Locks that need to be dynamically analyzed may be filtered first through static code analysis, and then the garbage collection notification mechanism can be utilized in the running procedure of the program to determine that the locks are no longer used. The manner of combining static analysis with dynamic analysis can improve efficiency of deadlock detection. An example of analyzing Java language source code Example2.java in the above second embodiment by using a manner of combining static analysis with dynamic analysis is shown below. Although the embodiment of the present invention runs by incorporating Java virtual machine (JVM) within the scope of JVM defined by Java standard specification, JVM may also be any type of virtual machine that is independent of platform, e.g., C#, Smalltalk, Ruby, D language, nuva, and it is not limited to a Java virtual machine.
  • Fourth Embodiment
  • According to the set of locations where locks G, L1 and L2 may be finally used in table 2 in the above second embodiment, the lock with more locations where it may be finally used is found (e.g. lock L1) to perform dynamic scan. Lock L1 and its corresponding set of locations where it may be finally used are deleted from table 2, and lock L1 that requires to be notified of garbage collection is registered on JVM. The locations that locks G and L2 may be finally used in table 2 are updated in the running procedure of parallel programs by the static code analysis method of the second embodiment, so as to determine that locks G and L2 are no longer used in the running procedure of parallel programs, accordingly, nodes of locks G and L2 and edges related to locks G and L2 are deleted from the lock graph. Meanwhile, during running of parallel programs, in response to receiving an event notification that L1 is reclaimed by GC when Java program proceeds to a certain location such as line 20, it is determined that lock L1 is no longer used, and nodes of lock L1 and edges related to lock L1 are deleted from the corresponding lock graph.
  • Based on the same inventive concept, the present invention also provides a deadlock detection system for parallel programs. FIG. 7 shows a block diagram of the deadlock detection system for parallel programs according to an embodiment of the present invention. As shown, the deadlock detection system for parallel programs comprises: a determining means 701 configured to determine that a lock of the parallel programs is no longer used in the running procedure of the parallel programs; a lock deleting means 702 configured to delete a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a corresponding lock graph to generate an updated lock graph, wherein the lock graph is constructed according to lock operation of the parallel programs; and a deadlock detection means 703 is configured to perform deadlock detection on the updated lock graph.
  • The determining means 701 is further configured to: in response to receiving event notifications that a lock of the parallel programs is no longer used, determining in the running procedure of the parallel programs that the lock of the parallel programs is no longer used.
  • The determining means 701 further comprises: a lock lifecycle analyzing means configured to analyze a lifecycle of the lock of the parallel programs by scanning code of the parallel programs.
  • According to one embodiment of the present invention, the lock lifecycle analyzing means is further configured to: identify a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: in response to detecting that there is no function call in the parallel programs that destroys a lock, analyze data stream of the parallel programs, determine a location where the lock of the parallel programs is defined and used, so as to find the set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: add marks in the vicinity of locations that the lock of the parallel programs may be finally used. The marks are used to trigger, in the running procedure of the parallel programs, an event notification that the lock of the parallel programs may no longer be used. Further, the determining means 701 is configured to: in response to receiving all the event notifications that the lock of the parallel programs may no longer be used as triggered by the mark, determine that the lock of the parallel programs is no longer used.
  • The determining means is further configured to: in response to detecting that lock of the parallel programs is reclaimed by GC in the running procedure of the parallel programs, identify that the lock of the parallel programs is no longer used.
  • According to one embodiment of the present invention, the lock lifecycle analyzing means is further configured to: in response to detecting that there is a function call in the parallel programs that destroys a lock, identify a location where the lock is finally used in the running procedure of the parallel programs. Further, the lock lifecycle analyzing means is configured to: add marks in the vicinity of the location where the lock is finally used so as to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used.
  • According to one embodiment of the present invention, the determining means is further configured to: in response to detecting that a lock of the parallel programs is reclaimed as garbage in the running procedure of the parallel programs, identify that the lock of the parallel programs is no longer used.
  • With the method and system of detecting deadlocks in parallel programs of the embodiments of the present invention, directed loop detection is performed based on a pruned lock graph to determine whether there is a potential deadlock, which can save a large amount of time and computing resources. Assume that a lock graph of a parallel program has N nodes and E edges, the algorithm of checking direction loop in the lock graph is divided into the following two steps: 1. find all strongly connected components in the lock graph, the complexity of the algorithm is O(N+E); 2. find all directed loops in each of the strongly connected components, the complexity of the algorithm is O(N2). Thus, the complexity of the entire algorithm is O(N2+E). It can be seen that the reduced number of nodes greatly degrades the complexity of the algorithm, and improves the efficiency of deadlock detection.
  • It should be appreciated that at least some aspects of the invention may be alternatively embodied as a program product. A program defining functions related to the present invention may be transferred to a data storage system or computer system through a variety of signal bearing medium, which includes but not limited to, non-writable memory medium (e.g. CD-ROM), writable memory medium (e.g. floppy disk, hard driver, read/write CD ROM, optical medium) and communication medium such as a computer including Ethernet and a telephone network. Thus, it should be appreciated that, in such signal bearing medium, when carrying or encoding computer readable instructions for managing method functions in the present invention therein, it represents an alternative embodiment of the invention. The present invention may be implemented in hardware, software, firmware or a combination thereof. The present invention may be implemented in a single computer system in a centralized manner or in a distributed manner. In such distributed manner, different parts are, distributed across several interconnected computer systems. Any computer system or other apparatus adapted to perform the method described herein is suitable. Preferably, the present invention is implemented in a combination of computer software and general-purpose computer hardware. In such implementation, when loaded and executed, the computer program will control the computer system to perform the method of the present invention or compose the system of the present invention.
  • The foregoing description of the preferred embodiments of the invention has been presented for purposes of illustration. It is not intended to be exhaustive or to limit the invention to the precise form disclosed; many modifications and variations are possible in light of the above teaching. It is apparent to those skilled in the art that such modifications and variations are encompassed within the scope of the invention as defined by the appended claims.

Claims (20)

1. A computer implemented method for deadlock detection of parallel programs, comprising:
determining that a lock of the parallel programs is no longer used in a running procedure of the parallel programs;
deleting a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs to acquire an updated lock graph, wherein the lock graph is constructed according to lock operation of the parallel programs; and
performing deadlock detection on the updated lock graph.
2. The computer implemented method according to claim 1, wherein determining that a lock of the parallel programs is no longer used in the running procedure of the parallel programs further comprising:
in response to receiving an event notification that a lock of the parallel programs is no longer used, determining that a lock of the parallel programs is no longer used.
3. The computer implemented method according to claim 2, wherein determining a lock of the parallel programs is no longer used in the running procedure of the parallel programs further comprising:
analyzing a lifecycle of the lock of the parallel programs by scanning code of the parallel programs.
4. The computer implemented method according to claim 3, wherein analyzing the lifecycle of the lock of the parallel programs further comprising:
identifying a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs.
5. The computer implemented method according to claim 4, wherein identifying the set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs further comprising:
in response to detecting that there is no function call in the parallel programs that destroys a lock, analyzing a data stream of the parallel programs, determining a location where the lock of the parallel programs is defined and used in order to identify the set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs.
6. The computer implemented method according to claim 5, further comprising:
adding marks in the vicinity of locations that the lock of the parallel programs may be finally used, wherein the marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs may no longer be used.
7. The computer implemented method according to claim 6, wherein in response to receiving an event notification that the lock of the parallel programs is no longer used, determining that the lock of the parallel programs is no longer used, and further comprising:
in response to receiving all event notifications that the lock of the parallel programs may no longer be used as triggered by the mark, determining that the lock of the parallel programs is no longer used.
8. The computer implemented method according to claim 3, wherein analyzing the lifecycle of the lock of the parallel programs further comprising:
in response to detecting that there is a function call in the parallel programs that destroys a lock, identifying a location where the lock of the parallel programs is finally used in the running procedure of the parallel programs.
9. The computer implemented method according to claim 8, further comprising:
adding marks in the vicinity of the location where the lock of the parallel programs is finally used, wherein the marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used.
10. The computer implemented method according to claim 1, wherein determining that the lock of the parallel programs is no longer used in the running procedure of the parallel programs further comprising:
in response to detecting that the lock of the parallel programs is reclaimed by a garbage collection process in the running procedure of the parallel programs, identifying that the lock of the parallel programs is no longer used.
11. A computer system for deadlock detection of parallel programs, comprising:
first programming instructions configured to determine that a lock of the parallel programs is no longer used in a running procedure of the parallel programs;
second programming instructions configured to delete a node corresponding to the lock that is no longer used, and edges relating to the lock that is no longer used, from a lock graph corresponding to the running procedure of the parallel programs to acquire an updated lock graph, wherein the lock graph is constructed according to lock operation of the parallel programs; and
third programming instructions configured to perform deadlock detection on the updated lock graph.
12. The computer system according to claim 11, wherein the first programming instructions is further configured to: in response to receiving an event notification that the lock of the parallel programs is no longer used, determine that the lock of the parallel programs is no longer used.
13. The computer system according to claim 12, wherein the first programming instructions further comprises:
first programming sub-instructions configured to analyze a lifecycle of the lock of the parallel programs by scanning code of the parallel programs.
14. The computer system according to claim 13, wherein the first programming sub-instructions is further configured to:
identify a set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs.
15. The computer system according to claim 14, wherein the first programming sub-instructions is further configured to:
in response to detecting that there is no function call in the parallel programs that destroys a lock, analyze a data stream of the parallel programs, determine a location where the lock of the parallel programs is defined and used in order to find the set of locations where the lock of the parallel programs may be finally used in the running procedure of the parallel programs.
16. The computer system according to claim 15, wherein the first programming sub-instructions is further configured to:
add marks in the vicinity of locations that the lock of the parallel programs may be finally used, wherein the marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs may no longer be used.
17. The computer system according to claim 16, wherein the first programming instructions is further configured to:
in response to receiving all event notifications that the lock of the parallel programs may no longer be used as triggered by the mark, determine that the lock of the parallel programs is no longer used.
18. The computer system according to claim 13, wherein the first programming sub-instructions is further configured to:
in response to detecting that there are function call in the parallel programs that destroys a lock, identify a location where the lock of the parallel programs is finally used in the running procedure of the parallel programs.
19. The computer system according to claim 18, wherein the first programming sub-instructions is further configured to:
add marks in the vicinity of the location where the lock of the parallel programs is finally used, wherein the marks are used to trigger, in the running procedure of the parallel programs, event notifications that the lock of the parallel programs is no longer used.
20. The computer system according to claim 11, wherein the first programming instructions is further configured to:
in response to detecting that lock of the parallel programs is reclaimed by garbage collection in the running procedure of the parallel programs, identify that the lock of the parallel programs is no longer used.
US12/826,759 2009-06-30 2010-06-30 Deadlock detection method and system for parallel programs Abandoned US20100333110A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US13/437,339 US8661450B2 (en) 2009-06-30 2012-04-02 Deadlock detection for parallel programs

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN200910139821.2 2009-06-30
CN200910139821.2A CN101937365B (en) 2009-06-30 2009-06-30 Deadlock detection method of parallel programs and system

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13/437,339 Continuation US8661450B2 (en) 2009-06-30 2012-04-02 Deadlock detection for parallel programs

Publications (1)

Publication Number Publication Date
US20100333110A1 true US20100333110A1 (en) 2010-12-30

Family

ID=43382238

Family Applications (2)

Application Number Title Priority Date Filing Date
US12/826,759 Abandoned US20100333110A1 (en) 2009-06-30 2010-06-30 Deadlock detection method and system for parallel programs
US13/437,339 Expired - Fee Related US8661450B2 (en) 2009-06-30 2012-04-02 Deadlock detection for parallel programs

Family Applications After (1)

Application Number Title Priority Date Filing Date
US13/437,339 Expired - Fee Related US8661450B2 (en) 2009-06-30 2012-04-02 Deadlock detection for parallel programs

Country Status (2)

Country Link
US (2) US20100333110A1 (en)
CN (1) CN101937365B (en)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279417A (en) * 2013-06-05 2013-09-04 福州瑞芯微电子有限公司 Methods and device for detecting abnormal locking
US8661450B2 (en) 2009-06-30 2014-02-25 International Business Machines Corporation Deadlock detection for parallel programs
CN103761182A (en) * 2013-12-26 2014-04-30 上海华为技术有限公司 Method and device for deadlock detection
WO2016003412A1 (en) * 2014-06-30 2016-01-07 Hewlett-Packard Development Company, L.P. Concurrent dead actor collection
CN106776053A (en) * 2016-12-23 2017-05-31 济南大学 A kind of solving job shop scheduling problem Deadlock Detection and restorative procedure based on matrix
US10248420B2 (en) 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
US10331500B2 (en) 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5745868B2 (en) * 2011-01-18 2015-07-08 トヨタ自動車株式会社 Multiprocessor system
US8856764B2 (en) * 2011-01-25 2014-10-07 International Business Machines Corporation Distributed static analysis of computer software applications
US9575816B2 (en) * 2012-03-29 2017-02-21 Via Technologies, Inc. Deadlock/livelock resolution using service processor
TWI509408B (en) * 2013-01-23 2015-11-21 Realtek Semiconductor Corp Deadlock detection method and machine readable medium
US9396226B2 (en) 2013-06-24 2016-07-19 International Business Machines Corporation Highly scalable tree-based trylock
CA2831134A1 (en) * 2013-10-24 2015-04-24 Ibm Canada Limited - Ibm Canada Limitee Identification of code synchronization points
CN103678122B (en) * 2013-11-29 2016-03-30 华为技术有限公司 A kind of deadlock detection method, equipment and system
CN105243023B (en) * 2015-11-24 2017-09-26 无锡江南计算技术研究所 Parallel Runtime error checking method
CN105786703B9 (en) * 2016-02-01 2018-04-13 中国科学院软件研究所 A kind of deadlock self-repairing method obtained in advance based on lock
CN106201874B (en) * 2016-07-06 2018-12-28 华为技术有限公司 The MHP analysis method and device of concurrent program
CN109918207A (en) * 2019-02-18 2019-06-21 天津麒麟信息技术有限公司 A kind of c program deadlock positioning method of non-intruding
CN111752718B (en) * 2020-05-28 2022-07-12 西安深信科创信息技术有限公司 Low-overhead deadlock prediction method and device and electronic equipment
CN117076147B (en) * 2023-10-13 2024-04-16 支付宝(杭州)信息技术有限公司 Deadlock detection method, device, equipment and storage medium

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784556A (en) * 1994-04-18 1998-07-21 Bull S.A. Analyzer using control graph for system call function and lists of lock applications for all possible synchronizations of processes to analyze risks of blocking operation
US6715146B1 (en) * 1996-06-24 2004-03-30 Oracle International Corporation Efficiently distributing information used for lock management among distributed resource objects using sequence numbers
US20060070076A1 (en) * 2004-09-29 2006-03-30 Zhiqiang Ma Detecting lock acquisition hierarchy violations in multithreaded programs
US7065763B1 (en) * 2000-09-29 2006-06-20 Emc Corporation Method of reducing contention of a highly contended lock protecting multiple data items
US7152157B2 (en) * 2003-03-05 2006-12-19 Sun Microsystems, Inc. System and method for dynamic resource configuration using a dependency graph
US20070150897A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Methods and apparatus for detecting deadlock in multithreading programs
US20070271570A1 (en) * 2006-05-17 2007-11-22 Brown Douglas P Managing database utilities to improve throughput and concurrency
US20100198799A1 (en) * 2007-06-20 2010-08-05 Sanjeev Krishnan Method and Apparatus for Software Simulation
US20100235817A1 (en) * 2009-03-11 2010-09-16 Nec Laboratories America, Inc. Fast and accurate data race detection for concurrent programs with asynchronous calls
US7844946B2 (en) * 2006-09-26 2010-11-30 Intel Corporation Methods and apparatus to form a transactional objective instruction construct from lock-based critical sections
US20120198460A1 (en) * 2009-06-30 2012-08-02 International Business Machines Corporation Deadlock Detection Method and System for Parallel Programs

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07113924B2 (en) 1986-02-14 1995-12-06 インターナショナル・ビジネス・マシーンズ・コーポレーション Data base search system
US5280619A (en) * 1990-05-17 1994-01-18 Texas Instruments Incorporated System for accessing shared data using a serialization graph constructed from a history file showing completed locking dependencies between transactions
EP0595453B1 (en) * 1992-10-24 1998-11-11 International Computers Limited Distributed data processing system
US7185339B2 (en) * 2001-08-03 2007-02-27 Oracle International Corporation Victim selection for deadlock detection
US20080282244A1 (en) 2007-05-07 2008-11-13 Microsoft Corporation Distributed transactional deadlock detection

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784556A (en) * 1994-04-18 1998-07-21 Bull S.A. Analyzer using control graph for system call function and lists of lock applications for all possible synchronizations of processes to analyze risks of blocking operation
US6715146B1 (en) * 1996-06-24 2004-03-30 Oracle International Corporation Efficiently distributing information used for lock management among distributed resource objects using sequence numbers
US7065763B1 (en) * 2000-09-29 2006-06-20 Emc Corporation Method of reducing contention of a highly contended lock protecting multiple data items
US7152157B2 (en) * 2003-03-05 2006-12-19 Sun Microsystems, Inc. System and method for dynamic resource configuration using a dependency graph
US20060070076A1 (en) * 2004-09-29 2006-03-30 Zhiqiang Ma Detecting lock acquisition hierarchy violations in multithreaded programs
US20070150897A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Methods and apparatus for detecting deadlock in multithreading programs
US20070271570A1 (en) * 2006-05-17 2007-11-22 Brown Douglas P Managing database utilities to improve throughput and concurrency
US7844946B2 (en) * 2006-09-26 2010-11-30 Intel Corporation Methods and apparatus to form a transactional objective instruction construct from lock-based critical sections
US20100198799A1 (en) * 2007-06-20 2010-08-05 Sanjeev Krishnan Method and Apparatus for Software Simulation
US20100235817A1 (en) * 2009-03-11 2010-09-16 Nec Laboratories America, Inc. Fast and accurate data race detection for concurrent programs with asynchronous calls
US20120198460A1 (en) * 2009-06-30 2012-08-02 International Business Machines Corporation Deadlock Detection Method and System for Parallel Programs

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8661450B2 (en) 2009-06-30 2014-02-25 International Business Machines Corporation Deadlock detection for parallel programs
CN103279417A (en) * 2013-06-05 2013-09-04 福州瑞芯微电子有限公司 Methods and device for detecting abnormal locking
CN103761182A (en) * 2013-12-26 2014-04-30 上海华为技术有限公司 Method and device for deadlock detection
WO2016003412A1 (en) * 2014-06-30 2016-01-07 Hewlett-Packard Development Company, L.P. Concurrent dead actor collection
US10503636B2 (en) 2014-06-30 2019-12-10 Hewlett Packard Enterprise Development Lp Concurrent hierarchical dead actor collection in a distributed system
CN106776053A (en) * 2016-12-23 2017-05-31 济南大学 A kind of solving job shop scheduling problem Deadlock Detection and restorative procedure based on matrix
US10248420B2 (en) 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
US10331500B2 (en) 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization
US10445096B2 (en) 2017-04-05 2019-10-15 Cavium, Llc Managing lock and unlock operations using traffic prioritization
US10599430B2 (en) * 2017-04-05 2020-03-24 Cavium, Llc Managing lock and unlock operations using operation prediction

Also Published As

Publication number Publication date
CN101937365A (en) 2011-01-05
US20120198460A1 (en) 2012-08-02
US8661450B2 (en) 2014-02-25
CN101937365B (en) 2013-05-15

Similar Documents

Publication Publication Date Title
US8661450B2 (en) Deadlock detection for parallel programs
US7917909B2 (en) Detecting deadlocks in interop-debugging
KR101143214B1 (en) Method and system for detecting potential races in multithreaded program
US6854108B1 (en) Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
US8533699B2 (en) System and method for optimizing a code section by forcing a code section to be executed atomically
US20110258608A1 (en) Method and apparatus to locate bottleneck of java program
US8775769B2 (en) Partition-based method and apparatus for diagnosing memory leak in java systems
JP5270268B2 (en) Computer system for allowing exclusive access to shared data, method and computer-readable recording medium
US20060130061A1 (en) Use of rollback RCU with read-side modifications to RCU-protected data structures
US20040025164A1 (en) Detecting deadlocks in multithreaded programs
JPH10254716A (en) Detection of concurrent error in multi-threaded program
US20070143766A1 (en) Deadlock detection in a computing environment
US20150006961A1 (en) Capturing trace information using annotated trace output
JP5435741B2 (en) Using mold-fixability to facilitate conflict management
US8151255B2 (en) Using police threads to detect dependence violations to reduce speculative parallelization overhead
US9870314B1 (en) Update testing by build introspection
US8135690B2 (en) Concurrency object classification
Hsiao et al. Asyncclock: Scalable inference of asynchronous event causality
WO2015027403A1 (en) Testing multi-threaded applications
US20120059997A1 (en) Apparatus and method for detecting data race
US8615760B2 (en) Facilitating memory analysis
US20080163175A1 (en) Lock suitability analysis system and method
Yang et al. Histlock+: precise memory access maintenance without lockset comparison for complete hybrid data race detection
US8682914B2 (en) Method and system for robust futexes
KR102141620B1 (en) Method and Apparatus for detecting atomicity violation for shared memory used in multi-process/multi-thread

Legal Events

Date Code Title Description
AS Assignment

Owner name: INTERNATIONAL BUSINESS MACHINES CORPORATION, NEW Y

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:LUO, ZHI DA;QI, YAO;ZHENG, YONG;REEL/FRAME:024777/0231

Effective date: 20100612

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO PAY ISSUE FEE