Tezosで遊ぶにあたって、ちょうど自分で さくらのVPS 2G(3Core, HDD 200GB)を 契約していたので、それを使ってみたのですが、結果として、HDDプランでmainnetは無理なことがわかりました。

SSDだともしかしたら、いけるかもしれません、が、わかりません。

Before you play running a Tezos node in a VPS service, check its disk performance. Some VPS services have IOPS (disk access) restriction, which slows down your Tezos node bootstrap speed.

"Disk pile", NTU the Hive, Singapore

IOPS制限

さくらのVPSはCPUやディスクのリソースが他の仮想マシンと共有されているため、 あまり使いすぎると、制限が入り、性能が極度に劣化します。

Tezosの本番環境であるmainnetのノードを実用的に動かすために必要なディスクアクセス頻度は、 この制限を超えてしまうため、VPSは常にIOPS制限という、ディスクアクセスが さくらの発表値の1/10以下に低く抑えられた状態で動かさなくてはいけなくなります。

さらにこの制限は時間が経つにつれてきつくなっていくようなので、どこかで、Tezos ノードが ネットワーク上での同期に必要とするディスクアクセス頻度が得られなくなる可能性が十分あります。 さくらのVPS(HDD)でTezosノードを長期間動かすのは無理ということになります。

SSDプランでは?

SSDは、HDDと比べればアクセス能力がかなり高くなりますが、IOPS制限はやはりある、と書いてあります。 SSDを選択すると、Tezosのノードとして必要なディスク容量(100Gは欲しい)からすると、それなりにお金がかかります。 かつ、制限が入った場合、どこまで性能が下がるかは、長期間に渡って実験しないとわかりません。リスクがあります。

TezosをVPSやクラウドでやるなら

ディスク性能をよくサーベイしましょう。遅いとそれだけbootstrap(ブロックチェーンをgenesisから組み立てて、 現在のネットワークの状態にまで持っていくこと)が遅れます。

分析

Tezos のストレージ

Tezos が使用するハードディスクの容量は今現在(2018-12-12)の所 50G弱です。 つまり、OSも入れると100Gは欲しいところです。

容量の問題は認識されていて、近いうちにスナップショットが導入されるでしょう。 スナップショットを使うと、スナップショット以前の古いトランザクションを保存しなくて済むので (もちろん、その代わり古いトランザクションについては調べることができなくなりますが)、 ディスク容量を大幅に節約できます。

とはいえ、いつ入るのかわかりません。しばらくは、それなりに大きいディスクが必要です。

Tezos のメモリ

諸説ありますが、8G のマシンは欲しいとのことです、が、2G でもメモリはなんとかなっています。

じゃ 2G Memory 200G HDD のプランでいいじゃん?

いや、それが、ダメなんです。さくらのVPSでは、リソースを他の仮想マシンと共有しているので、 リソースをガンガン使うと規制が入るんです。

規制の情報は https://manual.sakura.ad.jp/cloud/support/technical/storage.html#iops-1i-o にあります:

200G HDD のプランだと、

  • Read IOPS: 2000
  • Write IOPS: 500

とあります。なるほど。じゃあ、実際の Tezos ノードを動かしている私の VPS の IOPS はどうなっているかというと、

$ iostat -x -d 60
$ iostat -x -d 10
Linux 4.15.0-39-generic (sakura)        12/13/18        _x86_64_        (3 CPU)

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  ...
...
vda             34.40   98.10   1048.00    437.20     0.00     4.10  ...
vda             41.10   98.10    164.40    424.00     0.00     2.30  ...
vda            106.50    3.10   2497.20     22.00     0.00     1.90  ...
vda             32.30  106.30    170.80    457.60     0.00     3.20  ...
vda            102.70   44.50    972.80    194.00     0.00     3.50  ...
vda             50.50  102.00   2640.40   1067.60     0.00    21.90  ...
vda             49.20   85.30    224.80    408.80     0.00     3.70  ...
vda             59.80   68.70    255.60    290.00     0.00     2.10  ...

ディスクのTPS(IOPSのこと。ブロックチェーンのTPSと勘違いしないでください)読み書き合わせて120くらいです。 えっ、1/10以下じゃん。これは、IOPS規制がかかってディスクの性能が極度に制限されているのです。 規制に関しては https://help.sakura.ad.jp/hc/ja/articles/206189882 に説明がありますが、 たしかに、VPSの情報を見ると IOPS規制がかかっていると出てきます。

