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.
Depending on your system, different commands can be used to install the required tools. We’ll use just Ubuntu and MacOS as examples.
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 --installcommand, you will find two versions of the compiler installed. To manually use the standardgccversion, you can refer to theg++-{main-version}binary. Using theconfigureandrebuildscripts, we try to select the correct version.
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
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
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.
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:
--debug / -d to build with debug symbols (useful for IDEs).--clean / -c to remove the cmake directory before configuring the project, effectively doing a full fresh restart.--build / -b (--no-build) to toggle building on or off. Building is on by default.--only-build to skip configuration entirely (both CMake and uv) and proceed straight to building.--no-uv to skip the installation of uv and the Python environment.--help / -h to print usage information.[!Note] To dig deeper into the details, in the output of the
configurescript you can find the actual commands used to configure and build the project, prepended with+.
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:
--debug to rebuild with debug symbols (you need to have configured the project with the --debug parameter already).--clean to add the --clean-first parameter to cmake, that will remove all prebuilt symbols and objects before rebuilding the project, without doing a full fresh restart.