AWS Advent Calenderの12月22日分です。
COPSBenchとは
世の中、ベンチマークソフトウェアであふれています。その目的は様々ですが、S3に代表されるオブジェクトストレージのベンチマークソフトウェアは、POSIXなファイルシステムのベンチマークとちがってほとんど普及していません。
Amazon S3のパフォーマンスをあげるコツという記事にあるとおり、S3は使い方によってパフォーマンスが異なります。そのため、実際のワークロードを模擬することで初めて意味のある性能指標を得ることが出来ます。
COSBenchは万能ではありませんが、様々なワークロードをXMLで記述することで、模擬実行できるApache2ライセンスのソフトです。Intelの中国の方を中心に開発がすすめられています。http://www.slideshare.net/ben_duyujie/cosbench-apac に概要があるので、時間があるかた、興味のあるかたはこちらをご覧ください。
構成は、Controllerが複数のDriverに対して測定対象に負荷をかけるように指令する作りです。
つかってみる
本記事では、そのごちゃごちゃした話はさておき、COSBenchを使って、結果を得るところまでみてみることにしましょう。
下準備
cosbenchはubuntu12.03 LTSがメインサポートなので、まずはubuntsu12.03を用意します。
$ sudo apt-get update && sudo apt-get install openjdk-7-jre unzip curl
$ java -showversion
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
.(以下略)
という具合で、openjdkがはいればOKです。
入手とインストール
入手先はgithub上にあります。
$ wget https://github.com/intel-cloud/cosbench/releases/download/0.3.3.0/0.3.3.0.zip
$ unzip 0.3.3.0.zip
$ ln -s 0.3.3.0 cos
$ cd cos
$ chmod +x *.sh
展開した結果は
とりあえず動作確認
まずは、start-allをしてみます。
私の場合は、Vagrantfileをポートフォワードするように修正したので、いったん、vagrant haltしてから、vagrant upします。
~/playground/vagrant-place/ubuntu1204$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 19088 => 19088 (adapter 1)
[default] -- 18088 => 18088 (adapter 1)
ここまでくれば、ポートが動いているかどうかをcurlかなにかで試します。
動いていれば、ワークロードファイルを登録してみます。
vagrant@vagrant-ubuntu:~/cos$ sh cli.sh submit conf/workload-config.xml
Accepted with ID: w1
vagrant@vagrant-ubuntu:~/cos$ sh cli.sh info
Drivers:
driver1 http://127.0.0.1:18088/driver
Total: 1 drivers
Active Workloads:
w1 Sun Dec 22 03:22:03 BRST 2013 PROCESSING
Total: 1 active workloads
さらに、http://127.0.0.1:19088/controller/index.html にアクセスしてみる。
Active Workloadsにw1がみえているはずなので、適当にいじってみるといいです。
sh stop-all.sh で停止します。
実際に使ってみる
Controllerの設定を確認する。
Controllerの設定はcontroller.confで行います。中身は一目瞭然かと。
そして、制御対象のdriverのURLも忘れずに。
vagrant@vagrant-ubuntu:~/cos$ cat conf/controller.conf
[controller]
drivers = 1
loglevel = INFO
logfile = log/system.log
archive_dir = archive
[driver1]
name = driver1
url = http://127.0.0.1:18088/driver
はDriverを動かす
Controllerを動かす前に、Driverを動かします。start-driver.shを走らせるだけ。
vagrant@vagrant-ubuntu:~/cos$ sh start-driver.sh
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
.
Starting cosbench-log0.3.3.0 [OK]
Starting cosbench-tomcat0.3.3.0 [OK]
Starting cosbench-config0.3.3.0 [OK]
Starting cosbench-http0.3.3.0 [OK]
Starting cosbench-core0.3.3.0 [OK]
Starting cosbench-core-web0.3.3.0 [OK]
Starting cosbench-api0.3.3.0 [OK]
Starting cosbench-mock0.3.3.0 [OK]
Starting cosbench-ampli0.3.3.0 [OK]
Starting cosbench-swift0.3.3.0 [OK]
Starting cosbench-keystone0.3.3.0 [OK]
Starting cosbench-s30.3.3.0 [OK]
Starting cosbench-librados0.3.3.0 [OK]
Starting cosbench-scality0.3.3.0 [OK]
Starting cosbench-driver0.3.3.0 [OK]
Starting cosbench-driver-web0.3.3.0 [OK]
Successfully started cosbench driver!
Listening on port 0.0.0.0/0.0.0.0:18089 ...
Persistence bundle starting...
Persistence bundle started.
!!! Service will listen on web port: 18088 !!!
というようになれば、OKです。
http://127.0.0.1:18088/driver/index.html にアクセスします。
つくりたてのほやほやなので何も登録はありませんが。。
続いてControllerの起動
これも start-controller.shでOKです。
vagrant@vagrant-ubuntu:~/cos$ sh start-controller.sh
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench controller ...
.
Starting cosbench-log0.3.3.0 [OK]
Starting cosbench-tomcat0.3.3.0 [OK]
Starting cosbench-config0.3.3.0 [OK]
Starting cosbench-core0.3.3.0 [OK]
Starting cosbench-core-web0.3.3.0 [OK]
Starting cosbench-controller0.3.3.0 [OK]
Starting cosbench-controller-web_0.3.3.0 [OK]
Successfully started cosbench controller!
Listening on port 0.0.0.0/0.0.0.0:19089 ...
Persistence bundle starting...
Persistence bundle started.
!!! Service will listen on web port: 19088 !!!
http://127.0.0.1:19088/controller/index.html にアクセスすると、
矢印の先に、submit new workloadsとありますが、ここから負荷ルールファイルを登録します。
これは、オレゴンのS3に対して、64KBのファイルを複数回、80%readでのテストしてみるときのルールです。cprefix= には該当のバケットを指定します。
あとは結果を待つ!
ルールを登録すると、すぐに測定が始まります。数分後には次のような結果をみることになるでしょう。
Final Result
General Report
Op-Type | Op-Count | Byte-Count | Avg-ResTime | Throughput | Bandwidth | Succ-Ratio |
init-write | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
prepare-write | 20 ops | 1.28 MB | 772.45 ms | 1.29 op/s | 82.76 KB/S | 100% |
read | 177 ops | 11.33 MB | 1042.37 ms | 6.07 op/s | 388.55 KB/S | 100% |
write | 41 ops | 2.62 MB | 1180.12 ms | 1.41 op/s | 90.2 KB/S | 100% |
cleanup-delete | 40 ops | 0 B | 365.75 ms | 2.73 op/s | 0 B/S | 100% |
dispose-delete | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
ResTime (RT) Details
Op-Type | 60%-RT | 80%-RT | 90%-RT | 95%-RT | 99%-RT | 100%-RT |
init-write | N/A | N/A | N/A | N/A | N/A | N/A |
prepare-write | < 710 ms | < 720 ms | < 730 ms | < 1,490 ms | < 1,490 ms | < 1,520 ms |
read | < 1,480 ms | < 1,490 ms | < 1,510 ms | < 1,620 ms | < 2,360 ms | < 2,760 ms |
write | < 1,510 ms | < 1,540 ms | < 1,550 ms | < 1,560 ms | < 1,580 ms | < 1,580 ms |
cleanup-delete | < 340 ms | < 340 ms | < 340 ms | < 370 ms | < 920 ms | < 1,020 ms |
dispose-delete | N/A | N/A | N/A | N/A | N/A | N/A |
となったので、次にアイルランドでも試してみる。
General Report
Op-Type | Op-Count | Byte-Count | Avg-ResTime | Throughput | Bandwidth | Succ-Ratio |
init-write | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
prepare-write | 20 ops | 1.28 MB | 1031.1 ms | 0.97 op/s | 62.07 KB/S | 100% |
read | 308 ops | 19.71 MB | 376.57 ms | 10.48 op/s | 670.73 KB/S | 100% |
write | 71 ops | 4.54 MB | 1686.62 ms | 2.4 op/s | 153.9 KB/S | 100% |
cleanup-delete | 40 ops | 0 B | 346.02 ms | 2.89 op/s | 0 B/S | 100% |
dispose-delete | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
ResTime (RT) Details
Op-Type | 60%-RT | 80%-RT | 90%-RT | 95%-RT | 99%-RT | 100%-RT |
init-write | N/A | N/A | N/A | N/A | N/A | N/A |
prepare-write | < 890 ms | < 900 ms | < 930 ms | < 2,390 ms | < 2,390 ms | < 2,470 ms |
read | < 310 ms | < 320 ms | < 330 ms | < 900 ms | < 1,690 ms | < 2,110 ms |
write | < 1,640 ms | < 2,430 ms | < 2,720 ms | < 3,060 ms | < 3,360 ms | < 3,400 ms |
cleanup-delete | < 300 ms | < 310 ms | < 310 ms | < 330 ms | < 1,360 ms | < 1,480 ms |
dispose-delete | N/A | N/A | N/A | N/A | N/A | N/A |
ついでに東京も。
ID: w6 Name: s3-tokyo Current State: finished
Submitted At: 2013/12/22 4:39:57 Started At: 2013/12/22 4:39:57 Stopped At: 2013/12/22 4:41:00
more info
Final Result
General Report
Op-Type | Op-Count | Byte-Count | Avg-ResTime | Throughput | Bandwidth | Succ-Ratio |
init-write | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
prepare-write | 20 ops | 1.28 MB | 88.95 ms | 11.22 op/s | 718.29 KB/S | 100% |
read | 2.83 kops | 181.06 MB | 53.83 ms | 94.52 op/s | 6.05 MB/S | 99.93% |
write | 702 ops | 44.93 MB | 122.86 ms | 23.45 op/s | 1.5 MB/S | 100% |
cleanup-delete | 40 ops | 0 B | 29.45 ms | 33.87 op/s | 0 B/S | 100% |
dispose-delete | 0 ops | 0 B | N/A | 0 op/s | 0 B/S | N/A |
ResTime (RT) Details
Op-Type | 60%-RT | 80%-RT | 90%-RT | 95%-RT | 99%-RT | 100%-RT |
init-write | N/A | N/A | N/A | N/A | N/A | N/A |
prepare-write | < 90 ms | < 100 ms | < 120 ms | < 130 ms | < 130 ms | < 130 ms |
read | < 50 ms | < 60 ms | < 70 ms | < 80 ms | < 250 ms | < 2,390 ms |
write | < 120 ms | < 140 ms | < 160 ms | < 190 ms | < 280 ms | < 1,140 ms |
cleanup-delete | < 30 ms | < 30 ms | < 40 ms | < 60 ms | < 80 ms | < 90 ms |
dispose-delete | N/A | N/A | N/A | N/A | N/A | N/A |
おわりに
「パフォーマンス計測」という意味で「ベンチマーク」という言葉が使われる事自体に違和感を感じるのは私だけでしょうか。ベンチマークは比較の対象があってはじめてベンチマークであるはずなのですが、巷では比較対象がなくてもその言葉が使われることが多いようです。
本記事では巷で使われる「ベンチマーク」のほうがキャッチーで、ググラビリティ高いためにこの言葉を使いました。