では、規制がかかる前はどうだったか、というと、幸い、Prometheus でログを取っていたので、Tezos ノード を動かした初めの頃からの TPS が見れます:

上にあるTPSに近い数字が出ていたのは6時間くらいで、そのあとは急激に下がっていき、 すぐに、120と300の間をうろうろする状態、平均すると150くらいになります。

ですので、このさくらが発表しているIOPS最大値というのは許される瞬間風速であって、おそらく、このスピードを 常時出そうとすると規制が入って劇遅の性能になります。二時間経つと、制限が一部解除されるのか 総TPSが300に戻りますが、30分もするとまた120に戻されてしまうので、300でも常時発生していれば、 HDD VPSプランでは高すぎる、という扱いなのでしょう。繰り返しますが、このお値段なので、しょうがないですね。

2018-12-16現在、この値はさらに下がっていて下が95、上が180くらい。どんどん遅くなります。 パターンはかわらず二時間重規制ののち、30分だけちょっと軽くなる、の繰り返しです。そういうアルゴリズムなんでしょうね。

ちなみに、このTPS 120でTezosはどれくらいのことができるかというと、ブロックを1分に 3つ作成できれば御の字です。Tezosのブロックは1分に1つというデザインなので、一応、リアルタイムに 間に合いますが、これは平均なので、トランザクションが多い時期のデータを処理すると、ブロック1つに数分、 ということもあります。つまり、この規制下では他ノードとの同意に追いつかないことがありうるので、 使えない、ということになります。

もちろん、このパフォーマンスの元では、さらにBakingとかもってのほかです。

では、どれくらいのディスクアクセス速度が欲しい?

色々実験したければ

早ければ早いほどいいです。Tezosノードがbootstrapしきって、自分のノードの ブロックチェーンの最新のタイムスタンプが現実の時間に近くに落ち着くと、ディスクの アクセスもそれなりに低くなりますが、bootstrapまではどんどん外部からデータを 読み込んで自分のデータベースに書き込みます。

そこのスピードが遅いと、現実世界のデータに追いつくまでとても時間がかかります。 なので、早いほど良い。ボトルネックはディスクやCPUではなくネットワークであるべきです。

現状だけ監視したければ

最悪、ある時点でのデータがネットから得られるので(例えば https://www.tzdutch.com/quicksync/)、 そこから一気にダウンロードすれば大部分のbootstrapは省けますが、それでもそこから現在時刻まではやはり同期が必要です。

同期が済んでしまえは求められるのは毎分1blockの同期スピードです。 これはおそらく、読み書き合わせて平均150TPSあれば平均して3TPSくらいは出るはずなので、最低限なんとかいけます。 500TPSも出れば、bootstrapが済んでいればまあ普通に遊べるんじゃないでしょうか。 ただし、ディスクアクセスのピーク時、つまり、ノード内のLMDBが激しくメモリマップされたデータをディスクに書き込み出しはじめると、 その間はついていけなくなります。

Bake したければ

リソースを共有するサービスは絶対ダメ。専用マシンを自分で所有するか、少なくともディスクを占有できるクラウドサービスを使わないとだめですね。 (その場合の損益分岐点はどこなんでしょうね。わたしゃ知らないよ。)

まとめ

どうもパフォーマンスが出ないので、色々 Prometheus と Graphana 入れて頑張って観察したんですが、 結果わかったのが Tezos の問題じゃなくて さくらのVPS の特性だった…

もしTezosノードを立てて遊んでみる、という方は、目的に合わせて、 お使いになるVPSとかクラウドの長期サーバ運用した場合の実測ディスク速度をよく調べてください。 もし余剰マシンをお持ちなら、深く考えずに自宅でそれ使うのが良さげです。

追記

2018-12-16: この記事書いてからもさらにノードを動かしていますが、IOPS制限は時間が経つにつれてキツくなっていくようで、 現在TPSの幅は95-180くらい。なので本文を少し改訂しました。 ちなみに、下限が60を切ってしまうと、ノードはネットワークに全く追いつけなくなります。

2018-12-23: テストネットワークである Alphanet では、現在は genesis block が 2018-11-30 と比較的最近なこと、トラフィックが少ないので、IOPS規制が入る前に bootstrap が終了しました。下のグラフの通り4時間弱で終了します。Bootstrap 後もディスクアクセスは少ないので動くようです: