Performa pengujian

Contoh di bagian ini menunjukkan perintah umum yang kami rekomendasikan untuk mengevaluasi performa menggunakan alat benchmark IOR (github).

Sebelum menginstal IOR, MPI harus diinstal untuk sinkronisasi antara proses benchmark. Sebaiknya gunakan Image HPC untuk VM klien, yang mencakup alat untuk menginstal Intel MPI 2021. Untuk klien Ubuntu, sebaiknya gunakan openmpi.

Memeriksa performa jaringan

Sebelum menjalankan IOR, sebaiknya pastikan jaringan Anda memiliki throughput yang diharapkan. Jika memiliki dua VM klien, Anda dapat menggunakan alat bernama iperf untuk menguji jaringan di antara keduanya.

Instal iperf di kedua VM:

HPC Rocky 8

sudo dnf -y install iperf

Ubuntu

sudo apt install -y iperf

Mulai server iperf di salah satu VM Anda:

iperf -s -w 100m -P 30

Mulai klien iperf di VM lainnya:

iperf -c <IP ADDRESS OF iperf server VM> -w 100m -t 30s -P 30

Amati angka throughput jaringan antara VM. Untuk performa klien tunggal tertinggi, pastikan jaringan Tier_1 digunakan.

Performa VM tunggal

Petunjuk berikut memberikan langkah-langkah dan benchmark untuk mengukur performa VM tunggal. Pengujian menjalankan beberapa proses I/O ke dan dari Parallelstore dengan tujuan untuk memenuhi kartu antarmuka jaringan (NIC).

Menginstal Intel MPI

HPC Rocky 8

sudo google_install_intelmpi --impi_2021

Untuk menentukan tumpukan jaringan libfabric yang benar, tetapkan variabel berikut di lingkungan Anda:

export I_MPI_OFI_LIBRARY_INTERNAL=0

Setelah itu:

source /opt/intel/setvars.sh

Ubuntu

sudo apt install -y autoconf
sudo apt install -y pkg-config
sudo apt install -y libopenmpi-dev
sudo apt install -y make

Menginstal IOR

Untuk menginstal IOR:

git clone https://github.com/hpc/ior.git
cd ior
./bootstrap
./configure
make
sudo make install

Menjalankan perintah IOR

Jalankan perintah IOR berikut. Untuk melihat angka performa yang diharapkan, lihat ringkasan Parallelstore.

Performa maksimum dari VM klien tunggal

HPC Rocky 8

mpirun -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 1 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "1m" -b "8g"

Ubuntu

mpirun --oversubscribe -x LD_PRELOAD="/usr/lib64/libioil.so" -n 1 \
    ior -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "1m" -b "8g"

Dengan:

  • ior: benchmark sebenarnya. Pastikan benchmark tersedia di jalur atau berikan jalur lengkap.
  • -ppn: jumlah proses (tugas) yang akan dijalankan. Sebaiknya mulai dengan 1, lalu tingkatkan hingga jumlah vCPU untuk mencapai performa agregat maksimum.
  • -O useO_DIRECT=1: paksa penggunaan I/O langsung untuk melewati cache halaman dan menghindari pembacaan data yang di-cache.
  • -genv LD_PRELOAD="/usr/lib64/libioil.so": gunakan library intersepsi DAOS. Opsi ini memberikan performa mentah tertinggi, tetapi melewati cache halaman Linux untuk data. Metadata masih di-cache.
  • -w: Lakukan penulisan ke file individual.
  • -r: Lakukan pembacaan.
  • -e: Lakukan fsync setelah penulisan selesai.
  • -F: Gunakan file individual.
  • -t "1m": Baca dan tulis data dalam potongan ukuran yang ditentukan. Ukuran potongan yang lebih besar menghasilkan performa I/O streaming thread tunggal yang lebih baik.
  • -b "8g" - ukuran setiap file

IOps maksimum dari VM klien tunggal

HPC Rocky 8

mpirun -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 80 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "4k" -b "1g"

Ubuntu

mpirun --oversubscribe -x LD_PRELOAD="/usr/lib64/libioil.so" -n 80 \
    ior -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "4k" -b "1g"

Performa maksimum dari thread aplikasi tunggal

HPC Rocky 8

mpirun -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 1 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "32m" -b "64g"

Ubuntu

mpirun -x LD_PRELOAD="/usr/lib64/libioil.so" -n 1 \
    ior -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "32m" -b "64g"

Latensi I/O kecil dari thread aplikasi tunggal

HPC Rocky 8

mpirun -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 1 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -z -w -r -e -F -t "4k" -b "100m"

Ubuntu

