はじめに
本記事では、Oracle Cloud Infrastructure(OCI)のオブジェクトストレージで通常のアップロードとマルチパート・アップロードの性能を比較し、その結果を比較します。
前提条件
- Oracle Cloud Infrastructureのアカウントを持っていること
- OCI CLIのインストール、設定が完了していること
参考情報
参考までに筆者の家のインターネット速度を計測しました
1 2 |
ダウンロード速度:13Mbps アップロード速度:42Mbps |
今回の検証はこちらの環境で行います。
マルチパート・アップロードについて
マルチパート・アップロードとは
マルチパート・アップロードでは、オブジェクトの個々のパートを並行してアップロードすることで、アップロードに費やす時間を短縮できます。APIを介して実行されるマルチパート・アップロードでは、オブジェクトのアップロード全体を再試行するのではなく、失敗したパートのアップロードを再試行できるため、ネットワーク障害による影響を最小限に抑えることもできます。
OCI公式ヘルプ・センター「オブジェクト・ストレージのマルチパート・アップロード」より引用
マルチパート・アップロードの発生条件
100MiB以上のオブジェクトをアップロードする場合などに利用することをおすすめする。
※コンソールでは64MiBより大きいオブジェクトの場合マルチパート・アップロードが実行される。
OCI技術資料:オブジェクト・ストレージ概要「マルチパート・アップロードの管理」
100MiBは約104.86MBとなりますので、大体105MBくらい(コンソールでは64MiBなので約67.11MB)のサイズから使用可能なようです。
事前準備
「100MiB以上のオブジェクトをアップロードする場合などに利用することをおすすめする」との記載がありましたが
調査していくとどうやらマルチパート・アップロードはファイルのサイズに対して自動的に適用されるようなので
少し条件が違いますが今回は以下のファイルサイズでそれぞれ測定します。
通常アップロード:100MB
マルチパート・アップロード:500MB
Windows PowerShellでfsutil file createnewを使ってデータを用意する
-
ダウンロードフォルダでWindows Power Shellを起動します
ダウンロードフォルダ内でshift+右クリックし、Windows Power Shellを起動します -
100MBのファイルを作成
以下のコマンドを実行して、通常アップロード用の100MBの空のファイルを作成します1fsutil file createnew testfile_100MB.dat 104857600 -
500MBのファイルを作成
さきほどと同じく以下のコマンドを実行して、今度はマルチパート・アップロード用の500MBの空のファイルを作成します1fsutil file createnew testfile_500MB.dat 524288000
OCIコンソールでバケットを作成
OCIコンソールにログインしメニューから[ストレージ] – [オブジェクト・ストレージとアーカイブ・ストレージ]を選択します。「バケットの作成」をクリックし以下の情報を入力します。
通常アップロードの検証
-
ファイルのアップロード
先ほど作成した100MBのファイルをアップロードします。123$uploadTime = Measure-Command {oci os object put --bucket-name test-bucket01 --name testfile_100MB.dat --file $env:USERPROFILE\Downloads\testfile_100MB.dat}Measure-Command
:PowerShellのコマンドの実行時間を測定するコマンドoci os object put
:オブジェクトをアップロードするコマンド--bucket-name
:アップロード先のバケット名--name
:オブジェクトの名前--file
:アップロードするファイルのパス
マルチパート・アップロードは適用されず、通常アップロードとなります。
アップロードが終わったら下記のコマンドを実行し、アップロードにかかった時間を表示します
1$uploadTime.TotalSeconds
注釈:
Measure-Command
コマンドを使用することで、oci os object put
コマンドが実行される時間を測定しています。この時間を使ってアップロード速度を計算します。 -
性能測定
以下のコマンドを実行します。1Write-Output "Time taken: $($uploadTime.TotalSeconds) seconds"1Write-Output "Average speed: $(100 / $uploadTime.TotalSeconds) MB/s"Write-Output
:PowerShellで結果を出力するコマンド。Time taken: $($uploadTime.TotalSeconds) seconds
:アップロードにかかった時間を秒単位で出力しています。Average speed: $(100 / $uploadTime.TotalSeconds) MB/s
:1MBあたり何秒かかっているのかという尺度でアップロード速度を計算して出力しています。ファイルサイズ(100MB)をアップロードにかかった時間で割って計算しています。
マルチパート・アップロードの検証
-
ファイルのマルチパート・アップロード
マルチパート・アップロードは大きいファイルでは自動的に適用されます。
さきほどと同じ方法で今度は500GBのファイルをアップロードします。123$uploadTime = Measure-Command {oci os object put --bucket-name test-bucket01 --name testfile_500MB.dat --file $env:USERPROFILE\Downloads\testfile_500MB.dat}100MBの時と違い
Split file into 4 parts for upload.
という一文が入っていることから
自動で4つに分割されてアップロードされていることがわかります。1$uploadTime.TotalSecondsアップロードが終わったら下記のコマンドを実行し、アップロードにかかった時間を表示します
アップロードに約110秒かかったことがわかります
-
性能測定
マルチパート・アップロードの速度や時間を測定します。1Write-Output "Time taken: $($uploadTime.TotalSeconds) seconds"1Write-Output "Average speed: $(500 / $uploadTime.TotalSeconds) MB/s"アップロード速度の比較
1MBあたり何秒かかっているのかという計算をそれぞれ行った結果
以下のような数値が得られました:
1 2 |
通常アップロードの速度:2.04360163878704 MB/s マルチパート・アップロードの速度:4.55151370669919 MB/s |
マルチパート・アップロードの方が速くアップロードされることがわかります。
まとめ
今回は、OCIのオブジェクトストレージに対する通常のアップロードとマルチパート・アップロードの速度比較を行い、マルチパート・アップロードの方が通常アップロードよりも速いことが確認できました。
大きいファイルのアップロード時は自動でマルチパート・アップロードに切り替えられるので意識することがあまりないですが、アップロード時間の短縮に大きな影響があることがわかりました。