Blog
[Google Cloud Platform] 5分でわかる GCP のディスクのすべて with asia-northeast (Tokyo)
こんにちは!
16新卒で6月から希望通り Central Infrastructure Agency (CIA) 配属となりました、
インフラエンジニアの青山 真也と申します。
今回は初テックブログデビューも兼ねて、GCP のディスク周りについてお伝えしたいと思います。
今回の検証内容
弊社のプライベートクラウド環境でもストレージを選定する際には、SDS がいいのか、NVMe のローカルストレージがいいのかなど、悩ましい検討をする必要がたくさんあります。そんな時はひとまず綿密な検証を行った上で、コストバランスを考えながら最適なアーキテクチャを選定していく必要があります。
この話は当然プライベートクラウドでも同じです。GCP にはディスクの種類がたくさんあり、それぞれのディスクの性能って一体どの程度パフォーマンスが出るのかを検証します。かつ、いよいよ東京にも新たに asia-northeast1-* Region (Tokyo) が追加されました。そこで各リージョンでディスク性能に差があるのかどうかも検証したいと思います。
まずは結論から!!
30 秒で理解したい人のために 3 行で結論も先に書いておきます。
1.東京リージョンのディスク性能はほんの少し良い
2.GCE の推定パフォーマンスの表示以上の性能はちゃんと出ている(特に低容量だと結構)
3.NVMe は一部リージョンの一部 I/O パターンや、RHEL 系だと性能が低い
詳しい根拠を知りたい方や、GCE のディスクの全てを知りたい方は、ぜひ読み進めてください。
GCE のディスクの種類
GCE には大きく分けて2種類のディスクが存在します。
1つ目は永続ディスク(ephemeral disk)と呼ばれ、ネットワーク越しの外部ストレージに実体が存在するタイプです。この永続ディスクには更に SSD と HDD の2種類が存在します。
2つ目はローカル SSD スクラッチディスクと呼ばれ、VM が動作するホストマシンのローカルディスクを利用するタイプです。ローカル SSD スクラッチディスクにも更に SCSI 接続と NVMe 接続の2種類が存在します。また、ディスクは 375 GB/ディスクデバイス 単位でしか増やせません。
以上をまとめると次のような分類となっています。
永続ディスクの場合には、インスタンス削除時にもディスク領域を保存しておくことができますが、ローカル SSD スクラッチディスクの場合はできません。しかし、ローカル SSD スクラッチディスクの場合はネットワーク越しではないためオーバーヘッドが小さく、非常に高い性能を出すことが可能です。
提示されるリージョン毎のディスク性能差はない
まず、HDD(375G, 10000G), SSD(375G, 1000G), SCSI(375G), NVMe(375G) それぞれの Google が提示する推定パフォーマンスを見ていきたいと思います。永続ディスクの場合にはディスク容量で性能差があるため、375G と最大性能を十分に出せる容量の2パターンで検証します。各リージョンでそれぞれの推定パフォーマンスを見てみると、すべてのリージョンで同じという結果となりました。外部ストレージの場合には QoS 制御を行うことで性能を調整することは可能ですが、果たして本当なのでしょうか…。
HDD (375 G) | HDD (10000 G) | SSD (375 G) | SSD (1000 G) | SCSI (375 G) | NVMe (375 G) | |
Read | 45 MB/s | 180 MB/s | 180 MB/s | 240 MB/s | – | – |
Write | 45 MB/s | 180 MB/s | 180 MB/s | 240 MB/s | – | – |
Rendom Read | 281.25 IOPS | 3000 IOPS | 11250 IOPS | 15000 IOPS | 100000 IOPS | 170000 IOPS |
Random Write | 562.5 IOPS | 15000 IOPS | 11250 IOPS | 15000 IOPS | 70000 IOPS | 90000 IOPS |
NVMe インスタンスの注意点
NVMe インスタンスを利用する際には NVMe 互換イメージをブートソースとして利用するように下記のような警告が出ます。
NVMe では nvme-backports-debian-7-wheezy イメージまたはユーザー独自の NVMe 互換イメージをブートソースとして使用する必要があります。推定パフォーマンスは nvme-backports-debian-7-wheezy にのみ適用されます。
利用可能な Public NVMe 互換イメージは gce-nvme プロジェクトによって管理されており、gcloud コマンドで調べることができます。
1 2 3 4 5 6 7 8 9 |
# gcloud compute images list --show-deprecated --project gce-nvme | egrep "gce-nvme|^NAME" NAME PROJECT FAMILY DEPRECATED STATUS debian-8-jessie-v20160803-nvme gce-nvme debian-8-nvme DEPRECATED READY debian-8-jessie-v20160923-nvme gce-nvme debian-8-nvme READY nvme-backports-debian-7-wheezy-v20140904 gce-nvme DEPRECATED READY nvme-backports-debian-7-wheezy-v20140926 gce-nvme DEPRECATED READY nvme-backports-debian-7-wheezy-v20141108 gce-nvme DEPRECATED READY nvme-backports-debian-7-wheezy-v20150423 gce-nvme DEPRECATED READY nvme-backports-debian-7-wheezy-v20151104 gce-nvme DEPRECATED READY |
見て分かる通り、基本的には debian イメージしか NVMe のサポートは行われていません。(RHEL 環境での計測結果についても後述します)
実際にアタッチされた NVMe は/dev/disk/by-id/google-local-ssd-0 に実体がありますが、シンボリックリンクが貼られているため /dev/nvme0n1 を利用する形となります。これは物理環境と同じ命名規則ですね。
検証環境
今回は DEPRECATED ではない debian-8-jessie-v20160923-nvme(kernel: 4.7.0-0) を利用して検証します。また、fio は 2.1.11-2 を利用しました。
対象としたリージョンは次の6リージョンです。
下記のリージョンにてn1-standard-2 (vCPU:2, Memory 7.5 GB) を利用して、計測を行いました。
・asia-northeast1-c(NEW)
・asia-east1-c
・europe-west1-d
・us-central1-f
・us-east1-d
・us-west1-b
fio の設定は下記の通りです。bs と iodepth に関しては全パターンで計測し、収束した最高性能を測定値としました。
1 2 3 4 5 6 7 8 |
bs=? # 4k 16k 64k 256k iodepth=? # 1 2 4 8 16 32 64 128 256 512 filename=? # /dev/sdb or /dev/nvme0n1 ioengine=libaio direct=1 invalidate=1 fsync=0 end_fsync=1 |
検証結果
まずは結果から。結果は以下の通りになりました。
Read
Write
Random Read
Random Write
一部を除き、各リージョンでほとんどばらつきがないことが確認できると思います。asia-east-1cとus-central1-f の NVMe random read だけ著しく性能低下がありますね。
また、GCE の画面で表示される推定パフォーマンスと実測値を比べてみると、上記の 2 項目以外はしっかりと性能を担保していることが確認できました。中でも、低容量のディスクに関しては推定パフォーマンスよりも大きな向上が見られておりました。
よくありそうな質問
NVMe インスタンスをサポート対象外の RHEL 系の OS で利用するとどうなるか
さて、NVMe のサポートが行われた Debian イメージを利用してね。とのことですが、私は RHEL 派なのでどうしても CentOS や Scientific Linux で利用したいです。
というわけで、こちらも検証してみました。
検証対象は CentOS6.8(kernel: 2.6.32-642.4.2), CentOS 7.2.1511(kernel: 3.10.0-327.36.2) を対象としています。
こちらもまずは結果から。
Read と Write の結果を見たときは、性能が出そうだと思いました。しかし現実は甘くはなく、Random Read/Write では著しい性能低下が確認されました。
CentOS 7 と Debian では nvme.ko の version 1.0 、CentOS 6 では version 0.1 が入っているため、CentOS 7 では高い性能を発揮できるかと思ったものの…。RHEL 派としては、CentOS でも性能が出るようにチューニングや解決策を見出したいところです。
インスタンスグループでもローカルSSDスクラッチディスクは使えるのか?
残念ながらインスタンスグループでは利用できません。スケーリングさせるための機能なため、恐らくイメージ化されたブートディスク領域のみを利用していく運用を推奨しているのではないでしょうか。ここら辺の考え方はコンテナにストレージ領域が適さないのと少し似ていますね。
あとがき
GCP にもいよいよ東京リージョンがやってきましたね。
さすがに一番新しいリージョンだけあって、ディスクの性能も少しだけいい結果となりました。
NVMe に関しては、一部のリージョンの一部の IO パターンでのみ性能低下が見られたり、特定の Debian イメージしか性能がちゃんと出なかったりするため、まだ少し注意が必要かなという印象を受けました。
なお、今回の検証はインスタンスガチャ的なところまでは見ておらず、複数のインスタンスで実施したわけではないので、参考程度にお願いいたします。
Author