3 research outputs found

    Producing Scheduling that Causes Concurrent Programs to Fail

    Get PDF
    A noise maker is a tool that seeds a concurrent program with conditional synchronization primitives (such as yield()) for the purpose of increasing the likelihood that a bug manifest itself. This work explores the theory and practice of choosing where in the program to induce such thread switches at runtime. We introduce a novel fault model that classifies locations as .good., .neutral., or .bad,. based on the effect of a thread switch at the location. Using the model we explore the terms in which efficient search for real-life concurrent bugs can be carried out. We accordingly justify the use of probabilistic algorithms for this search and gain a deeper insight of the work done so far on noise-making. We validate our approach by experimenting with a set of programs taken from publicly available multi-threaded benchmark. Our empirical evidence demonstrates that real-life behavior is similar to what our model predicts

    Preemption Sealing for Efficient Concurrency Testing

    Full text link

    Effective testing for concurrency bugs

    Get PDF
    In the current multi-core era, concurrency bugs are a serious threat to software reliability. As hardware becomes more parallel, concurrent programming will become increasingly pervasive. However, correct concurrent programming is known to be extremely challenging for developers and can easily lead to the introduction of concurrency bugs. This dissertation addresses this challenge by proposing novel techniques to help developers expose and detect concurrency bugs. We conducted a bug study to better understand the external and internal effects of real-world concurrency bugs. Our study revealed that a significant fraction of concurrency bugs qualify as semantic or latent bugs, which are two particularly challenging classes of concurrency bugs. Based on the insights from the study, we propose a concurrency bug detector, PIKE that analyzes the behavior of program executions to infer whether concurrency bugs have been triggered during a concurrent execution. In addition, we present the design of a testing tool, SKI, that allows developers to test operating system kernels for concurrency bugs in a practical manner. SKI bridges the gap between user-mode testing and kernel-mode testing by enabling the systematic exploration of the kernel thread interleaving space. Our evaluation shows that both PIKE and SKI are effective at finding concurrency bugs.Im gegenwĂ€rtigen Multicore-Zeitalter sind Fehler aufgrund von NebenlĂ€ufigkeit eine ernsthafte Bedrohung der ZuverlĂ€ssigkeit von Software. Mit der wachsenden Parallelisierung von Hardware wird nebenlĂ€ufiges Programmieren nach und nach allgegenwĂ€rtig. Diese Art von Programmieren ist jedoch als Ă€ußerst schwierig bekannt und kann leicht zu Programmierfehlern fĂŒhren. Die vorliegende Dissertation nimmt sich dieser Herausforderung an indem sie neuartige Techniken vorschlĂ€gt, die Entwicklern beim Aufdecken von NebenlĂ€ufigkeitsfehlern helfen. Wir fĂŒhren eine Studie von Fehlern durch, um die externen und internen Effekte von in der Praxis vorkommenden NebenlĂ€ufigkeitsfehlern besser zu verstehen. Diese ergibt, dass ein bedeutender Anteil von solchen Fehlern als semantisch bzw. latent zu charakterisieren ist -- zwei besonders herausfordernde Klassen von NebenlĂ€ufigkeitsfehlern. Basierend auf den Erkenntnissen der Studie entwickeln wir einen Detektor (PIKE), der ProgrammausfĂŒhrungen daraufhin analysiert, ob NebenlĂ€ufigkeitsfehler aufgetreten sind. Weiterhin prĂ€sentieren wir das Design eines Testtools (SKI), das es Entwicklern ermöglicht, Betriebssystemkerne praktikabel auf NebenlĂ€ufigkeitsfehler zu ĂŒberprĂŒfen. SKI fĂŒllt die LĂŒcke zwischen Testen im Benutzermodus und Testen im Kernelmodus, indem es die systematische Erkundung der Kernel-Thread-Verschachtelungen erlaubt. Unsere Auswertung zeigt, dass sowohl PIKE als auch SKI effektiv NebenlĂ€ufigkeitsfehler finden
    corecore