Abstract

Data race occurs in multithreaded program when several threads simultaneously access same shared data and at least of them writes. Two main approaches to automatic race detection - static and dynamic - have their pros and cons. Dynamic analysis can provide best precision on certain program execution but introduce enormous runtime overheads. Earlier we introduced high-performance approach that improves performance of dynamic race detection. The key idea is to define and exclude external trusted parts of code (e.g. libraries) from analysis and replace them with specifications of their behavior in multithreaded environment. Possible behavior was classified and corresponding language for describing contracts developed. Evaluation on lightweight applications confirmed performance boost but further industrial usage of detector revealed some problems. This article covers that problems, introduces method and architecture of contract processing module and some technical features that help to apply proposed approach on high load production systems.

Highlights

  • Data race occurs in multithreaded program when several threads simultaneously access same shared data and at least of them writes

  • Earlier we introduced high-performance approach that improves performance of dynamic race detection

  • This article covers that problems, introduces method and architecture of contract processing module and some technical features that help to apply proposed approach on high load production systems

Read more

Summary

Синхронизационные контракты и детектор jDRD

Основным точным алгоритмом динамического обнаружения гонок в программах, основанных на модели разделяемой памяти, является алгоритм happens-before [18, 30], являющийся, фактически, поиском гонок «по определению». Для повышения производительности ранее авторами был предложен подход синхронизационных контрактов, в основе которого лежит два наблюдения. На основе этих наблюдений был разработан метод синхронизационных контрактов, а также динамический детектор jDRD [27-29, 33]. Вызов пары методов (или несколько пар методов одного класса) обеспечивают передачу отношения happens-before согласно документации; 2. Обеспечивающих передачу отношения happens-before, называется happens-before контрактом. В последующей статье [29] представлен язык описания контрактов, позволяющий разрабатывать синхронизационные контракты отдельных методов, пар методов или классов. Это обеспечивает переиспользуемость контрактов – достаточно описать один раз контракты библиотеки и внести файл с ними в комплект поставки. В дальнейшем эти контракты используются на фазе динамического анализа: перед вызовом метода детектор определяет, есть ли контракт для этого метода, и если есть, то обрабатывает метод в соответствии с этим контрактом, что и даёт прирост производительности (в противном случае пришлось бы проводить анализ всего кода метода). Во время выполнения таких операций управление передаётся в jDRD, который динамически обсчитывает векторные часы и обнаруживает гонки

Проверка корректности контрактов
Архитектура модуля применения контрактов
Экспериментальное исследование
Findings
Заключение
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call