Ottimizza le prestazioni di Amazon FSx per Lustre sui nodi (non EFA) - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Ottimizza le prestazioni di Amazon FSx per Lustre sui nodi (non EFA)

Puoi ottimizzare le prestazioni di Amazon FSx per Lustre applicando i parametri di ottimizzazione durante l’inizializzazione del nodo utilizzando i dati utente del modello di avvio.

Nota

Perché utilizzare i dati utente del modello di avvio?

  • Applica automaticamente le ottimizzazioni durante l’inizializzazione del nodo.

  • Garantisce una configurazione coerente su tutti i nodi.

  • Elimina la necessità di configurare manualmente il nodo.

Panoramica degli script di esempio

Lo script di esempio definito in questo argomento esegue le seguenti operazioni:

# 1. Install Lustre client

  • Rileva automaticamente la versione del sistema operativo: Amazon Linux 2 (AL2) o Amazon Linux 2023 (AL2023).

  • Installa il pacchetto client Lustre appropriato.

# 2. Apply network and RPC tunings

  • Imposta ptlrpcd_per_cpt_max=64 per l’elaborazione RPC parallela.

  • Configura ksocklnd credits=2560 per ottimizzare i buffer di rete.

# 3. Load Lustre modules

  • Rimuove in modo sicuro i moduli Lustre esistenti, se presenti.

  • Gestisce lo smontaggio dei filesystem esistenti.

  • Carica nuovi moduli Lustre.

# 4. Lustre Network Initialization

  • Inizializza la configurazione di rete Lustre.

  • Imposta i parametri di rete richiesti.

# 5. Mount FSx filesystem

  • È necessario modificare i valori per il tuo ambiente in questa sezione.

# 6. Apply tunings

  • Ottimizzazioni LRU (Lock Resource Unit):

    • lru_max_age=600000

    • lru_size calcolato in base al numero di CPU

  • Controllo della cache del client: max_cached_mb=64

  • Controlli RPC:

    • OST max_rpcs_in_flight=32

    • MDC max_rpcs_in_flight=64

    • MDC max_mod_rpcs_in_flight=50

# 7. Verify tunings

  • Verifica tutte le ottimizzazioni applicate.

  • Segnala il successo o l’avviso per ogni parametro.

# 8. Setup persistence

  • È necessario modificare i valori per il tuo ambiente anche in questa sezione.

  • Rileva automaticamente la versione del sistema operativo (AL2 o AL2023) per determinare quale servizio Systemd applicare.

  • Il sistema si avvia.

  • Systemd avvia il servizio lustre-tunings (a causa di WantedBy=multi-user.target).

  • Il servizio esegue apply_lustre_tunings.sh che:

    • Verifica se il filesystem è montato.

    • Monta il filesystem se non è montato.

    • Attende che il montaggio venga eseguito con successo (fino a cinque minuti).

    • Applica i parametri di ottimizzazione dopo il montaggio riuscito.

  • Le impostazioni rimangono attive fino al riavvio.

  • Il servizio si chiude dopo il completamento dello script.

    • Systemd contrassegna il servizio come “attivo (terminato)”.

  • Il processo si ripete al successivo riavvio.

Creazione di un modello di avvio

  1. Aprire la console Amazon EC2 all’indirizzo https://console.aws.amazon.com/ec2/.

  2. Scegli Modelli di avvio.

  3. Scegli Crea modello di avvio.

  4. In Dettagli avanzati, individua la sezione Dati utente.

  5. Incolla lo script qui di seguito, aggiornando tutto ciò che è necessario.

    Importante

    Regola questi valori per il tuo ambiente sia nella sezione # 5. Mount FSx filesystem che nella funzione setup_persistence() di apply_lustre_tunings.sh nella sezione # 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. Quando crei gruppi di nodi Amazon EKS, seleziona questo modello di avvio. Per ulteriori informazioni, consulta Creare un gruppo di nodi gestiti per il cluster.