Optimisez les performances FSx d'Amazon for Lustre sur les nœuds (non EFA) - Amazon EKS

Aidez à améliorer cette page

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Optimisez les performances FSx d'Amazon for Lustre sur les nœuds (non EFA)

Vous pouvez optimiser les performances d'Amazon FSx for Lustre en appliquant des paramètres de réglage lors de l'initialisation du nœud à l'aide des données utilisateur du modèle de lancement.

Note

Pourquoi utiliser les données utilisateur du modèle de lancement ?

  • Applique les réglages automatiquement lors de l'initialisation du nœud.

  • Garantit une configuration cohérente sur tous les nœuds.

  • Élimine le besoin de configuration manuelle des nœuds.

Présentation d'un exemple de script

L'exemple de script défini dans cette rubrique effectue les opérations suivantes :

# 1. Install Lustre client

  • Détecte automatiquement la version de votre système d'exploitation : Amazon Linux 2 (AL2) ou Amazon Linux 2023 (AL2023).

  • Installe le package client Lustre approprié.

# 2. Apply network and RPC tunings

  • Ensembles ptlrpcd_per_cpt_max=64 pour le traitement RPC parallèle.

  • Configure ksocklnd credits=2560 pour optimiser les tampons réseau.

# 3. Load Lustre modules

  • Supprime en toute sécurité les modules Lustre existants s'ils sont présents.

  • Gère le démontage des systèmes de fichiers existants.

  • Charge de nouveaux modules Lustre.

# 4. Lustre Network Initialization

  • Initialise la configuration réseau Lustre.

  • Configure les paramètres réseau requis.

# 5. Mount FSx filesystem

  • Vous devez ajuster les valeurs de votre environnement dans cette section.

# 6. Apply tunings

  • Réglages LRU (Lock Resource Unit) :

    • lru_max_age=600000

    • lru_sizecalculé en fonction du nombre de processeurs

  • Contrôle du cache client : max_cached_mb=64

  • Contrôles RPC :

    • OST max_rpcs_in_flight=32

    • MDC max_rpcs_in_flight=64

    • MDC max_mod_rpcs_in_flight=50

# 7. Verify tunings

  • Vérifie tous les réglages appliqués.

  • Signale le succès ou un avertissement pour chaque paramètre.

# 8. Setup persistence

  • Vous devez également ajuster les valeurs de votre environnement dans cette section.

  • Détecte automatiquement la version de votre système d'exploitation (AL2 ou AL2 023) pour déterminer le Systemd service à appliquer.

  • Le système démarre.

  • Systemddémarre lustre-tunings le service (en raison deWantedBy=multi-user.target).

  • Un service fonctionne apply_lustre_tunings.sh qui :

    • Vérifie si le système de fichiers est monté.

    • Monte le système de fichiers s'il n'est pas monté.

    • Attend un montage réussi (jusqu'à cinq minutes).

    • Applique les paramètres de réglage après un montage réussi.

  • Les paramètres restent actifs jusqu'au redémarrage.

  • Le service se ferme une fois le script terminé.

    • Systemd marque le service comme « actif (terminé) ».

  • Le processus se répète au prochain redémarrage.

Création d’un modèle de lancement

  1. Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/.

  2. Choisissez Launch Templates.

  3. Choisissez Créer un modèle de lancement.

  4. Dans Détails avancés, recherchez la section Données utilisateur.

  5. Collez le script ci-dessous, en mettant à jour tout ce qui est nécessaire.

    Important

    Ajustez ces valeurs en fonction de votre environnement dans la section # 5. Mount FSx filesystem et de la setup_persistence() fonction apply_lustre_tunings.sh de la section # 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. Lorsque vous créez des groupes de nœuds Amazon EKS, sélectionnez ce modèle de lancement. Pour de plus amples informations, veuillez consulter Créez un groupe de nœuds gérés pour votre cluster.