Optimieren Sie die Leistung von Amazon FSx for Lustre auf Knoten (ohne EFA) - Amazon EKS

Hilf mit, diese Seite zu verbessern

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Wenn Sie zu diesem Benutzerhandbuch beitragen möchten, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimieren Sie die Leistung von Amazon FSx for Lustre auf Knoten (ohne EFA)

Sie können die Leistung von Amazon FSx for Lustre optimieren, indem Sie während der Knoteninitialisierung mithilfe von Benutzerdaten der Startvorlage Optimierungsparameter anwenden.

Anmerkung

Warum sollten Benutzerdaten der Startvorlage verwendet werden?

  • Wendet bei der Initialisierung des Knotens automatisch Optimierungen an.

  • Sorgt für eine konsistente Konfiguration auf allen Knoten.

  • Macht eine manuelle Knotenkonfiguration überflüssig.

Überblick über ein Beispielskript

Das in diesem Thema definierte Beispielskript führt die folgenden Operationen aus:

# 1. Install Lustre client

  • Erkennt automatisch Ihre Betriebssystemversion: Amazon Linux 2 (AL2) oder Amazon Linux 2023 (AL2023).

  • Installiert das entsprechende Lustre-Client-Paket.

# 2. Apply network and RPC tunings

  • Sätze ptlrpcd_per_cpt_max=64 für parallel RPC-Verarbeitung.

  • Konfiguriertksocklnd credits=2560, um Netzwerkpuffer zu optimieren.

# 3. Load Lustre modules

  • Entfernt sicher vorhandene Lustre-Module, falls vorhanden.

  • Verwaltet das Aushängen vorhandener Dateisysteme.

  • Lädt neue Lustre-Module.

# 4. Lustre Network Initialization

  • Initialisiert die Lustre-Netzwerkkonfiguration.

  • Richtet die erforderlichen Netzwerkparameter ein.

# 5. Mount FSx filesystem

  • In diesem Abschnitt müssen Sie die Werte für Ihre Umgebung anpassen.

# 6. Apply tunings

  • LRU-Tunings (Lock Resource Unit):

    • lru_max_age=600000

    • lru_sizeberechnet auf der Grundlage der CPU-Anzahl

  • Client-Cache-Steuerung: max_cached_mb=64

  • RPC-Steuerelemente:

    • OST max_rpcs_in_flight=32

    • MDC max_rpcs_in_flight=64

    • MDC max_mod_rpcs_in_flight=50

# 7. Verify tunings

  • Überprüft alle angewendeten Einstellungen.

  • Meldet Erfolg oder Warnung für jeden Parameter.

# 8. Setup persistence

  • In diesem Abschnitt müssen Sie auch die Werte für Ihre Umgebung anpassen.

  • Erkennt automatisch Ihre Betriebssystemversion (AL2 oder AL2 023), um zu bestimmen, welcher Systemd Dienst angewendet werden soll.

  • Das System wird gestartet.

  • Systemdstartet lustre-tunings den Dienst (aufgrund vonWantedBy=multi-user.target).

  • Der Dienst läuft apply_lustre_tunings.sh welcher:

    • Prüft, ob das Dateisystem eingehängt ist.

    • Hängt das Dateisystem ein, falls es nicht eingehängt ist.

    • Wartet auf eine erfolgreiche Installation (bis zu fünf Minuten).

    • Wendet nach erfolgreicher Installation die Optimierungsparameter an.

  • Die Einstellungen bleiben bis zum Neustart aktiv.

  • Der Dienst wird nach Abschluss des Skripts beendet.

    • Systemd markiert den Dienst als „aktiv (beendet)“.

  • Der Vorgang wiederholt sich beim nächsten Neustart.

