This document shows how to reproduce the experimental sections (6.2 to 6.5) of article @lightpredenergy.
We hope that this document is enough to reproduce the whole experiments from scratch.
However, as reproducing the exact analyses and experiments conducted by the authors requires to download and store lots of input trace data (#box([$tilde.eq$ 300 Go)]) and to do some heavy computations,
various intermediate and final results have been cached and made available on #todo[Zenodo] to enable the reproduction of only subparts of the experimental pipeline. In particular, the final analyses of the article are done in standalone notebooks whose input data is available and small.
Unless otherwise specified, all commands shown in this document are expressed in #link("https://en.wikipedia.org/wiki/Bourne_shell")[`sh`] and are thus compatible with `bash` and `zsh`. Every command that takes a significant amount of time, storage or bandwidth have its overhead given in the second part of the box. Unless otherwise specified, execution times have been obtained on a powerful computation node that uses 2x Intel Xeon Gold 6130.
A #link("https://en.wikipedia.org/wiki/MD5")[MD5 hash] is given for the output files that we are think are important, and all these files can directly be downloaded on #todo[zenodo].
The MD5 hashes have been computed by #link("https://www.gnu.org/software/coreutils/")[GNU coreutils]'s`md5sum`command.
@@ -89,12 +99,14 @@ All the software environments required to reproduce the analyses and experiments
Nixcanbuildthe*full*softwarestackneededforthisexperimentaslongassourcecoderemainsavailable.Aswealsoputoursourcecodeon#link("https://www.softwareheritage.org/")[SoftwareHeritage]wehopethatthisartifactwillhavelong-termlongevity.Forthesakeofthisartifactreviewers' quality of life, we have set up a binary cache with precompiled versions of the software used in the experiments.
No special hardware is required to reproduce our work. We think that our Nix environments will work on future Nix versions, but for the sake of traceability we stress that we have used Nix 2.18.0 installed either by #link("https://archive.softwareheritage.org/swh:1:rev:b5b47f1ea628ecaad5f2d95580ed393832b36dc8;origin=https://github.com/DavHau/nix-portable;visit=swh:1:snp:318694dfdf0449f0a95b20aab7e8370cff809a66")[nix-portable 0.10.0] or directly available via NixOS using channel `23-11`.
Our software environments likely work on all platforms supported by Nix (Linux on `i686`/`x86_64`/`aarch64` and MacOS on `x86_64`/`aarch64` as of 2024-05-07) but we have only tested it on Linux on `x86_64`. More precisely, we have used the #link("https://www.grid5000.fr/w/Grenoble:Hardware#dahu")[Dahu Grid'5000cluster](DellPowerEdgeC6420,2xIntelXeonGold6130,192GiBofRAM)onthedefaultoperatingsystemavailableonGrid'5000 as of 2024-05-07 (Debian `5.10.209-2` using Linux kernel `5.10.0-28-amd64`).
Our software environments likely work on all platforms supported by Nix (Linux on `i686`/`x86_64`/`aarch64` and MacOS on `x86_64`/`aarch64` as of 2024-05-07) but we have only tested them on Linux on `x86_64`. More precisely, we have used the #link("https://www.grid5000.fr/w/Grenoble:Hardware#dahu")[Dahu Grid'5000cluster](DellPowerEdgeC6420,2xIntelXeonGold6130,192GiBofRAM)onthedefaultoperatingsystemavailableonGrid'5000 as of 2024-05-07 (Debian `5.10.209-2` using Linux kernel `5.10.0-28-amd64`).
== Install Nix
If you are already using NixOS, Nix should already be usable on your system.
Otherwise up-to-date information on how to install Nix is available on #link("https://nixos.org/download/").
As of 2024-05-07 the recommended command to install Nix (on a Linux system running systemd, with SELinux disabled and `sudo` usable) is to run the following command.
If you are already using NixOS, Nix should already be usable on your system and you can go to @enable-nix-flakes.
Otherwise you must install Nix to use the software we have packaged.
We recommend to use #link("https://nixos.org/download/")[up-to-date documentation on how to install Nix].
As of 2024-05-07 the recommended command to install Nix (on a Linux system running systemd, with SELinux disabled and `sudo` usable) is the following.
#fullbox[
```sh
...
...
@@ -106,26 +118,42 @@ Please note that you may need to launch a new shell, to source a file or to modi
*Test your installation.* Launching `nix-shell --version` should run and print you the Nix version installed.
== Enable Nix flakes
== Enable Nix flakes <enable-nix-flakes>
Our Nix packages rely on #link("https://nixos.wiki/wiki/Flakes")[Nix flakes], which are not enabled by default as of 2024-05-07.
Up-to-date information on how to enable them can be found on the #link("https://nixos.wiki/wiki/Flakes")[Nix flakes documentation].
If you are using NixOS and as of 2024-05-07, flakes can be enabled by setting the following in your system configuration file.
Nix flakes must be enabled to use the software we have packaged.
We recommend to use #link("https://nixos.wiki/wiki/Flakes")[up-to-date documentation on how to enable flakes], but we also explain how to install it as of 2024-05-07 below. Please note that the way to enable flakes depend on whether you are on NixOS or not.
#grid(
columns: (1fr, 1fr),
column-gutter: 5mm,
[
*If you are using NixOS* and as of 2024-05-07, flakes can be enabled by setting at least the `nix-command` and `flakes` experimental settings in your system configuration file. In other words, your NixOS configuration file should have content similar to the one in the box below.
If you are *not using NixOS*, as of 2024-05-07, flakes can be enabled by setting at least the `nix-command` and `flakes` `experimental-features` in your Nix configuration file.
The Nix configuration file path is `~/.config/nix/nix.conf` on non-NixOS Linuxes.
In other words, your Nix configuration file should have content similar to the one in the box below.
*Testing your flakes configuration.* Launching `nix build 'github:nixos/nixpkgs?ref=23.11#hello'` should create a `result` symbolic link in your current directory. Then, launching `./result/bin/hello` should print `Hello, world!`.
*Test your flakes configuration.* Launching `nix build 'github:nixos/nixpkgs?ref=23.11#hello'` should create a `result` symbolic link in your current directory. Then, launching `./result/bin/hello` should print `Hello, world!`.
== Configure Nix to use our binary cache
This step is completely optional but recommended for this artifact reviewers, as it enables to download precompiled versions of our software environments instead of building them on your own machine.
...
...
@@ -154,26 +182,64 @@ This step is completely optional but recommended for this artifact reviewers, as
- Job power predictions for all prediction methods. #todo[cache mean/max power prediction tarballs]
== Modeling of the power behavior of Marconi100 nodes
*Inputs.* None.\
*Outputs.*
- Marconi100 power and job traces on your disk.
- Marconi100 nodes power model.
- Notebook that analyses the power profiles of M100 nodes.
#todo[introduce this section]
=== Get power and job Marconi100 traces on your disk <sec-m100-power-job-traces>
This section downloads parts of the Marconi100 trace from Zenodo, checks that the downloaded parts have the right content (via a md5 checksum), extracts the data needed by later stages of the pipeline (power usage traces, jobs information traces), then removes unneeded extracted files and the downloaded files.
This section downloads parts of the Marconi100 trace as archives from Zenodo, checks that the archives have the right content (via a md5 checksum), extracts the data needed by later stages of the pipeline (node power usage traces, jobs information traces), then removes unneeded extracted files and the downloaded archives.
#fullbox(footer:[Download: 254 Go. Final disk used: 2.5 Go. Time: 00:40:00.])[
#fullbox(footer:[#emph-overhead[Download+temporary disk: 254 Go.] Final disk: 928 Mo. #emph-overhead[Time: 00:40:00.]])[
The following commands generate workload parameters (_i.e._, when each workload should start and end). The start points are taken randomly during the 2022 M100 trace.
==== Merge job power predictions and jobs information into a single file
The job power predictions (as outputted by @sec-job-power-pred) are two archives that we assume are on your disk in the `./user-power-predictions` directory.
These archives contain gzipped files for each user.
To make things more convenient for the generation of simulation inputs, all the job power prediction files are merged into a single file with the following commands.
#fullbox(footer: [Temporary disk used: 519 Mo. Final disk used: 25 Mo. Time: 00:00:30.])[