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

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

Puoi ottimizzare le prestazioni di Amazon FSx for Lustre applicando i parametri di ottimizzazione durante l'inizializzazione del nodo utilizzando i dati utente del modello di lancio.

Nota

Perché utilizzare i dati utente del modello di lancio?

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

  • Garantisce una configurazione coerente su tutti i nodi.

  • Elimina la necessità di configurare manualmente i nodi.

Esempio di panoramica degli script

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

  • Set ptlrpcd_per_cpt_max=64 per l'elaborazione RPC parallela.

  • Si 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 file system 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 l'ambiente in uso in questa sezione.

# 6. Apply tunings

  • Ottimizzazioni LRU (Lock Resource Unit):

    • lru_max_age=600000

    • lru_sizecalcolato 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 regolazioni applicate.

  • Riporta il successo o l'avviso per ogni parametro.

# 8. Setup persistence

  • È necessario modificare i valori per l'ambiente in uso anche in questa sezione.

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

  • Il sistema si avvia.

  • Systemdavvia lustre-tunings il servizio (a causa diWantedBy=multi-user.target).

  • Il servizio viene eseguito apply_lustre_tunings.sh quando:

    • Verifica se il filesystem è montato.

    • Monta il filesystem se non è montato.

    • Attende il corretto montaggio (fino a cinque minuti).

    • Applica i parametri di regolazione 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. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Scegli Launch Templates.

  3. Scegli Crea modello di avvio.

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

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

    Importante

    Regola questi valori per il tuo ambiente sia nella sezione # 5. Mount FSx filesystem che nella setup_persistence() funzione di apply_lustre_tunings.sh in# 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 lancio. Per ulteriori informazioni, consulta Crea un gruppo di nodi gestito per il tuo cluster.