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 yang disebut 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 lain:
iperf -c <IP ADDRESS OF iperf server VM> -w 100m -t 30s -P 30
Amati jumlah throughput jaringan antar-VM. Untuk performa satu klien tertinggi, pastikan jaringan Tingkat_1 digunakan.
Performa VM tunggal
Petunjuk berikut memberikan langkah-langkah dan benchmark untuk mengukur performa VM tunggal. Pengujian ini menjalankan beberapa proses I/O ke dalam dan ke luar Parallelstore dengan tujuan memenuhi kartu antarmuka jaringan (NIC).
Menginstal Intel MPI
HPC Rocky 8
sudo google_install_intelmpi --impi_2021
Untuk menentukan stack 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 perkiraan angka performa, lihat Ringkasan Parallelstore.
Performa maksimum dari satu VM klien
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 keterangan:
ior
: benchmark sebenarnya. Pastikan file tersebut 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
: memaksa penggunaan I/O langsung untuk mengabaikan cache halaman dan menghindari membaca data dalam cache.-genv LD_PRELOAD="/usr/lib64/libioil.so"
: menggunakan library intersepsi DAOS. Opsi ini memberikan performa mentah tertinggi, tetapi mengabaikan cache halaman Linux untuk data. Metadata masih di-cache.-w
: Melakukan operasi tulis ke setiap file.-r
: Melakukan operasi baca.-e
: Melakukan fsync setelah penulisan selesai.-F
: Menggunakan file individual.-t "1m"
: Membaca dan menulis data dalam potongan dengan 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 satu VM klien
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 satu thread aplikasi
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 satu thread aplikasi
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, Anda harus menguji I/O gabungan 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 yang akan digunakan untuk menyiapkan pengguna di setiap VM klien. Anda harus menonaktifkan persyaratan Login OS pada project jika telah diaktifkan.
- Mendapatkan titik akses instance Parallelstore.
- Buat skrip startup untuk di-deploy ke semua instance klien.
- Membuat VM Compute Engine secara massal menggunakan kunci dan skrip startup.
- 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 contoh perintah dalam dokumen ini:
export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10
Perbarui nilai ini ke nilai yang Anda inginkan.
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 komputer. 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
Mengambil dan menyimpan 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
Salin kunci pribadi untuk mengizinkan SSH tanpa sandi antar-node. Hal ini diperlukan untuk pengujian IOR yang 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, lalu salin daftar IP internal ke node tersebut. Ini akan menjadi node head untuk pengujian yang dijalankan.
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 head 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 maksimal dari beberapa VM klien
Uji performa dalam skenario throughput maksimum multiproses.
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"
IOP maksimum dari beberapa VM klien
Uji performa dalam skenario multiproses, IOP 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
Lepaskan container DAOS:
sudo umount /tmp/parallelstore/
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
Hapus VM Compute Engine: