Skip to content

radrow/ddmon

Repository files navigation

DDMon

DDMon proof-of-concept monitoring tool for distributed black-box .deadlock detection in Erlang and Elixir systems based on generic servers (gen_server). We developed the tool as a drop-in replacement for generic servers with minimal user intervention required. DDMon is the implementation and companion artifact of our work accepted at OOPSLA 2025: "Correct Black-Box Monitors for Distributed Deadlock Detection: Formalisation and Implementation"

This document contains prerequisites and instructions for building DDMon.

NOTE: To evaluate the OOPSLA'25 artifact, you can use a Docker-based setup for DDMon. In this case, you can simply follow the instructions in OVERVIEW.md and skip the rest of this file.

NOTE: The following build instructions are tested on GNU/Linux (Ubuntu 24.04 and 25.04, and Fedora 42) and macOS.

Build prerequisites

Optional: script for a fresh local installation of Erlang and Elixir

If you do not have Erlang or Elixir installed, we provide a script that automatically downloads and installs the correct versions. Make sure you have the following build dependencies installed on your system:

  • autoconf
  • make
  • libssl-dev
  • openssl
  • ncurses
  • wxWidgets

To automatically obtain the right versions of Erlang and Elixir, source (not run!) the provided script in bash:

source install-otp.sh

This will use asdf version manager to install Erlang and Elixir. If you do not have asdf on your system, it shall be installed in the currently visited directory. You may need to run this script in every shell session in order to set up PATH correctly.

Building DDMon

To create a local build of DDMon, run:

make

If you do not have make, you can run the following instead:

mix deps.get
mix escript.build

Evaluating the OOPSLA'25 artifact

After building DDMon, you can follow the instructions referenced from OVERVIEW.md --- except that, to use your local build of DDMon, you should remove the Docker-related part of each command. For example, if the instructions ask you to run:

docker run --rm -v "$(pwd)/output:/app/output" ddmon ./bench.sh small

then you should run instead:

./bench.sh small

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •