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 dengan1, 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:
- Buat kunci SSH untuk digunakan dalam menyiapkan pengguna di setiap VM klien. Anda harus menonaktifkan persyaratan Login OS di project jika telah diaktifkan.
- Dapatkan titik akses instance Parallelstore.
- Buat skrip startup untuk di-deploy ke semua instance klien.
- Buat VM Compute Engine secara massal menggunakan skrip startup dan kunci.
- 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
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.txtIP Publik:
gcloud compute instances list --filter="name ~ '^${CLIENT_PREFIX}*'" --format="csv[no-heading](EXTERNAL_IP)" > external_ips.txtSalin 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"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
Lepas container DAOS:
sudo umount /tmp/parallelstore/Hapus instance Parallelstore:
gcloud CLI
gcloud beta parallelstore instances delete INSTANCE_NAME --location=LOCATIONREST
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_NAMEHapus VM Compute Engine: