IBM Cloud VPC イメージ作成時間

# はじめに
前回の記事では、以下のそれぞれのステップでどの程度時間を要するかをまとめました。
- IBM CloudのVPCでインスタンスからイメージを作成
- 作成したイメージをICOSにExport
- ICOSからイメージの一覧にImport
- Importされたイメージからインスタンスの作成

https://qiita.com/katahiro/items/b8fe79dbf4fa8676adef

実施結果から、少なくとも東京リージョンで実施する場合、以下のスピード感で処理される状態です。

- インスタンスからイメージの作成：最終的に作成されるイメージサイズに対して14MB/sec程度で出力される
- ICOSへのExport：作成されたイメージサイズに対して500MB/sec程度で転送される
- ICOSからのImport：対象のイメージサイズに対して20MB/sec程度でImportされる
- インスタンスの作成：すぐ終わる

結局のところ、そもそも作成されるイメージのサイズがどの程度になるかわからないと、見込みの完了時間も想定できない、ということです。

というわけで、今回の記事ではBoot Volumeのサイズや使用状況で、イメージの作成に差が出るのか、サイズに影響が出てくるのかを確認したいと思います。

# イメージ作成について
IBM CloudのVPCで利用中の仮想サーバといったインスタンスはイメージ作成が可能です。ただし、インスタンス全体のイメージを作成するのではなく、あくまでBoot Volumeのみを対象として動作させることが出来ます。システムバックアップ運用で利用することがメインとなる機能ですね。Data Volumeでバックアップを実施したい場合はスナップショット機能があるので、そちらの利用をお勧めします。

このイメージ作成ですが、少し注意が必要です。
- サーバ停止中にしか指示できない：サーバ起動状態ではイメージ作成が操作できません。サーバを停止する必要があるため、オンライン中に実施することはできません。
- Boot Volumeの最大は250GBまで：[ドキュメント](https://cloud.ibm.com/docs/vpc?topic=vpc-creating-virtual-servers&interface=ui#creating-virtual-servers-ui)に記載ありますが、Boot Volumeの最大サイズは250GBなので、それ以上に大きい領域を設定することができません。

# 計測対象
前置きが長くなりましたが、どういった計測を実施したのかの説明です。
- VPC Region:東京
- インスタンス情報
    - プロファイル：2 vCPU / 4 GB RAM
    - OS：Ubuntu Linux 22.04 LTS Jammy Jellyfish Minimal Install (amd64)
    - Boot Volume：100GB / 200GB
- 100GBのインスタンスでの実施内容
    - インスタンス作成時点(OS領域で7GB程度使用)の状態でイメージ作成
    - 50GB分のダミーファイルを作成しイメージ作成(ディスク使用率55%)
    - 80GB分のダミーファイルを作成しイメージを作成(ディスク使用率85%)
- 200GBのインスタンスでの実施内容
    - インスタンス作成時点(OS領域で7GB程度使用)の状態でイメージ作成
    - 50GB分のダミーファイルを作成しイメージ作成(ディスク使用率28%)
    - 100GB分のダミーファイルを作成しイメージ作成(ディスク使用率53%)
    - 150GB分のダミーファイルを作成しイメージ作成(ディスク使用率78%)

イメージを作成するのに要した時間、またそのイメージサイズを以下にまとめます。

# 計測結果
## イメージ作成完了までの時間
後述しますが、元のBoot Volumeのサイズに関係なく、Boot Volumeのデータ量に比例する感じです。
|Boot Volumeのサイズ|100GB|200GB|
|---|---|---|
|初期状態(7GB)|0:22:01|0:21:23|
|+50GB|1:07:56|1:11:57|
|+80GB|1:37:54|-|
|+100GB|-|1:43:45|
|+150GB|-|2:41:47|

## イメージサイズ
先と同様ですが、元のBoot Volumeのサイズは関係なく、Boot Volumeのデータ量に合わせてイメージサイズが決定される感じです。初期状態を除くと `実使用量＋3～5GB前後` のサイズになりそう。
|Boot Volumeのサイズ|100GB|200GB|
|---|---:|---:|
|初期状態(7GB)|19GB|19GB|
|+50GB|62GB|62GB|
|+80GB|90GB|-|
|+100GB|-|110GB|
|+150GB|-|159GB|

## イメージ作成スピード
後半は若干早くなってるようにも見えますが、全体から見れば誤差の範疇かと思います。前回の記事で初期状態でイメージ作成した時も、最速は16MB/s弱出ていたので。なので、イメージサイズや元のBoot Volumeのサイズに関係ない速度でイメージは出力されるようです。
|Boot Volumeのサイズ|100GB|200GB|
|---|---|---|
|初期状態(7GB)|14.38MB/s|14.81MB/s|
|+50GB|15.21MB/s|14.36MB/s|
|+80GB|15.32MB/s|-|
|+100GB|-|17.67MB/s|
|+150GB|-|16.38MB/s|

# ICOSへの転送時間
作成したイメージを長期間保管するのであれば、ICOS(Object Storage)への保管が妥当です。では、それぞれのサイズで作成されたイメージをICOSに転送するのに、どれほど時間がかかったかの紹介です。
|イメージサイズ(GB)|転送時間|転送時間(秒)|転送速度(MB/s)|
|---:|:---:|---:|---:|
|19|0:00:35|35|542.86|
|62|0:01:27|87|712.64|
|90|0:01:53|113|796.46|
|110|0:02:14|134|820.90|
|159|0:03:02|182|873.63|

転送速度は、前回の記事でも早いと思ったのですが、これはサイズが大きいほど加速してますね。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/c9854184-85a7-9ec9-2503-05646f928e55.png)
普通のI/Oでは考えられないスピード感なので、VPCのイメージ自体も裏ではICOSで保管していて、ICOSのBucket間コピーしてるようにも思えます。ただ、ICOSからイメージへのImportは20MB/s程度しか出ないので、そう単純ではないと思いますが。

# さいごに
いかがでしたでしょうか？まとめてしまうと、 `イメージの作成は元のBoot Volumeのサイズの影響は受けない`し、`イメージのサイズはBoot Volumeのデータ量に比例`し、`イメージの作成はそのサイズに関わらず14MB/s程度の速度で出力される`ということです。
イメージサイズが重複排除等で元の使用量より少なくなるかもと思ったりしましたが、そういうことはありませんでした。

今回の記事でVPCのインスタンスでイメージのバックアップを取得する際にどの程度のサイズになりそうか、といった計算の参考になれば幸いです。