mpirun -x LD_PRELOAD="/usr/lib64/libioil.so" -n 1 \
    ior -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -z -w -r -e -F -t "4k" -b "100m"

Pengujian performa multi-VM

Untuk mencapai batas instance Parallelstore, penting untuk menguji I/O agregat yang dapat dicapai dengan I/O paralel dari beberapa VM. Petunjuk di bagian ini memberikan detail dan perintah tentang cara melakukannya menggunakan mpirun dan ior.

Lihat panduan IOR untuk mengetahui kumpulan lengkap opsi yang berguna untuk diuji pada kumpulan node yang lebih besar. Perhatikan bahwa ada berbagai cara untuk meluncurkan VM klien untuk pengujian multi-klien dari penggunaan penjadwal seperti Batch, Slurm, atau menggunakan perintah massal Compute Engine. Selain itu, HPC Toolkit dapat membantu membuat template untuk men-deploy node komputasi.

Panduan ini menggunakan langkah-langkah berikut untuk men-deploy beberapa instance klien yang dikonfigurasi untuk menggunakan Parallelstore:

  1. Buat kunci SSH untuk digunakan dalam menyiapkan pengguna di setiap VM klien. Anda harus menonaktifkan persyaratan Login OS di project jika telah diaktifkan.
  2. Dapatkan titik akses instance Parallelstore.
  3. Buat skrip startup untuk di-deploy ke semua instance klien.
  4. Buat VM Compute Engine secara massal menggunakan skrip startup dan kunci.
  5. Salin kunci dan file host yang diperlukan untuk menjalankan pengujian.

Detail untuk setiap langkah ada di bagian berikut.

Menetapkan variabel lingkungan

Variabel lingkungan berikut digunakan dalam perintah contoh dalam dokumen ini:

export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10

Perbarui variabel ini ke nilai yang diinginkan.

Membuat kunci SSH

Buat kunci SSH dan simpan secara lokal untuk didistribusikan ke VM klien. Kunci ini dikaitkan dengan pengguna SSH yang ditentukan dalam variabel lingkungan, dan akan dibuat di setiap VM:

# 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 new file in the format [user]:[public key] user
echo "${SSH_USER}:$(cat "./id_rsa.pub") ${SSH_USER}" > "./keys.txt"

Mendapatkan detail jaringan Parallelstore

Dapatkan alamat IP server Parallelstore dalam format yang dapat digunakan oleh agen daos:

export ACCESS_POINTS=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format("{0}", accessPoints))")

Dapatkan nama jaringan yang terkait dengan instance Parallelstore:

export NETWORK=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format('{0}', network))" | awk -F '/' '{print $NF}')

Membuat skrip startup

Skrip startup dilampirkan ke VM dan akan dijalankan setiap kali sistem dimulai. Skrip startup akan melakukan hal berikut:

  • Mengonfigurasi agen daos
  • Menginstal library yang diperlukan
  • Memasang instance Parallelstore ke /tmp/parallelstore/ di setiap VM
  • Menginstal alat pengujian performa

Skrip ini dapat digunakan untuk men-deploy aplikasi kustom Anda ke beberapa mesin. Edit bagian yang terkait dengan kode khusus aplikasi dalam skrip.

Skrip berikut berfungsi di VM yang menjalankan HPC Rocky 8.

# Create a startup script that configures the VM
cat > ./startup-script << EOF
sudo tee /etc/yum.repos.d/parallelstore-v2-6-el8.repo << INNEREOF
[parallelstore-v2-6-el8]
name=Parallelstore EL8 v2.6
baseurl=https://us-central1-yum.pkg.dev/projects/parallelstore-packages/v2-6-el8
enabled=1
repo_gpgcheck=0
gpgcheck=0
INNEREOF
sudo dnf makecache

# 2) Install daos-client
dnf install -y epel-release # needed for capstone
dnf install -y daos-client

# 3) Upgrade libfabric
dnf upgrade -y libfabric

systemctl stop daos_agent

mkdir -p /etc/daos
cat > /etc/daos/daos_agent.yml << INNEREOF
access_points: ${ACCESS_POINTS}

transport_config:
  allow_insecure: true

fabric_ifaces:
- numa_node: 0
  devices:
  - iface: eth0
    domain: eth0
INNEREOF

echo -e "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null" > /home/${SSH_USER}/.ssh/config
chmod 600 /home/${SSH_USER}/.ssh/config

usermod -u 2000 ${SSH_USER}
groupmod -g 2000 ${SSH_USER}
chown -R ${SSH_USER}:${SSH_USER} /home/${SSH_USER}

chown -R daos_agent:daos_agent /etc/daos/

systemctl enable daos_agent
systemctl start daos_agent

