

 **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)
<a name="fsx-csi-tuning-non-efa"></a>

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**  
Pour plus d'informations sur la création et le déploiement du pilote CSI FSx for Lustre, consultez[Déployez le pilote FSx for Lustre](fsx-csi-create.md). Pour optimiser les performances avec les nœuds compatibles EFA, consultez [Optimisez les performances FSx d'Amazon for Lustre sur les nœuds (EFA)](fsx-csi-tuning-efa.md).

## Pourquoi utiliser les données utilisateur du modèle de lancement ?
<a name="_why_use_launch_template_user_data"></a>
+ Applique automatiquement les réglages lors de l’initialisation du nœud.
+ Assure une configuration cohérente sur tous les nœuds.
+ Élimine le besoin de configuration manuelle des nœuds.

## Aperçu de l’exemple de script
<a name="_example_script_overview"></a>

Le script d’exemple défini dans cette rubrique effectue les opérations suivantes :

### `# 1. Install Lustre client`
<a name="_1_install_lustre_client"></a>
+ Détecte automatiquement la version de votre système d'exploitation Amazon Linux (AL).
+ Installe le package client Lustre approprié.

### `# 2. Apply network and RPC tunings`
<a name="_2_apply_network_and_rpc_tunings"></a>
+ 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`
<a name="_3_load_lustre_modules"></a>
+ Supprime en toute sécurité les modules Lustre existants, le cas échéant.
+ Gère le démontage des systèmes de fichiers existants.
+ Charge les modules Lustre récents.

### `# 4. Lustre Network Initialization`
<a name="_4_lustre_network_initialization"></a>
+ Initialise la configuration réseau Lustre.
+ Configure les paramètres réseau requis.

### `# 5. Mount FSx filesystem`
<a name="_5_mount_fsx_filesystem"></a>
+ Vous devez ajuster les valeurs pour votre environnement dans cette section.

### `# 6. Apply tunings`
<a name="_6_apply_tunings"></a>
+ Réglages LRU (Lock Resource Unit) :
  +  `lru_max_age=600000` 
  +  `lru_size` calculé 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`
<a name="_7_verify_tunings"></a>
+ Vérifie tous les réglages appliqués.
+ Signale le succès ou l’avertissement pour chaque paramètre.

### `# 8. Setup persistence`
<a name="_8_setup_persistence"></a>
+ Vous devez également ajuster les valeurs pour votre environnement dans cette section.
+ Détecte automatiquement la version de votre système d'exploitation (AL2023) pour déterminer le `Systemd` service à appliquer.
+ Le système démarre.
+  `Systemd` démarre le service `lustre-tunings` (en raison de `WantedBy=multi-user.target`).
+ Le service exécute `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 déjà monté.
  + Attend que le montage soit 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 termine après l’exécution du script.
  + Systemd marque le service comme « actif (fermé) ».
+ Le processus se répète au prochain redémarrage.

## Création d’un modèle de lancement
<a name="_create_a_launch_template"></a>

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

1. Choisissez **Lancer modèles**.

1. Choisissez **Créer un modèle de lancement**.

1. Dans les **détails avancés**, repérez la section **Données utilisateur**.

1. Collez le script ci-dessous, en mettant à jour tout ce qui est nécessaire.
**Important**  
Ajustez ces valeurs en fonction de votre environnement dans les sections `# 5. Mount FSx filesystem` et dans la fonction `setup_persistence()` de `apply_lustre_tunings.sh` dans 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==--
   ```

1. 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éation d’un groupe de nœuds gérés pour votre cluster](create-managed-node-group.md).

## Informations connexes
<a name="_related_information"></a>
+  [Déployez le pilote FSx for Lustre](fsx-csi-create.md) 
+  [Optimisez les performances FSx d'Amazon for Lustre sur les nœuds (EFA)](fsx-csi-tuning-efa.md) 
+  [Amazon FSx pour Lustre Performance](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 