LoginSignup
2
0

More than 1 year has passed since last update.

Shell Script: 並列実行して処理実行時間を出力してみてみた

Last updated at Posted at 2023-06-07

シェルスクリプトで直列処理と並列処理の実行速度を比較したいということで、
前回の curl コマンドで Object Storage へファイルをマルチパート・アップロードする処理を、バックグラウンドで同時に実行できるようにして、すべての分割コマンドが終了したら、実行時間を出力するスクリプトを作成してみてみます。

■ 参考処理

今回は、次の内容の マルチパート・アップロードコマンド 処理を使用して並列スクリプトを作成します。
[Oracle Cloud] curl コマンドで Object Storage へファイル Upload/Download してみてみた

● マルチパート・アップロードコマンド群

次の5つあるコマンドを並列実行して実行時間を出力するスクリプトを作成します。

curl -X PUT --data-binary '@x00' https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/1
curl -X PUT --data-binary '@x01' https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/2
curl -X PUT --data-binary '@x02' https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/3
curl -X PUT --data-binary '@x03' https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/4
curl -X PUT --data-binary '@x04' https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/5

■ 並列スクリプト作成

今回、ファイル・サイズが 1024MB(1GB)のファイル転送速度が出るように算出し出力できるようにします。

Parallel.sh
#!/bin/bash
echo "ファイル転送開始 : $(date)"
start_date=$(date +'%s')

multipart_url="https://objectstorage.ap-tokyo-1.oraclecloud.com/p/Gqte6y5OoWPjEYOzAj-wuHDpy/n/shirok/b/OCI-Bucket/u/1G-File.txt/id/057e65-5f32-4efc-7dbc/"

curl -X PUT --data-binary '@x00' "${multipart_url}1" &
curl -X PUT --data-binary '@x01' "${multipart_url}2" &
curl -X PUT --data-binary '@x02' "${multipart_url}3" &
curl -X PUT --data-binary '@x03' "${multipart_url}4" &
curl -X PUT --data-binary '@x04' "${multipart_url}5" &

if wait; then
	echo "ファイル転送成功 : $(date)"
	end_date=$(date +'%s')
	time=$((end_date - start_date))
	echo "実行時間: $time 秒"
	echo "実行速度: $((1024 * 8 / $time)) Mbps"
	exit 0
else
	echo "ファイル転送失敗"
	date
	exit 1
fi

● 実行と出力結果

shirok@macbook TEMP % bash Parallel.sh
	ファイル転送開始 : Thu Jun 8 01:18:55 JST 2023
	ファイル転送成功 : Thu Jun 8 01:19:23 JST 2023
	実行時間: 28秒
	実行速度: 288Mbps

■ 参考

expr(1) — Linux manual page
wait(2) — Linux manual page

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0