AWS Lambda PythonでLambda関数実行サーバのディスクアクセス速度を簡易測定する

5月 17, 2017AWS,Lambda,Programming,Python

以前の「AWS Lambda PythonでLambda関数実行サーバのネットワーク速度テストをspeedtest-cliを用いて行う」の記事でAWS Lambdaの性能測定の一貫としてネットワーク速度を測定する方法を記載しました。

今回はAWS Lambdaの性能測定のうちディスクアクセス速度について調べる方法を備忘録として記載したいと思います。

AWS Lambda PythonでLambda関数実行サーバのディスクアクセス速度を簡易測定する

Linuxのディスクアクセス速度を測定するにはUnixBench、fio、bonnie++などのベンチマークツールを使用するのが一般的ですが、これらのベンチマークツールを使用するにはインストールやビルドが必要が必要だったり、
測定に時間がかかったりします。

そのため、yumでモジュールをインストールできず、また実行時間も5分までと指定されているAWS Lambdaで測定するにはどうしても限られた使用できるコマンドでの簡易測定になります。

ぱっと思いつくところでは書き込み速度だけですが、下記のコードのようにddコマンドを利用してディスクアクセス速度を測定することが考えられます。

AWS Lambda PythonでLambda関数実行サーバのディスクアクセス速度を簡易測定するコード

Lambda実行サーバのディスクアクセス速度を測定する際に注意するべき点はLambda実行サーバに書き込める容量が500MB程度しかないということです。
そのため、下記のコードではテストファイルの容量を512MBとしています。

また、ddコマンドは「oflag=direct」オプションで書き込み時、「iflag=direct」オプションで読み込み時のキャッシュを使用しない指定をすることができます。
そのため、「キャッシュ無しの書き込み」、「キャッシュ無しの読み込み」、「キャッシュ有りの書き込み」、「キャッシュ有りの読み込み」の4パターンを計測するようにしています。

import commands
import os

print('Loading function')

def _(cmd):
    return commands.getoutput(cmd)

def lambda_handler(event, context):
    print("Disk Writing Speed (No Cache)")
    print(_("time dd bs=1M count=512 if=/dev/zero of=/tmp/disktest oflag=direct"))

    print("Disk Reading Speed (No Cache)")
    print(_("time dd bs=1M count=512 if=/tmp/disktest of=/dev/null iflag=direct"))

    print(_("rm -f /tmp/disktest"))

    print("Disk Writing Speed (Cached)")
    print(_("time dd bs=1M count=512 if=/dev/zero of=/tmp/disktest"))

    print("Disk Reading Speed (Cached)")
    print(_("time dd bs=1M count=512 if=/tmp/disktest of=/dev/null"))

    print(_("rm -f /tmp/disktest"))

Reference: Tech Blog citing related sources