Optimizing complex software-based systems presents one of the biggest challenges for computer engineers today. As programs and computer systems become more and more sophisticated, identifying the key areas of inefficiencies for improving performance becomes a formidable challenge. Particularly in network environments, where multiple machines may be interconnected and various interactions take place between different software, identifying inefficiencies can require complex analysis of enormous volumes of data. Furthermore, as the limits of processing power and network bandwidth in computing systems are reached, inefficiencies can result in significantly degraded user experience, often manifested through slow or interrupted operation.
For example, in a computing system, when a process blocks other processes from completing by locking a resource that is required by the other processes, known as lock contention, significant inefficiencies can result. Lock contention can have wide-spreading effects in a computing system when multiple processes have interdependencies. Hence, identifying and improving processes that cause inefficiencies due to lock contention is a vital task for improving system efficiency. However, particularly in complex systems, identifying the key processes that cause inefficiencies can be a daunting task involving sophisticated analysis of large numbers of processes, complicated interdependencies, and lock contention events. A more efficient approach is desirable for identifying lock contention-related issues in computing systems.