Skip to content
 
 

Repository files navigation

FineMem – Reproduktionsanleitung

Aufbau der Umgebung zum Bauen und Ausführen von FineMem auf eigener Hardware (2 Knoten, direkt verbundene Mellanox-InfiniBand-Karten).

Repository: https://github.com/ADSLMemoryDisaggregation/FineMem

Schritt 1: Betriebssystem

Ubuntu 22.04.5 LTS mit Linux kernel 5.15 installieren.

Schritt 2: MLNX OFED Treiber

MLNX OFED 5.8-7.0.6.1 installieren.

Prüfen, ob der Treiber aktiv ist:

ibdev2netdev

Falls keine Ausgabe erscheint:

sudo modprobe ib_ipoib

Schritt 3: Dependencies

Installation

sudo apt update
sudo apt install -y \
  build-essential git cmake \
  libmemkind-dev libhiredis-dev \
  libboost-all-dev libtbb-dev libgtest-dev \
  libgflags-dev libgoogle-glog-dev libgoogle-perftools-dev \
  libnuma-dev \
  redis-server

libibverbs und librdmacm werden ebenfalls benötigt, kommen aber bereits aus MLNX OFED (Schritt 2). Die Ubuntu-Pakete rdma-core, libibverbs-dev und librdmacm-dev dürfen nicht nachinstalliert werden – sie deinstallieren Teile des OFED-Stacks.

Verifikation

Alle vier benötigten Bibliotheken müssen gefunden werden:

ldconfig -p | grep -E 'libibverbs|librdmacm|libmemkind|libhiredis'

Redis muss vorhanden sein (FineMem startet zur Laufzeit eine eigene Instanz auf der IPoIB-Adresse, der Systemdienst wird nicht benötigt):

redis-server --version

Schritt 4: IPoIB konfigurieren

sudo nmcli con add type infiniband ifname ibp101s0 con-name ibp101s0-static \
  ipv4.method manual ipv4.addresses 10.10.1.1/24 ipv6.method disabled \
  connection.autoconnect yes
sudo nmcli con up ibp101s0-static
ip -br add show ibp101s0

Auf dem zweiten Knoten analog mit 10.10.1.2/24.

opensm wird nur benötigt, wenn kein gemanagter IB-Switch im Pfad ist, und dann auch nur auf einem Knoten im Subnetz – bevorzugt auf der Memory Node:

sudo systemctl start opensm

Schritt 5: Passwortloses SSH

echo "10.36.104.115 node1" | sudo tee -a /etc/hosts
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id student@node1
ssh student@node1 hostname

Schritt 6: Build

Auf allen Knoten identisch ausführen:

git clone https://github.com/timriedlinger/FineMem-Reproduction.git
cd FineMem
mkdir build && cd build
cmake ..
make -j$(nproc)

Ergebnis: build/source/server, build/source/client und die Binaries in build/microbench/.

Critical Path Considerations

Das Repository muss auf allen Knoten im selben Pfad liegen, am besten unter ~/FineMem. Die Skripte in scripts/ starten ihre Remote-Aufrufe per SSH aus dem Home-Verzeichnis heraus; relative Pfade sind dadurch knotenweit nicht stabil. Bei abweichendem Verzeichnis alle Pfade in den Skripten ersetzen:

cd FineMem/scripts
find -name '*.sh' | xargs perl -pi -e 's|~/FineMem|~/pfad/zu/deinem/FineMem|g'

Schritt 7: Experimente ausführen

Microbench

Von der Memory Node (Node 0) aus starten:

cd ~/FineMem/scripts/microbench
./run_different_size_16.sh    # Ergebnis: different_size_16.csv
./run_different_thread.sh     # Ergebnis: different_thread.csv

Jeder Lauf dauert rund eine Stunde, bricht ein Skript unplanmäßig ab, vor dem nächsten Versuch Memory- und Compute-Node zurücksetzen:

~/FineMem/scripts/fresh_all.sh

DM Swap-System-Simulator

Der Simulator läuft ohne RDMA-Hardware auf einem einzelnen Rechner. Python-Abhängigkeiten installieren:

sudo apt update && sudo apt install -y python3-pip
pip install numpy scipy sortedcollections matplotlib

Anschließend im Simulator-Verzeichnis:

cd ~/FineMem/applications/Swap_FineMem_Sim
python3 draw_remote_mem_usage.py
python3 run_small_traces.py
python3 run_large_traces.py
python3 draw_throughput_improvement_cdf.py

Details siehe README im Ordner Swap_FineMem_Sim.

DM KV-Store (FUSEE)

Die FUSEE-basierte KV-Store-Evaluation gehört ebenfalls zur Original-Evaluation und wird von der Memory Node aus gestartet:

cd ~/FineMem/scripts/
./batch_build_fusee.sh
./run_fusee_4KB.sh    # Ergebnis: fusee_4kb.csv
python3 draw_kv.py

In dieser Reproduktion haben diese Schritte keine verwertbaren Ergebnisse geliefert. Die Ursache konnte nicht geklärt werden; die zugehörigen Abbildungen des Papers wurden daher nicht reproduziert.

Nicht ausgeführte Experimente

Die Skripte der Original-Evaluation sind auf einen 18-Knoten-Cluster ausgelegt. Auf dem hier verwendeten Aufbau (eine Memory Node und eine Compute Node mit je 16 Kernen) entfallen dadurch zwei Experimente:

Skript Grund
run_different_node.sh Benötigt Memory Nodes 0–5 und Compute Nodes 6–17. Es standen nur eine Memory- und eine Compute-Node zur Verfügung.
run_different_size_128.sh Ist für 128 Threads ausgelegt. Die verwendete Maschine hat 16 Kerne; ausgeführt wurde stattdessen run_different_size_16.sh.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages