Blogger Syntax Highliter

Sunday, June 10, 2012

Azure Storage を利用している Windows Azure Virtual Machine の VHDイメージへの書き込み速度

 ついにWindows AzureにもLinuxをVirtual Machineを利用することができるようになりました!このディスクは今までのAzure Storageを利用することになるのですが、ご存知の通りAzure Storageは普通のストレージではありません。詳細はについては他の資料で確認していただければと思いますが、RESTインタフェースを持つHTTP Requestでアクセスするため、どうしても気になってくるのはディスクの書き込み速度です。

今回はVirtual MachineでLinuxが動くこともあり、さっそくスモールインスタンスのUbuntuでディスクの書き込み速度を確認してみました。ddで1GBのファイルを作成してみます。

※昔からあるWindows Azure Cloud ServiceのWebRoleとかWorkerRoleはローカルストレージを利用するので今回計測するディスクとは異なるので注意です。

1. Windows Azure で Ubuntu + Azure Storage

 

ddで1MB毎の書き込みを1024回

~$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 55.0982 s, 19.5 MB/s

real    0m55.105s
user    0m0.008s
sys     0m3.012s

ddで1GBを1回で書き込み

~$ time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 89.1004 s, 12.1 MB/s

real    1m29.463s
user    0m0.000s
sys     0m3.916s

2. Amazon Linux + EBS

 判断しにくいと思いますので、EC2のEBSタイプの速度も確認してみます。EBSはAzure Storageとは性質の違うストレージでスナップショットを作成しない限りは Availability Zone 依存なストレージです。

ddで1MB毎の書き込みを1024回

~$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 15.2627 s, 70.4 MB/s

real    0m15.282s
user    0m0.004s
sys     0m1.740s

ddで1GBを1回で書き込み

~$ time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 22.6907 s, 47.3 MB/s

real    0m23.415s
user    0m0.000s
sys     0m3.208s

思った通りというか技術的に違うものなのでAzure Storageと比べると速いですね。ということで次は、見た感じ似ている技術のストレージ速度を計測するために、s3fsでS3にマウントしてデータを書き込んでみます。

3. Amazon Linux + S3 with s3fs

 Azure Storage は同一地域内で異なる Fault Domain に3つのコピーされており、RESTのインタフェースを持つため、EBSと比べると機能もかなり違います。なので、見た感じ似ている S3を使用した s3fs の速度を計測してみます。

1MB毎の書き込みを1024回

/mnt/s3resource$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 132.277 s, 8.1 MB/s

real    2m12.576s
user    0m0.001s
sys     0m3.723s

 

1GBを1回で書き込み

/mnt/s3resource$ time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 133.855 s, 8.0 MB/s

real    2m14.017s
user    0m0.002s
sys     0m3.801s

思っていた感じですね。fuseを使っていることも関係しているかもしれませんね。

4. Windows Azure で Ubuntu + Local Storage

 さいごに、Windows Azure の Virtual Machine には、ローカルストレージも存在するので、こちらの速度も測定してみます。Ubuntu の /mnt/resource にマウントされているディスクは、インスタンスのローカルストレージにマウントされているようで、Virtual Machine削除時にはデータが削除されてしまいますが、速度を要求する場合はこちらを使用した方がよさそうです。

1MB毎の書き込みを1024回

/mnt/resource# time dd if=/dev/zero of=testfile bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 2.75891 s, 389 MB/s

real    0m2.846s
user    0m0.000s
sys     0m2.248s

1GBを1回で書き込み

/mnt/resource# time dd if=/dev/zero of=testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.53529 s, 699 MB/s

real    0m1.893s
user    0m0.000s
sys     0m1.452s

ローカルストレージは流石に速いですね。

まとめ

書き込み速度なので、読み込み速度はまた今度。

Azure Storage で保存されたデータは、同一地域内で異なる Fault Domain に3つのコピーされているので、見た感じ同じ技術条件で Virtual Machine のディスク速度を考えてみると、s3fs との比較になると思うのですが、速度的にかなり頑張っている感じがします。とはいえ、起動した後そのまま使うと遅い感じはするので、サービスで利用するミドルウェアによってはAzure Storageと/mnt/resourceのローカルストレージをバランスよく使用したほうが良いと思います。ミドルウェアの性質からWindows Azure の Linux 利用時のデザインパターンが作れそうですね。

あとAzure Storageで忘れてはいけないのが、Geo-Replication(地域間の自動バックアップ)です。利用中のLinuxが常に異なる地域でバックアップされているのは非常に安心ですし、クラウドな感じがします。

meetazure

時間があれば Linux から Azure Storage を Raid とかに設定しみたいですねー。