Google App EngineのFlexible EnvironmentにTmpfsを導入する
2017/01/27
  • このエントリーをはてなブックマークに追加
ドーモ、カブクの空飛ぶPythonエンジニアの吉海です。
今回は、Google App EngineのFlexible Environmentでtmpfsを使う方法をご紹介したいと思います。

tmpfsの説明

tmpfsは全てのファイルをメモリ上に保存するファイルシステムで、高速な読み書きが可能です。
メモリに保存するので、リブートするとtmpfsに保存した全てのファイルが失われます。
Linuxのkernel 2.4からサポートされるようになりました。
公式ドキュメント

使い方

tmpfsを使うためには、app.yamlのresourcesにvolumesにtmpfsのvolumeを追加する必要があります。

For example:
resources:
  cpu: 2
  memory_gb: 1.3
  disk_size_gb: 10
  volumes:
  - name: ramdisk1
    volume_type: tmpfs
    size_gb: 0.5


上記の設定では1.3GBのメモリーのうち、最大0.5GBをtmpfsに割り当てるようになります。

tmpfsのボリュームは、VMのインスタンス(Docker ホスト)の下記のパスにマウントされます。
/mnt/app_volumes/mnt/ramdisk1
Docker コンテナ上には下記のパスでマウントされます。
/mnt/ramdisk1
アプリケーションから使う場合はコンテナから使うことになるので、/mnt/ramdisk1のパスで使えます。

ベンチマーク


ddコマンドでベンチマークをした結果です。

tmpfs

dd if=/dev/zero of=/mnt/ramdisk1/test ibs=1M obs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 5.29664 s, 2.0 GB/s

通常のdisk

dd if=/dev/zero of=/home/test ibs=1M obs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 88.2839 s, 119 MB/s

16.8倍ぐらい早いです。

tmpfsの使用例

  • 一時ファイルの保存先にする
  • 読み込みに時間がかかるファイルをtmpfsに設置する
  •  リブートするとファイルが消えてしまうので、コンテナ起動時にファイルをtmpfsにコピーするなどの仕組みが必要になる。
弊社では、一時ファイルの保存先にtmpfsを使っています。

最後に

設定ファイルを追記するだけでtmpfsを簡単に導入出来ます。
VMのメモリを使うので、どの程度tmpfsで使っても問題ないかを検討する必要がありますが
ストレージの速さが必要な場面があれば、是非活用されてみては如何でしょうか?