Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA) - Amazon EKS

Bantu tingkatkan halaman ini

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA)

Anda dapat mengoptimalkan Amazon FSx untuk kinerja Lustre dengan menerapkan parameter penyetelan selama inisialisasi node menggunakan data pengguna template peluncuran.

catatan

Mengapa menggunakan data pengguna template peluncuran?

  • Menerapkan penyetelan secara otomatis selama inisialisasi node.

  • Memastikan konfigurasi yang konsisten di semua node.

  • Menghilangkan kebutuhan untuk konfigurasi node manual.

Contoh ikhtisar skrip

Contoh skrip yang didefinisikan dalam topik ini melakukan operasi ini:

# 1. Install Lustre client

  • Secara otomatis mendeteksi versi OS Anda: Amazon Linux 2 (AL2) atau Amazon Linux 2023 (AL2023).

  • Menginstal paket klien Lustre yang sesuai.

# 2. Apply network and RPC tunings

  • Set ptlrpcd_per_cpt_max=64 untuk pemrosesan RPC paralel.

  • Mengkonfigurasi ksocklnd credits=2560 untuk mengoptimalkan buffer jaringan.

# 3. Load Lustre modules

  • Aman menghapus modul Lustre yang ada jika ada.

  • Menangani pelepasan sistem file yang ada.

  • Memuat modul Lustre segar.

# 4. Lustre Network Initialization

  • Menginisialisasi konfigurasi jaringan Lustre.

  • Menyiapkan parameter jaringan yang diperlukan.

# 5. Mount FSx filesystem

  • Anda harus menyesuaikan nilai untuk lingkungan Anda di bagian ini.

# 6. Apply tunings

  • Penyetelan LRU (Unit Sumber Daya Kunci):

    • lru_max_age=600000

    • lru_sizedihitung berdasarkan jumlah CPU

  • Kontrol Cache Klien: max_cached_mb=64

  • Kontrol RPC:

    • OST max_rpcs_in_flight=32

    • MDC max_rpcs_in_flight=64

    • MDC max_mod_rpcs_in_flight=50

# 7. Verify tunings

  • Memverifikasi semua tuning yang diterapkan.

  • Melaporkan keberhasilan atau peringatan untuk setiap parameter.

# 8. Setup persistence

  • Anda harus menyesuaikan nilai untuk lingkungan Anda di bagian ini juga.

  • Secara otomatis mendeteksi versi OS Anda (AL2 atau AL2 023) untuk menentukan Systemd layanan mana yang akan diterapkan.

  • Sistem dimulai.

  • Systemdmemulai lustre-tunings layanan (karenaWantedBy=multi-user.target).

  • Layanan berjalan apply_lustre_tunings.sh yang:

    • Memeriksa apakah sistem file sudah terpasang.

    • Pasang sistem file jika tidak dipasang.

    • Menunggu pemasangan yang berhasil (hingga lima menit).

    • Menerapkan parameter penyetelan setelah pemasangan berhasil.

  • Pengaturan tetap aktif hingga reboot.

  • Layanan keluar setelah skrip selesai.

    • Systemd menandai layanan sebagai “aktif (keluar)”.

  • Proses berulang pada reboot berikutnya.

Membuat templat peluncuran

  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Pilih Luncurkan Template.

  3. Pilih Buat templat peluncuran.

  4. Di Detail lanjutan, cari bagian Data pengguna.

  5. Tempel skrip di bawah ini, perbarui apa pun sesuai kebutuhan.

    penting

    Sesuaikan nilai-nilai ini untuk lingkungan Anda di kedua bagian # 5. Mount FSx filesystem dan setup_persistence() fungsi apply_lustre_tunings.sh di bagian# 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. Saat membuat grup simpul Amazon EKS, pilih templat peluncuran ini. Untuk informasi selengkapnya, lihat Buat grup node terkelola untuk klaster Anda.