mkdir -p /tmp/parallelstore
dfuse -m /tmp/parallelstore --pool default-pool --container default-container --disable-wb-cache --thread-count=16 --eq-count=8 --multi-user
chmod 777 /tmp/parallelstore

#Application specific code
#Install Intel MPI:
sudo google_install_intelmpi --impi_2021
export I_MPI_OFI_LIBRARY_INTERNAL=0
source /opt/intel/setvars.sh

#Install IOR
git clone https://github.com/hpc/ior.git
cd ior
./bootstrap
./configure
make
make install
EOF

Membuat VM klien

Performa keseluruhan workload Anda bergantung pada jenis mesin klien. Contoh berikut menggunakan VM c2-standard-30; ubah nilai machine-type untuk meningkatkan performa dengan NIC yang lebih cepat. Lihat Panduan perbandingan dan resource kelompok mesin untuk mengetahui detail jenis mesin yang tersedia.

Untuk membuat instance VM secara massal, gunakan perintah gcloud compute instances create:

gcloud compute instances bulk create \
  --name-pattern="${CLIENT_PREFIX}-####" \
  --zone="LOCATION" \
  --machine-type="c2-standard-30" \
  --network-interface=subnet=${NETWORK},nic-type=GVNIC \
  --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \
  --create-disk=auto-delete=yes,boot=yes,device-name=client-vm1,image=projects/cloud-hpc-image-public/global/images/hpc-rocky-linux-8-v20240126,mode=rw,size=100,type=pd-balanced \
  --metadata=enable-oslogin=FALSE \
  --metadata-from-file=ssh-keys=./keys.txt,startup-script=./startup-script \
  --count ${NUM_CLIENTS}

Menyalin kunci dan file

  1. Ambil dan simpan alamat IP pribadi dan publik untuk semua VM.

    IP Pribadi:

    gcloud compute instances list --filter="name ~ '^${CLIENT_PREFIX}*'" --format="csv[no-heading](INTERNAL_IP)" > hosts.txt
    

    IP Publik:

    gcloud compute instances list --filter="name ~ '^${CLIENT_PREFIX}*'" --format="csv[no-heading](EXTERNAL_IP)" > external_ips.txt
    
  2. Salin kunci pribadi untuk mengizinkan SSH tanpa sandi antar-node. Hal ini diperlukan untuk pengujian IOR menggunakan SSH untuk mengatur mesin.

    while IFS= read -r IP
    do
        echo "Copying id_rsa to  ${SSH_USER}@$IP"
        scp -i ./id_rsa -o StrictHostKeyChecking=no ./id_rsa ${SSH_USER}@$IP:~/.ssh/
    done < "./external_ips.txt"
    
  3. Ambil IP node pertama, dan salin daftar IP internal ke node tersebut. Ini akan menjadi node utama untuk menjalankan pengujian.

    export HEAD_NODE=$(head -n 1 ./external_ips.txt)
    scp -i ./id_rsa -o "StrictHostKeyChecking=no" -o UserKnownHostsFile=/dev/null   ./hosts.txt ${SSH_USER}@${HEAD_NODE}:~
    

Menjalankan perintah IOR di beberapa VM

Hubungkan ke node utama dengan pengguna yang ditentukan:

ssh -i ./id_rsa -o "StrictHostKeyChecking=no" -o UserKnownHostsFile=/dev/null ${SSH_USER}@${HEAD_NODE}

Setelah itu:

source /opt/intel/setvars.sh
export I_MPI_OFI_LIBRARY_INTERNAL=0
export D_LOG_MASK=INFO
export D_LOG_FILE_APPEND_PID=1
rm -f /tmp/client.log.*
export D_LOG_FILE=/tmp/client.log

Performa maksimum dari beberapa VM klien

Uji performa dalam skenario multi-proses dan throughput maksimum.

mpirun -f hosts.txt -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 30 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "1m" -b "8g"

IOPs maksimum dari beberapa VM klien

Uji performa dalam skenario multi-proses dan IOPs maksimum.

mpirun -f hosts.txt -genv LD_PRELOAD="/usr/lib64/libioil.so" -ppn 30 \
    --bind-to socket ior \
    -o "/tmp/parallelstore/test" -O useO_DIRECT=1 \
    -w -r -e -F -t "4k" -b "1g"

Pembersihan

  1. Lepas container DAOS:

    sudo umount /tmp/parallelstore/
    
  2. Hapus instance Parallelstore:

    gcloud CLI

    gcloud beta parallelstore instances delete INSTANCE_NAME --location=LOCATION
    

    REST

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://parallelstore.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_NAME
    
  3. Hapus VM Compute Engine: