#!/usr/bin/env fish
#--Das XAIRAMTST Porgram dient dazu, ihren Speicher für einen kurzen Zeitraum #Schwer zu Belasten um zu Testen,
#--ob er Stabil für die Berechnungen von KI Anwendungen wie Inferenzen und #Blockchainhashberechnungen funktioniert.
#--Dieses Programm wurde von einem Miner als Vibe Coder geschrieben. Es sollte #seinen Zweck tun. Freie Nutzung.
--- Parameter ---
Die voreingestellten Werte (für 128GB-Systeme) bleiben unverändert, wie #gewünscht.
set MBW_SIZE 114688
set VM_WORKERS 1
set VM_BYTES "107G" #--Ändern Sie diesen Wert entsprechend Arbeitsspeicher in #ihrem System!!!
#--ACHTUNG!---
#--ÜBERLAUF bei Nutzung zu hoher Werte! Gefahr von verkraftbaren Abstürzen!
#--Funktion "XAIRAMTST" bei zu hohen Werten nur Eingeschrännkt bis Nicht gegeben.
#--Korrekte Anpassung per Binär Hexadezimalzhalen!!!
#--Im Falle von mehr oder weniger Speicher in ihrem Sytem!
#--Benutzen Sie ein Umrechnungswerkzeug um volle Lauffähigkeit zu Garantieren!
#--Von Gigabyte auf binär hexadezimalstellen umgerechnete Megabytewerte!!!
#--Der XAIRAMTST Parcour nimmt etwa 10 Minuten in Anspruch
#--und durchläuft drei Phasen unterschiedlicher Lastzustände,
#--um eine breite Speicherauslastung zu simulieren,
#--um damit eine möglichst hohe Stablitlität zu Garantrieren.
set STRESS_TIME 180s
--- Variablen für Swap-Handhabung ---
set DEFAULT_SWAPPINESS 60
echo ""
echo "======================================"
echo " PRÜFE ABHÄNGIGKEITEN"
echo "======================================"
--- Prüfen, ob Programme existieren (wie in Original-Skript) ---
if not type -q stress-ng
echo "stress-ng ist nicht installiert. Installiere mit:"
echo " sudo pacman -S stress-ng"
exit 1
end
if not type -q mbw
echo "mbw ist nicht installiert. Installiere mit:"
echo "sudo cp mbw /usr/local/bin/ sudo chmod 755 /usr/local/bin/mbw"
exit 1
end
if not type -q dmidecode
echo "dmidecode ist nicht installiert. Installiere mit:"
echo " sudo pacman -S dmidecode"
exit 1
end
if not type -q inxi
echo "inxi ist nicht installiert. Installiere mit:"
echo " sudo pacman -S inxi"
exit 1
end
**********************************************
***************** RAM INFO *******************
**********************************************
echo ""
echo "======================================"
echo " RAM Hardware Informationen"
echo "======================================"
function ram_info
# --- Module (SPD / DMI) ---
echo "--- Module (SPD / DMI) ---"
if sudo dmidecode --type memory 2>/dev/null | grep -q "Memory Device"
sudo dmidecode --type memory 2>/dev/null |
grep -A6 "Memory Device" | grep -E "Size:|Locator:|Speed:|Part Number:|Type:" |
sed 's/[1]*//'
else
echo "Keine DMI-Speicherinformationen verfügbar oder benötigt sudo-Rechte"
echo "Alternative Methode: lshw"
if type -q lshw
sudo lshw -class memory 2>/dev/null |
grep -A10 "memory" | head -20
else
echo "Installiere lshw für detaillierte Informationen: sudo pacman -S lshw"
end
end
echo ""
# --- Gesamtspeicher-Information ---
echo "--- Gesamtspeicher-Information ---"
if type -q lsmem
lsmem
else
free -h
echo ""
echo "Speicher-Slots: "
dmidecode -t memory 2>/dev/null |
grep -c "Memory Device" || echo "Kann Slot-Anzahl nicht bestimmen"
end
echo ""
# --- Timings (inxi) ---
echo "--- Timings (inxi) ---"
set timing_output (inxi -mxx 2>/dev/null | grep -i "timing")
if test -n "$timing_output"
echo $timing_output
else
echo "Timings: unbekannt (versuche alternative Methode)"
if test -f "/proc/meminfo"
grep -i "speed\|timing" /proc/meminfo ||
echo "Keine Timing-Informationen in /proc/meminfo"
end
end
echo ""
# --- Command Rate / GearDown / PowerDown ---
echo "--- Command Rate / GearDown / PowerDown ---"
set gdd (inxi -mxx 2>/dev/null | grep -i "gear")
if test -n "$gdd"
echo $gdd
else
echo "GearDown + PowerDown Infos: unbekannt"
echo "Tipp: Installiere 'zenpower' oder überprüfe BIOS-Einstellungen"
end
echo ""
# --- Erweiterte Speicher-Information ---
echo "--- Erweiterte Speicher-Information ---"
if type -q decode-dimms
echo "DIMM-Informationen verfügbar mit: decode-dimms"
else
echo "Für detaillierte SPD-Informationen: sudo pacman -S i2c-tools"
echo "Danach: modprobe eeprom && decode-dimms"
end
end
ram_info
**********************************************
************** SWAP VORBEREITUNG *************
**********************************************
echo ""
echo "======================================"
echo " SWAPLAUFWERKE TEMPORÄR BEENDEN"
echo "======================================"
Aktuelle Swappiness speichern und temporär auf 0 setzen, um Swap zu vermeiden
set current_swappiness (sysctl -n vm.swappiness)
echo "Aktuelle vm.swappiness: $current_swappiness. Setze temporär auf 0..."
sudo sysctl vm.swappiness=0
**********************************************
*************** STRESSTEST *******************
**********************************************
echo ""
echo "======================================"
echo " STARTE RAM STRESSTEST 3 MINUTEN"
echo "======================================"
echo "stress-ng --vm $VM_WORKERS --vm-bytes $VM_BYTES --timeout $STRESS_TIME"
echo ""
Warnung vor großen Speichermengen
set total_mem (free -g | awk '/^Mem:/ {print $2}')
Ersetze Kommas durch Punkte falls erforderlich und konvertiere zu einer Zahl
set requested_mem (echo $VM_BYTES | sed 's/G//')
if test $requested_mem -gt $total_mem
echo "⚠️ WARNUNG: Angeforderter Speicher ($VM_BYTES) größer als physikalischer Speicher ({$total_mem}G)"
echo "Das kann zu Swap-Nutzung führen und Ergebnisse verfälschen!"
echo -n "Fortfahren? (j/N): "
read confirm
if not string match -q -i "j*" "$confirm"
echo "Abgebrochen."
# Swappiness wiederherstellen bevor beendet wird
sudo sysctl vm.swappiness=$current_swappiness
echo "Original swappiness ($current_swappiness) wiederhergestellt."
exit 0
end
end
sudo stress-ng --vm $VM_WORKERS --vm-bytes $VM_BYTES --timeout $STRESS_TIME
**********************************************
*************** NACHBEREITUNG ****************
**********************************************
echo ""
echo "======================================"
echo " LEERE ZWISCHENSPEICHER"
echo "======================================"
Beende alle stress-ng Prozesse
echo "Beende stress-ng Prozesse..."
sudo pkill -f stress-ng
sleep 5
Warte auf vollständige Beendigung von stress-ng
echo "Warte auf Beendigung aller stress-ng Prozesse..."
while pgrep stress-ng > /dev/null
echo "Stress-ng Prozesse noch aktiv... warte 2 Sekunden"
sleep 2
end
echo "Synchronisiere Daten auf Festplatte und bereinige Cache..."
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
sleep 3
echo "Speicherstatus nach Bereinigung:"
free -h
**********************************************
***************** MBW TEST *******************
**********************************************
echo ""
echo "======================================"
echo " MESSUNG RAM DURCHSATZ MIT MBW"
echo "======================================"
Zielordner erstellen
set desktop_path ~/Schreibtisch/112G
mkdir -p $desktop_path
Logdatei pfad
set LOGFILE "$desktop_path/MeMBandwithLog112g.txt"
echo "Starte mbw-Test mit $MBW_SIZE MB..." | tee $LOGFILE
mbw $MBW_SIZE | tee -a $LOGFILE
**********************************************
***************** ERGEBNISSE *****************
**********************************************
echo ""
echo "======================================"
echo " ERGEBNISSE AUF DESKTOP SPEICHERN"
echo "======================================"
Extrahiert Ergebnisse - mit Fehlerbehandlung
if test -f $LOGFILE
echo "MBW Ergebnisse:"
grep "AVG" $LOGFILE || echo "Keine AVG-Ergebnisse in Logdatei gefunden"
# Zusätzliche Auswertung
echo ""
echo "Detaillierte Auswertung:"
if grep -q "AVG" $LOGFILE
# Verwende eine robustere Methode, um sicherzustellen, dass die richtigen Spalten erfasst werden.
# Spaltennummern können je nach mbw-Version variieren, aber wir suchen nach AVG in der Zeile.
set memcpy_avg (grep "memcpy" $LOGFILE | grep "AVG" | awk '{print $NF}') # $NF ist die letzte Spalte (MB/s)
set memset_avg (grep "memset" $LOGFILE | grep "AVG" | awk '{print $NF}')
set memcmp_avg (grep "memcmp" $LOGFILE | grep "AVG" | awk '{print $NF}')
echo "Durchschnittliche Werte:"
echo " memcpy: $memcpy_avg MB/s"
echo " memset: $memset_avg MB/s"
echo " memcmp: $memcmp_avg MB/s"
end
else
echo "❌ Logdatei $LOGFILE nicht gefunden!"
end
echo ""
echo "Logdatei gespeichert unter: $LOGFILE"
echo "Fertig."
**********************************************
*************** WIEDERHERSTELLEN *************
**********************************************
echo ""
echo "======================================"
echo " SWAPLAUFWERKE WIEDER GESTARTET"
echo "======================================"
Swappiness auf ursprünglichen Wert wiederherstellen
sudo sysctl vm.swappiness=$current_swappiness
echo "Original vm.swappiness ($current_swappiness) wiederhergestellt."
Eventuelle Abhängigkeiten:
sudo pacman -S dmidecode inxi lshw i2c-tools
\t ↩