Test delle prestazioni con i client Compute Engine

Questa pagina descrive come testare il rendimento di un'istanza Google Cloud Managed Lustre utilizzando i client Compute Engine. Fornisce istruzioni per misurare il rendimento di un singolo client utilizzando fio e il rendimento aggregato di più client utilizzando lo strumento di benchmarking IOR.

Misurare il rendimento di un singolo client

Per testare il rendimento di lettura e scrittura da un singolo client Compute Engine, utilizza lo strumento da riga di comando fio (Flexible I/O tester).

  1. Installa fio:

    Rocky 8

    sudo dnf install fio -y
    

    Ubuntu 20.04 e 22.04

    sudo apt update
    sudo install fio
    
  2. Esegui questo comando:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/lustre --buffer_compress_percentage=50 \
    --name=read --blocksize=1m --iodepth=64 --readwrite=read
    

Il completamento del test richiede circa 5 minuti. Al termine, vengono visualizzati i risultati. A seconda della configurazione, puoi prevedere un throughput fino a alla velocità di rete massima della VM e migliaia di IOPS per TiB.

Misurare il rendimento di più client

Per testare il rendimento di lettura e scrittura di Managed Lustre da più client Compute Engine, utilizza lo strumento di benchmarking IOR. Le seguenti istruzioni mostrano come automatizzare la configurazione del client e utilizzare IOR per testare l'I/O aggregato da più macchine client. IOR utilizza MPI, un protocollo di passaggio dei messaggi, per consentire alle più macchine client di coordinarsi tra loro.

Prima di iniziare, assicurati che il valore mtu della rete sia impostato su 8896.

Impostare le variabili di ambiente e generare una chiave SSH

Prima di eseguire il deployment del cluster, genera una chiave SSH sulla macchina locale. Questa chiave verrà distribuita alle macchine client durante la creazione per abilitare la comunicazione senza password per MPI.

export SSH_USER="lustre-user"
export CLIENT_PREFIX="lustre-client"

# Generate an SSH key for the specified user
ssh-keygen -t rsa -b 4096 -C "${SSH_USER}" -N '' -f "./id_rsa"
chmod 600 "./id_rsa"

# Create a metadata file formatted for Google Cloud
echo "${SSH_USER}:$(cat "./id_rsa.pub") ${SSH_USER}" > "./keys.txt"

Creare lo script di avvio

Salva i seguenti contenuti in un file denominato install-ior.sh sulla macchina locale. Questo script rileva il sistema operativo, attende il rilascio dei blocchi di avvio, installa in modo sicuro il client Lustre e le dipendenze, compila una release stabile di IOR e monta il file system Managed Lustre.

Sostituisci LUSTRE_IP con l'indirizzo IP dell'istanza Managed Lustre e FS_NAME con il nome del file system.

#!/bin/bash
source /etc/os-release

if [[ "$ID" == "ubuntu" ]]; then
    # Ubuntu
    # Wait for apt lock
    while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do sleep 5; done

    # Configure Artifact Registry repo for Ubuntu
    curl -fsSL https://us-apt.pkg.dev/doc/repo-signing-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/us-apt-pkg-dev.gpg

    if [[ "$VERSION_ID" == "22.04" ]]; then
        REPO_NAME="lustre-client-ubuntu-jammy"
    elif [[ "$VERSION_ID" == "24.04" ]]; then
        REPO_NAME="lustre-client-ubuntu-noble"
    fi

    echo "deb [signed-by=/usr/share/keyrings/us-apt-pkg-dev.gpg] https://us-apt.pkg.dev/projects/lustre-client-binaries $REPO_NAME main" | sudo tee /etc/apt/sources.list.d/lustre-client.list

    sudo apt-get update
    while ! sudo apt-get install -y lustre-client-modules-$(uname -r) lustre-client-utils openmpi-bin libopenmpi-dev make gcc g++ wget git automake autoconf libaio-dev; do
        sleep 5
    done
    sudo modprobe lustre
else
    # Red Hat / Rocky Linux
    while systemctl is-active --quiet dnf-makecache.service; do sleep 5; done

    if [[ "$ID" == "rocky" && "$VERSION_ID" == 8* ]]; then
        REPO="lustre-client-rocky-8"
    elif [[ "$ID" == "rocky" && "$VERSION_ID" == 9* ]]; then
        REPO="lustre-client-rocky-9"
    elif [[ "$ID" == "rhel" && "$VERSION_ID" == 9* ]]; then
        REPO="lustre-client-rocky-9"
    fi

    gcloud beta artifacts print-settings yum --repository=$REPO --location=us --project=lustre-client-binaries | sudo bash

    while ! sudo dnf -y --enablerepo=$REPO install kmod-lustre-client lustre-client; do sleep 5; done
    sudo modprobe lustre

    while ! sudo dnf install -y openmpi openmpi-devel make gcc gcc-c++ wget git automake autoconf libaio-devel; do sleep 5; done