gcloud alpha storage を試してみる
この記事はGoogle Cloud Platform Advent Calendar 2021、21日の記事です。遅れてすみませんm(_ _)m
まとめ
- 2021年7月20日に
gcloud alpha storage
がリリースされたよ - gcloud alpha storage は ls、cp、rmしかないよ
- --format json 未対応です
- ダウンロードアップロード時の細かい値の設定をよしなにやってくれるので、gsutilをデフォルト設定で使うよりは少なくともダウンロードは明らかに早いよ
2021年7月20日にこのようなリリースが出ていました。
というわけで、出た時にすぐ試したのですが、それから少し時間も経ったしもう一度試してみるかなというのが今回の趣旨です。
※ 当時の結果は後で貼っておきます
ただ、当時からは多分あんまり変わってない…のかな?という感じです。
gclouda alpha storageコマンドと、gsutilコマンドとでは、以下の記事にある通り、転送速度は改善されています。ただ、cloud shell で試してみると、ダウンロード速度は改善されていますが、アップロードは若干遅いかも?という感じです。
time コマンドでざっくりと試した結果を貼っておきます。
その前にバケット作成します。
現在、cpとlsとrmしかありませんので、バケットの作成は gsutil コマンドで行います。
$ gsutil mb gs://nekochan1729
Creating gs://nekochan1729/...
オプションなんも付けてないので、USでマルチリージョンで作成されています。
$ gcloud alpha storage mb gs://hogehogeaqwewrw
ERROR: (gcloud.alpha.storage) Invalid choice: 'mb'.
Maybe you meant:
gcloud alpha media
gcloud alpha storage cp
gcloud alpha storage ls
gcloud alpha storage rm
To search the help text of gcloud commands, run:
gcloud help -- SEARCH_TERMS
もちろんエラーになりました。
そうそう、これを試しておきたかったのです
$ gcloud alpha storage ls -L -b gs://nekochan1729 --format json
gs://nekochan1729/:
Storage Class: STANDARD
Location Type: multi-region
Location Constraint: US
(snip)
jsonなフォーマットでは出力されませんでした。かなしみ。
cloud shell
1Gのファイルのアップロード
gcloud alpha storage
$ time gcloud alpha storage cp testtestfile gs://nekochan1729
Copying file://testtestfile to gs://nekochan1729/testtestfile
Completed files 1/1 | 1000.0MiB/1000.0MiB | 94.3MiB/s
Average throughput: 93.6MiB/s
real 0m13.157s
user 0m5.337s
sys 0m2.164s
real 0m10.936s
user 0m5.300s
sys 0m2.044s
real 0m15.931s
user 0m5.415s
sys 0m1.574s
real 0m10.891s
user 0m5.722s
sys 0m2.480s
real 0m10.930s
user 0m5.613s
sys 0m2.649s
gsuitl
$ time gsutil cp testtestfile gs://nekochan1729
Copying file://testtestfile [Content-Type=application/octet-stream]...
==> NOTE: You are uploading one or more large file(s), which would run
significantly faster if you enable parallel composite uploads. This
feature can be enabled by editing the
"parallel_composite_upload_threshold" value in your .boto
configuration file. However, note that if you do this large files will
be uploaded as `composite objects
<https://cloud.google.com/storage/docs/composite-objects>`_,which
means that any user who downloads such objects will need to have a
compiled crcmod installed (see "gsutil help crcmod"). This is because
without a compiled crcmod, computing checksums on composite objects is
so slow that gsutil disables downloads of composite objects.
| [1 files][ 1000 MiB/ 1000 MiB]
Operation completed over 1 objects/1000.0 MiB.
real 0m10.320s
user 0m5.593s
sys 0m2.570s
real 0m10.303s
user 0m5.656s
sys 0m2.509s
real 0m10.580s
user 0m5.741s
sys 0m2.231s
1Gのファイルのダウンロード
gcloud alpha storage
$ time gcloud alpha storage cp gs://nekochan1729/testtestfile test02
Copying gs://nekochan1729/testtestfile to file://test02
Completed files 1/1 | 1000.0MiB/1000.0MiB | 100.2MiB/s
Average throughput: 143.0MiB/s
real 0m9.108s
user 0m4.108s
sys 0m3.427s
real 0m8.143s
user 0m3.955s
sys 0m3.004s
real 0m9.122s
user 0m3.936s
sys 0m3.170s
gsutil
$ time gsutil cp gs://nekochan1729/testtestfile test01
Copying gs://nekochan1729/testtestfile...
- [1 files][ 1000 MiB/ 1000 MiB] 68.3 MiB/s
Operation completed over 1 objects/1000.0 MiB.
real 0m16.821s
user 0m14.988s
sys 0m8.574s
real 0m17.171s
user 0m15.641s
sys 0m8.667s
real 0m17.171s
user 0m15.641s
sys 0m8.667s
とはいえ、cloud shell はかなり低いスペックのVMのはずですので、若干身銭を切って大きめのサイズのものを試してみることにしましょう。でもヒヨって e2-standard-4
です。
e2-standard-4
1Gのファイルのアップロード
gcloud alpha storage
$ time gcloud alpha storage cp test01 gs://nekochan1729/test11
Copying file://test01 to gs://nekochan1729/test11
Completed files 1/1 | 1000.0MiB/1000.0MiB | 146.8MiB/s
Average throughput: 160.3MiB/s
real 0m7.639s
user 0m4.747s
sys 0m1.092s
real 0m7.074s
user 0m5.042s
sys 0m1.502s
real 0m7.644s
user 0m4.979s
sys 0m1.499s
gsutil
$ time gsutil cp test01 gs://nekochan1729/test11
Copying file://test01 [Content-Type=application/octet-stream]...
==> NOTE: You are uploading one or more large file(s), which would run
significantly faster if you enable parallel composite uploads. This
feature can be enabled by editing the
"parallel_composite_upload_threshold" value in your .boto
configuration file. However, note that if you do this large files will
be uploaded as `composite objects
<https://cloud.google.com/storage/docs/composite-objects>`_,which
means that any user who downloads such objects will need to have a
compiled crcmod installed (see "gsutil help crcmod"). This is because
without a compiled crcmod, computing checksums on composite objects is
so slow that gsutil disables downloads of composite objects.
- [1 files][ 1000 MiB/ 1000 MiB]
Operation completed over 1 objects/1000.0 MiB.
real 0m6.807s
user 0m4.979s
sys 0m1.592s
real 0m6.630s
user 0m4.872s
sys 0m1.442s
real 0m6.780s
user 0m4.924s
sys 0m1.489s
1Gのファイルのダウンロード
gcloud alpha storage
$ time gcloud alpha storage cp gs://nekochan1729/test11 test02
Copying gs://nekochan1729/test11 to file://test02
ERROR: This download was skipped since the google-crc32c
binary is not installed, and Python hash computation will likely
throttle performance. You can change this by installing the binary
by running "/usr/bin/python3 -m pip install google-crc32c --target /usr/lib/google-cloud-sdk/lib/third_party" or
modifying the "storage/check_hashes" config setting.
Completed files 0/1 | 0B/1000.0MiB
real 0m1.049s
user 0m0.701s
sys 0m0.105s
エラー出るんで入れますが、pipないのでpipいれるところから
Reading package lists... Done
Building dependency tree
Reading state information... Done
(snip)
$ sudo /usr/bin/python3 -m pip install google-crc32c --target /usr/lib/google-cloud-sdk/lib/third_party
Collecting google-crc32c
Downloading https://files.pythonhosted.org/packages/5b/82/f2754137e0e5026065c8b2f32baf69767a2d7e574da2a125f7caeb9ddb96/google_crc32c-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Installing collected packages: google-crc32c
Successfully installed google-crc32c-1.3.0
$ time gcloud alpha storage cp gs://nekochan1729/test11 test02
Copying gs://nekochan1729/test11 to file://test02
Completed files 1/1 | 1000.0MiB/1000.0MiB
Average throughput: 671.2MiB/s
real 0m2.652s
user 0m3.995s
sys 0m2.795s
real 0m2.656s
user 0m3.805s
sys 0m2.559s
real 0m2.625s
user 0m3.788s
sys 0m2.577s
gsutil
$ time gsutil cp gs://nekochan1729/test11 test02
Copying gs://nekochan1729/test11...
- [1 files][ 1000 MiB/ 1000 MiB] 78.7 MiB/s
Operation completed over 1 objects/1000.0 MiB.
real 0m14.064s
user 0m13.988s
sys 0m7.108s
real 0m14.659s
user 0m14.636s
sys 0m7.554s
real 0m13.827s
user 0m13.648s
sys 0m7.018s
この違いよ!
ただ、これはあくまで デフォルトで
の話です。gsutilでも設定を色々とすれば早くはなるはずです(分割ダウンロードするとか)。ただ、その最適な値を見つけるのはかなり大変[1]なので、よしなにやってくれるのは大変にありがたいかなと思いました。
というわけで、今回のようなダウンロード時には gcloud alpha storageを使ったら早くなるということが体感出来たところで、今回は終わりにします。
もっと検証しようと思います。
-
マシンのパワーとか回線とか、ファイルサイズや同時に転送したいファイル数などで色々変わるので… ↩︎
Discussion