Erstellen einer Startvorlage

  1. Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie Vorlagen starten.

  3. Wählen Sie Startvorlage erstellen.

  4. Suchen Sie unter Erweiterte Details den Abschnitt Benutzerdaten.

  5. Fügen Sie das unten stehende Skript ein und aktualisieren Sie alles nach Bedarf.

    Wichtig

    Passen Sie diese Werte sowohl im Abschnitt # 5. Mount FSx filesystem als auch in der setup_persistence() Funktion von apply_lustre_tunings.sh in an Ihre Umgebung an# 8. Setup persistence:

    FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted. MOUNT_NAME="<your-mount-name>" # Needs to be adjusted. MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.
    MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash exec 1> >(logger -s -t $(basename $0)) 2>&1 # Function definitions check_success() { if [ $? -eq 0 ]; then echo "SUCCESS: $1" else echo "FAILED: $1" return 1 fi } apply_tunings() { local NUM_CPUS=$(nproc) local LRU_SIZE=$((100 * NUM_CPUS)) local params=( "ldlm.namespaces.*.lru_max_age=600000" "ldlm.namespaces.*.lru_size=$LRU_SIZE" "llite.*.max_cached_mb=64" "osc.*OST*.max_rpcs_in_flight=32" "mdc.*.max_rpcs_in_flight=64" "mdc.*.max_mod_rpcs_in_flight=50" ) for param in "${params[@]}"; do lctl set_param $param check_success "Set ${param%%=*}" done } verify_param() { local param=$1 local expected=$2 local actual=$3 if [ "$actual" == "$expected" ]; then echo "SUCCESS: $param is correctly set to $expected" else echo "WARNING: $param is set to $actual (expected $expected)" fi } verify_tunings() { local NUM_CPUS=$(nproc) local LRU_SIZE=$((100 * NUM_CPUS)) local params=( "ldlm.namespaces.*.lru_max_age:600000" "ldlm.namespaces.*.lru_size:$LRU_SIZE" "llite.*.max_cached_mb:64" "osc.*OST*.max_rpcs_in_flight:32" "mdc.*.max_rpcs_in_flight:64" "mdc.*.max_mod_rpcs_in_flight:50" ) echo "Verifying all parameters:" for param in "${params[@]}"; do name="${param%%:*}" expected="${param#*:}" actual=$(lctl get_param -n $name | head -1) verify_param "${name##*.}" "$expected" "$actual" done } setup_persistence() { # Create functions file cat << 'EOF' > /usr/local/bin/lustre_functions.sh #!/bin/bash apply_lustre_tunings() { local NUM_CPUS=$(nproc) local LRU_SIZE=$((100 * NUM_CPUS)) echo "Applying Lustre performance tunings..." lctl set_param ldlm.namespaces.*.lru_max_age=600000 lctl set_param ldlm.namespaces.*.lru_size=$LRU_SIZE lctl set_param llite.*.max_cached_mb=64 lctl set_param osc.*OST*.max_rpcs_in_flight=32 lctl set_param mdc.*.max_rpcs_in_flight=64 lctl set_param mdc.*.max_mod_rpcs_in_flight=50 } EOF # Create tuning script cat << 'EOF' > /usr/local/bin/apply_lustre_tunings.sh #!/bin/bash exec 1> >(logger -s -t $(basename $0)) 2>&1 # Source the functions source /usr/local/bin/lustre_functions.sh # FSx details FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted. MOUNT_NAME="<your-mount-name>" # Needs to be adjusted. MOUNT_POINT="</your/mount/point>" # Needs to be adjusted. # Function to check if Lustre is mounted is_lustre_mounted() { mount | grep -q "type lustre" } # Function to mount Lustre mount_lustre() { echo "Mounting Lustre filesystem..." mkdir -p ${MOUNT_POINT} mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} ${MOUNT_POINT} return $? } # Main execution # Try to mount if not already mounted if ! is_lustre_mounted; then echo "Lustre filesystem not mounted, attempting to mount..." mount_lustre fi # Wait for successful mount (up to 5 minutes) for i in {1..30}; do if is_lustre_mounted; then echo "Lustre filesystem mounted, applying tunings..." apply_lustre_tunings exit 0 fi echo "Waiting for Lustre filesystem to be mounted... (attempt $i/30)" sleep 10 done echo "Timeout waiting for Lustre filesystem mount" exit 1 EOF # Create systemd service cat << 'EOF' > /etc/systemd/system/lustre-tunings.service [Unit] Description=Apply Lustre Performance Tunings After=network.target remote-fs.target StartLimitIntervalSec=0 [Service] Type=oneshot ExecStart=/usr/local/bin/apply_lustre_tunings.sh RemainAfterExit=yes Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target EOF chmod +x /usr/local/bin/lustre_functions.sh chmod +x /usr/local/bin/apply_lustre_tunings.sh systemctl enable lustre-tunings.service systemctl start lustre-tunings.service } echo "Starting FSx for Lustre configuration..." # 1. Install Lustre client if grep -q 'VERSION="2"' /etc/os-release; then amazon-linux-extras install -y lustre elif grep -q 'VERSION="2023"' /etc/os-release; then dnf install -y lustre-client fi check_success "Install Lustre client" # 2. Apply network and RPC tunings export PATH=$PATH:/usr/sbin echo "Applying network and RPC tunings..." if ! grep -q "options ptlrpc ptlrpcd_per_cpt_max" /etc/modprobe.d/modprobe.conf; then echo "options ptlrpc ptlrpcd_per_cpt_max=64" | tee -a /etc/modprobe.d/modprobe.conf echo "options ksocklnd credits=2560" | tee -a /etc/modprobe.d/modprobe.conf fi # 3. Load Lustre modules modprobe lustre check_success "Load Lustre modules" || exit 1 # 4. Lustre Network Initialization lctl network up check_success "Initialize Lustre networking" || exit 1 # 5. Mount FSx filesystem FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted. MOUNT_NAME="<your-mount-name>" # Needs to be adjusted. MOUNT_POINT="</your/mount/point>" # Needs to be adjusted. if [ ! -z "$FSX_DNS" ] && [ ! -z "$MOUNT_NAME" ]; then mkdir -p $MOUNT_POINT mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} ${MOUNT_POINT} check_success "Mount FSx filesystem" fi # 6. Apply tunings apply_tunings # 7. Verify tunings verify_tunings # 8. Setup persistence setup_persistence echo "FSx for Lustre configuration completed." --==MYBOUNDARY==--
  6. Wählen Sie beim Erstellen von Amazon EKS-Knotengruppen diese Startvorlage aus. Weitere Informationen finden Sie unter Erstellen Sie eine verwaltete Knotengruppe für Ihren Cluster.