mjqm-simulator

MJQM simulator

Simulator for Multiserver Job Queueing Model (MJQM)

A high-performance discrete-event simulator for analyzing scheduling policies in multiserver queueing systems with heterogeneous job requirements. Supports multiple policies (FIFO, SMASH, Back Filling, Most Server First, and more), diverse workload configurations, and comprehensive performance analysis.

Prerequisites

Depending on your system, different commands can be used to install the required tools. We’ll use just Ubuntu and MacOS as examples.

C++ toolchain

We ensure that the standard g++ compiler, using the C++20 standard, can be used to compile the project. Its minimum supported version is the latest in the 10 series.

sudo apt install build-essential # Ubuntu
brew install gcc # MacOS

[!Note] On MacOS, if in the past you run the xcode-select --install command, you will find two versions of the compiler installed. To manually use the standard gcc version, you can refer to the g++-{main-version} binary. Using the configure and rebuild scripts, we try to select the correct version.

CMake

The project uses the CMake build system, we tested it with version 3.16 and higher.

sudo apt install cmake # Ubuntu
brew install --cask cmake # MacOS

Boost

The project uses the Boost library, we tested it with version 1.71 and higher.

sudo apt install libboost-all-dev # Ubuntu
brew install boost # MacOS

Python3

To run scripts, you need to have Python3 installed on your system, in addition to the previous requirements.

We recommend using uv as Python package manager, for which we provide the pyproject.toml configuration file.

Build

To prepare and compile the project with cmake, use the following command from the project root directory:

./configure [--debug] [--clean] [--no-build] [--only-build] [--no-uv] [--help]

This will create an executable named <file> for each configured <file>.cpp in the root directory. It will also prepare the Python environment with uv, installing it for the current user if missing.

The additional parameters work as such:

[!Note] To dig deeper into the details, in the output of the configure script you can find the actual commands used to configure and build the project, prepended with +.

Rebuild

If you change some code and want to rebuild the project, you can use the rebuild script:

./rebuild [--debug] [--clean]

The additional parameters work as such: