2013年12月22日日曜日

オブジェクトストレージのベンチマークツール、COSBench

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

展開した結果は

.
├── 3rd-party-licenses.pdf
├── BUILD.md
├── CHANGELOG
├── cli.sh
├── conf
│   ├── ampli-config-sample.xml
│   ├── controller.conf
│   ├── controller-tomcat-server.xml
│   ├── cosbench-users.xml
│   ├── driver-tomcat-server.xml
│   ├── filewriter-config-explanation.txt
│   ├── hashcheck.xml
│   ├── librados-config-sample.xml
│   ├── noop-config.xml
│   ├── noop-read-config.xml
│   ├── noop-write-config.xml
│   ├── reusedata.xml
│   ├── s3-config-sample.xml
│   ├── splitrw.xml
│   ├── sproxyd-config-sample.xml
│   ├── swift-config-sample.xml
│   └── workload-config.xml
├── COSBenchAdaptorDevGuide.pdf
├── cosbench-start.sh
├── cosbench-stop.sh
├── COSBenchUserGuide.pdf
├── ext
│   ├── adaptor
│   │   ├── abc-auth
│   │   │   ├── build.properties
│   │   │   ├── META-INF
│   │   │   │   ├── MANIFEST.MF
│   │   │   │   └── spring
│   │   │   │   └── plugin-context.xml
│   │   │   └── src
│   │   │   └── com
│   │   │   └── abc
│   │   │   ├── api
│   │   │   │   └── abcAuth
│   │   │   │   ├── AbcAuthFactory.java
│   │   │   │   └── AbcAuth.java
│   │   │   └── client
│   │   │   └── abcAuth
│   │   │   ├── AbcAuthClientException.java
│   │   │   ├── AbcAuthClient.java
│   │   │   └── AbcAuthConstants.java
│   │   └── abc-stor
│   │   ├── build.properties
│   │   ├── META-INF
│   │   │   ├── MANIFEST.MF
│   │   │   └── spring
│   │   │   └── plugin-context.xml
│   │   └── src
│   │   └── com
│   │   └── abc
│   │   ├── api
│   │   │   └── abcStor
│   │   │   ├── AbcStorageFactory.java
│   │   │   └── AbcStorage.java
│   │   └── client
│   │   └── abcStor
│   │   ├── AbcStorClientException.java
│   │   ├── AbcStorClient.java
│   │   └── AbcStorConstants.java
│   └── libs
│   ├── com.springsource.org.apache.commons.codec-1.3.0.jar
│   ├── org.apache.httpcomponents.httpclient_4.1.3.jar
│   └── org.apache.httpcomponents.httpcore_4.1.4.jar
├── javadoc
│   ├── allclasses-frame.html
│   ├── allclasses-noframe.html
│   ├── com
│   │   └── intel
│   │   └── cosbench
│   │   ├── api
│   │   │   ├── amplistor
│   │   │   │   ├── AmpliStorageFactory.html
│   │   │   │   ├── AmpliStorage.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AmpliStorageFactory.html
│   │   │   │   │   └── AmpliStorage.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── auth
│   │   │   │   ├── AuthAPIFactory.html
│   │   │   │   ├── AuthAPI.html
│   │   │   │   ├── AuthAPIService.html
│   │   │   │   ├── AuthException.html
│   │   │   │   ├── AuthInterruptedException.html
│   │   │   │   ├── AuthTimeoutException.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AuthAPIFactory.html
│   │   │   │   │   ├── AuthAPI.html
│   │   │   │   │   ├── AuthAPIService.html
│   │   │   │   │   ├── AuthException.html
│   │   │   │   │   ├── AuthInterruptedException.html
│   │   │   │   │   ├── AuthTimeoutException.html
│   │   │   │   │   └── NoneAuth.html
│   │   │   │   ├── NoneAuth.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── context
│   │   │   │   ├── AuthContext.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AuthContext.html
│   │   │   │   │   └── Context.html
│   │   │   │   ├── Context.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── keystone
│   │   │   │   ├── class-use
│   │   │   │   │   ├── KeystoneAuthFactory.html
│   │   │   │   │   └── KeystoneAuth.html
│   │   │   │   ├── KeystoneAuthFactory.html
│   │   │   │   ├── KeystoneAuth.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── mock
│   │   │   │   ├── class-use
│   │   │   │   │   ├── MockAuthFactory.html
│   │   │   │   │   └── MockStorageFactory.html
│   │   │   │   ├── MockAuthFactory.html
│   │   │   │   ├── MockStorageFactory.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── storage
│   │   │   │   ├── class-use
│   │   │   │   │   ├── NoneStorage.html
│   │   │   │   │   ├── StorageAPIFactory.html
│   │   │   │   │   ├── StorageAPI.html
│   │   │   │   │   ├── StorageAPIService.html
│   │   │   │   │   ├── StorageException.html
│   │   │   │   │   ├── StorageInterruptedException.html
│   │   │   │   │   └── StorageTimeoutException.html
│   │   │   │   ├── NoneStorage.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── StorageAPIFactory.html
│   │   │   │   ├── StorageAPI.html
│   │   │   │   ├── StorageAPIService.html
│   │   │   │   ├── StorageException.html
│   │   │   │   ├── StorageInterruptedException.html
│   │   │   │   └── StorageTimeoutException.html
│   │   │   ├── swauth
│   │   │   │   ├── class-use
│   │   │   │   │   ├── SwiftAuthFactory.html
│   │   │   │   │   └── SwiftAuth.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── SwiftAuthFactory.html
│   │   │   │   └── SwiftAuth.html
│   │   │   └── swift
│   │   │   ├── class-use
│   │   │   │   ├── SwiftStorageFactory.html
│   │   │   │   └── SwiftStorage.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── SwiftStorageFactory.html
│   │   │   └── SwiftStorage.html
│   │   ├── bench
│   │   │   ├── Aggregator.html
│   │   │   ├── Benchmark.html
│   │   │   ├── class-use
│   │   │   │   ├── Aggregator.html
│   │   │   │   ├── Benchmark.html
│   │   │   │   ├── Counter.html
│   │   │   │   ├── Histogram.html
│   │   │   │   ├── Mark.html
│   │   │   │   ├── Metrics.html
│   │   │   │   ├── Report.html
│   │   │   │   ├── ReportMerger.html
│   │   │   │   ├── Result.html
│   │   │   │   ├── Sample.html
│   │   │   │   ├── Snapshot.html
│   │   │   │   ├── SnapshotMerger.html
│   │   │   │   └── Status.html
│   │   │   ├── Counter.html
│   │   │   ├── Histogram.html
│   │   │   ├── Mark.html
│   │   │   ├── Metrics.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── Report.html
│   │   │   ├── ReportMerger.html
│   │   │   ├── Result.html
│   │   │   ├── Sample.html
│   │   │   ├── Snapshot.html
│   │   │   ├── SnapshotMerger.html
│   │   │   └── Status.html
│   │   ├── client
│   │   │   ├── amplistor
│   │   │   │   ├── AmpliClient.html
│   │   │   │   ├── AmpliConstants.html
│   │   │   │   ├── AmpliException.html
│   │   │   │   ├── AmpliNamespace.html
│   │   │   │   ├── AmpliNotFoundException.html
│   │   │   │   ├── AmpliObject.html
│   │   │   │   ├── AmpliPolicy.html
│   │   │   │   ├── AmpliUtils.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AmpliClient.html
│   │   │   │   │   ├── AmpliConstants.html
│   │   │   │   │   ├── AmpliException.html
│   │   │   │   │   ├── AmpliNamespace.html
│   │   │   │   │   ├── AmpliNotFoundException.html
│   │   │   │   │   ├── AmpliObject.html
│   │   │   │   │   ├── AmpliPolicy.html
│   │   │   │   │   └── AmpliUtils.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── http
│   │   │   │   ├── class-use
│   │   │   │   │   ├── HttpClientException.html
│   │   │   │   │   └── HttpClientUtil.html
│   │   │   │   ├── HttpClientException.html
│   │   │   │   ├── HttpClientUtil.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── keystone
│   │   │   │   ├── class-use
│   │   │   │   │   ├── KeystoneAuthException.html
│   │   │   │   │   ├── KeystoneClientException.html
│   │   │   │   │   ├── KeystoneClient.html
│   │   │   │   │   ├── KeystoneConstants.html
│   │   │   │   │   ├── KeystoneInterruptedException.html
│   │   │   │   │   ├── KeystoneMapper.html
│   │   │   │   │   ├── KeystoneRequest.AuthInfo.Credentials.html
│   │   │   │   │   ├── KeystoneRequest.AuthInfo.html
│   │   │   │   │   ├── KeystoneRequest.AuthInfo.Token.html
│   │   │   │   │   ├── KeystoneRequest.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.ServiceInfo.Endpoint.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.ServiceInfo.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.Token.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.Token.Tenant.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.User.html
│   │   │   │   │   ├── KeystoneResponse.AccessInfo.User.Role.html
│   │   │   │   │   ├── KeystoneResponseException.html
│   │   │   │   │   ├── KeystoneResponse.html
│   │   │   │   │   ├── KeystoneServerException.html
│   │   │   │   │   └── KeystoneTimeoutException.html
│   │   │   │   ├── handler
│   │   │   │   │   ├── AuthHandler.html
│   │   │   │   │   ├── class-use
│   │   │   │   │   │   ├── AuthHandler.html
│   │   │   │   │   │   └── HttpAuthHandler.html
│   │   │   │   │   ├── HttpAuthHandler.html
│   │   │   │   │   ├── package-frame.html
│   │   │   │   │   ├── package-summary.html
│   │   │   │   │   ├── package-tree.html
│   │   │   │   │   └── package-use.html
│   │   │   │   ├── KeystoneAuthException.html
│   │   │   │   ├── KeystoneClientException.html
│   │   │   │   ├── KeystoneClient.html
│   │   │   │   ├── KeystoneConstants.html
│   │   │   │   ├── KeystoneInterruptedException.html
│   │   │   │   ├── KeystoneMapper.html
│   │   │   │   ├── KeystoneRequest.AuthInfo.Credentials.html
│   │   │   │   ├── KeystoneRequest.AuthInfo.html
│   │   │   │   ├── KeystoneRequest.AuthInfo.Token.html
│   │   │   │   ├── KeystoneRequest.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.ServiceInfo.Endpoint.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.ServiceInfo.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.Token.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.Token.Tenant.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.User.html
│   │   │   │   ├── KeystoneResponse.AccessInfo.User.Role.html
│   │   │   │   ├── KeystoneResponseException.html
│   │   │   │   ├── KeystoneResponse.html
│   │   │   │   ├── KeystoneServerException.html
│   │   │   │   ├── KeystoneTimeoutException.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── swauth
│   │   │   │   ├── class-use
│   │   │   │   │   ├── SwiftAuthClientException.html
│   │   │   │   │   ├── SwiftAuthClient.html
│   │   │   │   │   └── SwiftAuthConstants.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── SwiftAuthClientException.html
│   │   │   │   ├── SwiftAuthClient.html
│   │   │   │   └── SwiftAuthConstants.html
│   │   │   └── swift
│   │   │   ├── class-use
│   │   │   │   ├── SwiftAccount.html
│   │   │   │   ├── SwiftClient.html
│   │   │   │   ├── SwiftConflictException.html
│   │   │   │   ├── SwiftConstants.html
│   │   │   │   ├── SwiftContainer.html
│   │   │   │   ├── SwiftException.html
│   │   │   │   ├── SwiftFileNotFoundException.html
│   │   │   │   └── SwiftResponse.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── SwiftAccount.html
│   │   │   ├── SwiftClient.html
│   │   │   ├── SwiftConflictException.html
│   │   │   ├── SwiftConstants.html
│   │   │   ├── SwiftContainer.html
│   │   │   ├── SwiftException.html
│   │   │   ├── SwiftFileNotFoundException.html
│   │   │   └── SwiftResponse.html
│   │   ├── config
│   │   │   ├── Auth.html
│   │   │   ├── castor
│   │   │   │   ├── CastorConfigTools.html
│   │   │   │   ├── class-use
│   │   │   │   │   └── CastorConfigTools.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── class-use
│   │   │   │   ├── Auth.html
│   │   │   │   ├── ConfigException.html
│   │   │   │   ├── Config.html
│   │   │   │   ├── Mission.html
│   │   │   │   ├── MissionResolver.html
│   │   │   │   ├── MissionWriter.html
│   │   │   │   ├── Operation.html
│   │   │   │   ├── Stage.html
│   │   │   │   ├── Storage.html
│   │   │   │   ├── Workflow.html
│   │   │   │   ├── Work.html
│   │   │   │   ├── Workload.html
│   │   │   │   ├── WorkloadResolver.html
│   │   │   │   ├── WorkloadWriter.html
│   │   │   │   └── XmlConfig.html
│   │   │   ├── common
│   │   │   │   ├── class-use
│   │   │   │   │   ├── INIConfigParser.html
│   │   │   │   │   └── KVConfigParser.html
│   │   │   │   ├── INIConfigParser.html
│   │   │   │   ├── KVConfigParser.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── ConfigException.html
│   │   │   ├── Config.html
│   │   │   ├── Mission.html
│   │   │   ├── MissionResolver.html
│   │   │   ├── MissionWriter.html
│   │   │   ├── Operation.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── Stage.html
│   │   │   ├── Storage.html
│   │   │   ├── Workflow.html
│   │   │   ├── Work.html
│   │   │   ├── Workload.html
│   │   │   ├── WorkloadResolver.html
│   │   │   ├── WorkloadWriter.html
│   │   │   └── XmlConfig.html
│   │   ├── controller
│   │   │   ├── archiver
│   │   │   │   ├── class-use
│   │   │   │   │   ├── SimpleWorkloadArchiver.html
│   │   │   │   │   └── WorkloadArchiver.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── SimpleWorkloadArchiver.html
│   │   │   │   └── WorkloadArchiver.html
│   │   │   ├── handler
│   │   │   │   ├── CancelHandler.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── CancelHandler.html
│   │   │   │   │   ├── ConfigHandler.html
│   │   │   │   │   ├── IndexHandler.html
│   │   │   │   │   ├── SubmitHandler.html
│   │   │   │   │   └── WorkloadHandler.html
│   │   │   │   ├── ConfigHandler.html
│   │   │   │   ├── IndexHandler.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── SubmitHandler.html
│   │   │   │   └── WorkloadHandler.html
│   │   │   ├── model
│   │   │   │   ├── class-use
│   │   │   │   │   ├── ControllerContext.html
│   │   │   │   │   ├── DriverContext.html
│   │   │   │   │   ├── DriverRegistry.html
│   │   │   │   │   ├── SchedulePlan.html
│   │   │   │   │   ├── ScheduleRegistry.html
│   │   │   │   │   ├── SnapshotRegistry.html
│   │   │   │   │   ├── StageContext.html
│   │   │   │   │   ├── StageListener.html
│   │   │   │   │   ├── StageRegistry.html
│   │   │   │   │   ├── TaskContext.html
│   │   │   │   │   ├── TaskRegistry.html
│   │   │   │   │   ├── WorkloadContext.html
│   │   │   │   │   └── WorkloadListener.html
│   │   │   │   ├── ControllerContext.html
│   │   │   │   ├── DriverContext.html
│   │   │   │   ├── DriverRegistry.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── SchedulePlan.html
│   │   │   │   ├── ScheduleRegistry.html
│   │   │   │   ├── SnapshotRegistry.html
│   │   │   │   ├── StageContext.html
│   │   │   │   ├── StageListener.html
│   │   │   │   ├── StageRegistry.html
│   │   │   │   ├── TaskContext.html
│   │   │   │   ├── TaskRegistry.html
│   │   │   │   ├── WorkloadContext.html
│   │   │   │   └── WorkloadListener.html
│   │   │   ├── repository
│   │   │   │   ├── class-use
│   │   │   │   │   ├── RAMWorkloadRepository.html
│   │   │   │   │   └── WorkloadRepository.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── RAMWorkloadRepository.html
│   │   │   │   └── WorkloadRepository.html
│   │   │   ├── schedule
│   │   │   │   ├── class-use
│   │   │   │   │   ├── ScheduleException.html
│   │   │   │   │   ├── Schedulers.html
│   │   │   │   │   └── WorkScheduler.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── ScheduleException.html
│   │   │   │   ├── Schedulers.html
│   │   │   │   └── WorkScheduler.html
│   │   │   ├── service
│   │   │   │   ├── class-use
│   │   │   │   │   ├── COSBControllerServiceFactory.html
│   │   │   │   │   ├── StageCallable.html
│   │   │   │   │   └── StageChecker.html
│   │   │   │   ├── COSBControllerServiceFactory.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── StageCallable.html
│   │   │   │   └── StageChecker.html
│   │   │   ├── tasklet
│   │   │   │   ├── class-use
│   │   │   │   │   ├── Tasklet.html
│   │   │   │   │   └── Tasklets.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── Tasklet.html
│   │   │   │   └── Tasklets.html
│   │   │   └── web
│   │   │   ├── CancelWorkloadController.html
│   │   │   ├── class-use
│   │   │   │   ├── CancelWorkloadController.html
│   │   │   │   ├── ConfigPageController.html
│   │   │   │   ├── DownloadConfigController.html
│   │   │   │   ├── DownloadLogController.html
│   │   │   │   ├── IndexPageController.html
│   │   │   │   ├── MatrixPageController.html
│   │   │   │   ├── StagePageController.html
│   │   │   │   ├── SubmitPageController.html
│   │   │   │   ├── TimelineCSVController.html
│   │   │   │   ├── TimelinePageController.html
│   │   │   │   ├── WorkloadConfigurationController.html
│   │   │   │   ├── WorkloadPageController.html
│   │   │   │   └── WorkloadSubmissionController.html
│   │   │   ├── ConfigPageController.html
│   │   │   ├── DownloadConfigController.html
│   │   │   ├── DownloadLogController.html
│   │   │   ├── IndexPageController.html
│   │   │   ├── MatrixPageController.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── StagePageController.html
│   │   │   ├── SubmitPageController.html
│   │   │   ├── TimelineCSVController.html
│   │   │   ├── TimelinePageController.html
│   │   │   ├── WorkloadConfigurationController.html
│   │   │   ├── WorkloadPageController.html
│   │   │   └── WorkloadSubmissionController.html
│   │   ├── driver
│   │   │   ├── agent
│   │   │   │   ├── AgentException.html
│   │   │   │   ├── Agent.html
│   │   │   │   ├── Agents.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AgentException.html
│   │   │   │   │   ├── Agent.html
│   │   │   │   │   └── Agents.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── handler
│   │   │   │   ├── AbortHandler.html
│   │   │   │   ├── class-use
│   │   │   │   │   ├── AbortHandler.html
│   │   │   │   │   ├── CloseHandler.html
│   │   │   │   │   ├── LaunchHandler.html
│   │   │   │   │   ├── PingHandler.html
│   │   │   │   │   ├── QueryHandler.html
│   │   │   │   │   └── SubmitHandler.html
│   │   │   │   ├── CloseHandler.html
│   │   │   │   ├── LaunchHandler.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── PingHandler.html
│   │   │   │   ├── QueryHandler.html
│   │   │   │   └── SubmitHandler.html
│   │   │   ├── iterator
│   │   │   │   ├── class-use
│   │   │   │   │   ├── Iterators.html
│   │   │   │   │   └── NameIterator.html
│   │   │   │   ├── Iterators.html
│   │   │   │   ├── NameIterator.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── model
│   │   │   │   ├── class-use
│   │   │   │   │   ├── DriverContext.html
│   │   │   │   │   ├── MissionContext.html
│   │   │   │   │   ├── MissionListener.html
│   │   │   │   │   ├── OperatorContext.html
│   │   │   │   │   ├── OperatorRegistry.html
│   │   │   │   │   ├── WorkerContext.html
│   │   │   │   │   └── WorkerRegistry.html
│   │   │   │   ├── DriverContext.html
│   │   │   │   ├── MissionContext.html
│   │   │   │   ├── MissionListener.html
│   │   │   │   ├── OperatorContext.html
│   │   │   │   ├── OperatorRegistry.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── WorkerContext.html
│   │   │   │   └── WorkerRegistry.html
│   │   │   ├── operator
│   │   │   │   ├── class-use
│   │   │   │   │   ├── Disposer.html
│   │   │   │   │   ├── Initializer.html
│   │   │   │   │   ├── OperationListener.html
│   │   │   │   │   ├── Operator.html
│   │   │   │   │   ├── Operators.html
│   │   │   │   │   └── Session.html
│   │   │   │   ├── Disposer.html
│   │   │   │   ├── Initializer.html
│   │   │   │   ├── OperationListener.html
│   │   │   │   ├── Operator.html
│   │   │   │   ├── Operators.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   └── Session.html
│   │   │   ├── random
│   │   │   │   ├── class-use
│   │   │   │   │   ├── Generators.html
│   │   │   │   │   ├── NameGenerator.html
│   │   │   │   │   ├── RandomInputStream.html
│   │   │   │   │   ├── SizeGenerator.html
│   │   │   │   │   └── StreamUtils.html
│   │   │   │   ├── Generators.html
│   │   │   │   ├── NameGenerator.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   ├── RandomInputStream.html
│   │   │   │   ├── SizeGenerator.html
│   │   │   │   └── StreamUtils.html
│   │   │   ├── repository
│   │   │   │   ├── class-use
│   │   │   │   │   ├── MissionRepository.html
│   │   │   │   │   └── RAMMissionRepository.html
│   │   │   │   ├── MissionRepository.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   └── RAMMissionRepository.html
│   │   │   ├── service
│   │   │   │   ├── class-use
│   │   │   │   │   ├── COSBAuthAPIService.html
│   │   │   │   │   ├── COSBDriverServiceFactory.html
│   │   │   │   │   ├── COSBStorageAPIService.html
│   │   │   │   │   └── MissionException.html
│   │   │   │   ├── COSBAuthAPIService.html
│   │   │   │   ├── COSBDriverServiceFactory.html
│   │   │   │   ├── COSBStorageAPIService.html
│   │   │   │   ├── MissionException.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── util
│   │   │   │   ├── class-use
│   │   │   │   │   ├── HashUtil.html
│   │   │   │   │   ├── ObjectPicker.html
│   │   │   │   │   ├── ObjectScanner.html
│   │   │   │   │   ├── OperationPicker.html
│   │   │   │   │   └── SizePicker.html
│   │   │   │   ├── HashUtil.html
│   │   │   │   ├── ObjectPicker.html
│   │   │   │   ├── ObjectScanner.html
│   │   │   │   ├── OperationPicker.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   ├── package-use.html
│   │   │   │   └── SizePicker.html
│   │   │   └── web
│   │   │   ├── AbortMissionController.html
│   │   │   ├── class-use
│   │   │   │   ├── AbortMissionController.html
│   │   │   │   ├── CloseMissionController.html
│   │   │   │   ├── IndexPageController.html
│   │   │   │   ├── LaunchMissionController.html
│   │   │   │   ├── MissionPageController.html
│   │   │   │   ├── MissionSubmissionController.html
│   │   │   │   ├── PerformLoginController.html
│   │   │   │   ├── SubmitPageController.html
│   │   │   │   └── WorkersPageController.html
│   │   │   ├── CloseMissionController.html
│   │   │   ├── IndexPageController.html
│   │   │   ├── LaunchMissionController.html
│   │   │   ├── MissionPageController.html
│   │   │   ├── MissionSubmissionController.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── PerformLoginController.html
│   │   │   ├── SubmitPageController.html
│   │   │   └── WorkersPageController.html
│   │   ├── exporter
│   │   │   ├── class-use
│   │   │   │   ├── Exporters.html
│   │   │   │   ├── ExportException.html
│   │   │   │   ├── LatencyExporter.html
│   │   │   │   ├── LogExporter.html
│   │   │   │   ├── MatrixExporter.html
│   │   │   │   ├── RunExporter.html
│   │   │   │   ├── StageExporter.html
│   │   │   │   └── WorkloadExporter.html
│   │   │   ├── Exporters.html
│   │   │   ├── ExportException.html
│   │   │   ├── LatencyExporter.html
│   │   │   ├── LogExporter.html
│   │   │   ├── MatrixExporter.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── RunExporter.html
│   │   │   ├── StageExporter.html
│   │   │   └── WorkloadExporter.html
│   │   ├── log
│   │   │   ├── class-use
│   │   │   │   ├── LogFactory.html
│   │   │   │   ├── Logger.html
│   │   │   │   ├── LogLevel.html
│   │   │   │   └── LogManager.html
│   │   │   ├── log4j
│   │   │   │   ├── class-use
│   │   │   │   │   ├── Log4jLogger.html
│   │   │   │   │   ├── Log4jLogManager.html
│   │   │   │   │   └── Log4jUtils.html
│   │   │   │   ├── Log4jLogger.html
│   │   │   │   ├── Log4jLogManager.html
│   │   │   │   ├── Log4jUtils.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── LogFactory.html
│   │   │   ├── Logger.html
│   │   │   ├── LogLevel.html
│   │   │   ├── LogManager.html
│   │   │   ├── osgi
│   │   │   │   ├── Activator.html
│   │   │   │   ├── class-use
│   │   │   │   │   └── Activator.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   └── package-use.html
│   │   ├── model
│   │   │   ├── class-use
│   │   │   │   ├── ControllerInfo.html
│   │   │   │   ├── DriverInfo.html
│   │   │   │   ├── LifeCycle.html
│   │   │   │   ├── MissionInfo.html
│   │   │   │   ├── MissionState.html
│   │   │   │   ├── ScheduleInfo.html
│   │   │   │   ├── StageInfo.html
│   │   │   │   ├── StageState.html
│   │   │   │   ├── StateInfo.html
│   │   │   │   ├── StateRegistry.html
│   │   │   │   ├── TaskInfo.html
│   │   │   │   ├── TaskState.html
│   │   │   │   ├── WorkerInfo.html
│   │   │   │   ├── WorkloadInfo.html
│   │   │   │   └── WorkloadState.html
│   │   │   ├── ControllerInfo.html
│   │   │   ├── DriverInfo.html
│   │   │   ├── LifeCycle.html
│   │   │   ├── MissionInfo.html
│   │   │   ├── MissionState.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── ScheduleInfo.html
│   │   │   ├── StageInfo.html
│   │   │   ├── StageState.html
│   │   │   ├── StateInfo.html
│   │   │   ├── StateRegistry.html
│   │   │   ├── TaskInfo.html
│   │   │   ├── TaskState.html
│   │   │   ├── WorkerInfo.html
│   │   │   ├── WorkloadInfo.html
│   │   │   └── WorkloadState.html
│   │   ├── protocol
│   │   │   ├── AbortResponse.html
│   │   │   ├── class-use
│   │   │   │   ├── AbortResponse.html
│   │   │   │   ├── CloseResponse.html
│   │   │   │   ├── LaunchResponse.html
│   │   │   │   ├── LoginResponse.html
│   │   │   │   ├── PingResponse.html
│   │   │   │   ├── QueryResponse.html
│   │   │   │   ├── Response.html
│   │   │   │   └── SubmitResponse.html
│   │   │   ├── CloseResponse.html
│   │   │   ├── LaunchResponse.html
│   │   │   ├── LoginResponse.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── PingResponse.html
│   │   │   ├── QueryResponse.html
│   │   │   ├── Response.html
│   │   │   └── SubmitResponse.html
│   │   ├── service
│   │   │   ├── AbortedException.html
│   │   │   ├── AbstractServiceFactory.html
│   │   │   ├── CancelledException.html
│   │   │   ├── class-use
│   │   │   │   ├── AbortedException.html
│   │   │   │   ├── AbstractServiceFactory.html
│   │   │   │   ├── CancelledException.html
│   │   │   │   ├── ControllerServiceFactory.html
│   │   │   │   ├── ControllerService.html
│   │   │   │   ├── DriverServiceFactory.html
│   │   │   │   ├── DriverService.html
│   │   │   │   ├── IllegalStateException.html
│   │   │   │   └── UnexpectedException.html
│   │   │   ├── ControllerServiceFactory.html
│   │   │   ├── ControllerService.html
│   │   │   ├── DriverServiceFactory.html
│   │   │   ├── DriverService.html
│   │   │   ├── IllegalStateException.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   └── UnexpectedException.html
│   │   ├── tomcat
│   │   │   ├── class-use
│   │   │   │   ├── TomcatLoader.html
│   │   │   │   └── TomcatRegister.html
│   │   │   ├── osgi
│   │   │   │   ├── Activator.html
│   │   │   │   ├── class-use
│   │   │   │   │   └── Activator.html
│   │   │   │   ├── package-frame.html
│   │   │   │   ├── package-summary.html
│   │   │   │   ├── package-tree.html
│   │   │   │   └── package-use.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   ├── package-use.html
│   │   │   ├── TomcatLoader.html
│   │   │   └── TomcatRegister.html
│   │   ├── utils
│   │   │   ├── class-use
│   │   │   │   ├── ListRegistry.html
│   │   │   │   ├── MapRegistry.html
│   │   │   │   └── MapRegistry.Item.html
│   │   │   ├── ListRegistry.html
│   │   │   ├── MapRegistry.html
│   │   │   ├── MapRegistry.Item.html
│   │   │   ├── package-frame.html
│   │   │   ├── package-summary.html
│   │   │   ├── package-tree.html
│   │   │   └── package-use.html
│   │   └── web
│   │   ├── AbstractController.html
│   │   ├── BadRequestException.html
│   │   ├── class-use
│   │   │   ├── AbstractController.html
│   │   │   ├── BadRequestException.html
│   │   │   └── NotFoundException.html
│   │   ├── NotFoundException.html
│   │   ├── package-frame.html
│   │   ├── package-summary.html
│   │   ├── package-tree.html
│   │   └── package-use.html
│   ├── constant-values.html
│   ├── deprecated-list.html
│   ├── help-doc.html
│   ├── index-files
│   │   ├── index-10.html
│   │   ├── index-11.html
│   │   ├── index-12.html
│   │   ├── index-13.html
│   │   ├── index-14.html
│   │   ├── index-15.html
│   │   ├── index-16.html
│   │   ├── index-17.html
│   │   ├── index-18.html
│   │   ├── index-19.html
│   │   ├── index-1.html
│   │   ├── index-20.html
│   │   ├── index-21.html
│   │   ├── index-22.html
│   │   ├── index-23.html
│   │   ├── index-2.html
│   │   ├── index-3.html
│   │   ├── index-4.html
│   │   ├── index-5.html
│   │   ├── index-6.html
│   │   ├── index-7.html
│   │   ├── index-8.html
│   │   └── index-9.html
│   ├── index.html
│   ├── overview-frame.html
│   ├── overview-summary.html
│   ├── overview-tree.html
│   ├── package-list
│   ├── resources
│   │   ├── deployment.png
│   │   ├── inherit.gif
│   │   ├── matrix.png
│   │   ├── modules.png
│   │   ├── report.png
│   │   ├── snapshot.png
│   │   ├── submit.png
│   │   ├── timeline.png
│   │   └── web-console.png
│   ├── serialized-form.html
│   └── stylesheet.css
├── lib-src
│   ├── com.springsource.javax.activation-sources-1.1.1.jar
│   ├── com.springsource.javax.annotation-sources-1.0.0.jar
│   ├── com.springsource.javax.ejb-sources-3.0.0.jar
│   ├── com.springsource.javax.el-sources-1.0.0.jar
│   ├── com.springsource.javax.jms-sources-1.1.0.jar
│   ├── com.springsource.javax.mail-sources-1.4.1.jar
│   ├── com.springsource.javax.persistence-sources-1.99.0.jar
│   ├── com.springsource.javax.servlet.jsp-sources-2.1.0.jar
│   ├── com.springsource.javax.servlet-sources-2.5.0.jar
│   ├── com.springsource.javax.transaction-sources-1.1.0.jar
│   ├── com.springsource.javax.xml.bind-sources-2.2.0.jar
│   ├── com.springsource.javax.xml.soap-sources-1.3.0.jar
│   ├── com.springsource.javax.xml.stream-sources-1.0.1.jar
│   ├── com.springsource.javax.xml.ws-sources-2.1.1.jar
│   ├── org.eclipse.equinox.launcher.source_1.2.0.v20110502.jar
│   └── org.eclipse.osgi-sources-3.7.0.v20110613.jar
├── LICENSE
├── licenses
│   ├── AOP Alliance License (Public).txt
│   ├── Apache License 2.0 (AL).txt
│   ├── Castor License (AL).txt
│   ├── Common Development and Distribution License 1.01 (CDDL).txt
│   ├── Eclipse Public License 1.0 (EPL).txt
│   ├── Freemarker License (BSD).txt
│   ├── JDom License (BSD).txt
│   └── SLF4J License (MIT).txt
├── log
├── main
│   └── org.eclipse.equinox.launcher_1.2.0.v20110502.jar
├── NOTICE
├── osgi
│   ├── libs
│   │   ├── com.springsource.freemarker-2.3.15.jar
│   │   ├── com.springsource.javax.activation-1.1.1.jar
│   │   ├── com.springsource.javax.annotation-1.0.0.jar
│   │   ├── com.springsource.javax.ejb-3.0.0.jar
│   │   ├── com.springsource.javax.el-1.0.0.jar
│   │   ├── com.springsource.javax.jms-1.1.0.jar
│   │   ├── com.springsource.javax.mail-1.4.1.jar
│   │   ├── com.springsource.javax.persistence-1.99.0.jar
│   │   ├── com.springsource.javax.servlet-2.5.0.jar
│   │   ├── com.springsource.javax.servlet.jsp-2.1.0.jar
│   │   ├── com.springsource.javax.transaction-1.1.0.jar
│   │   ├── com.springsource.javax.xml.bind-2.2.0.jar
│   │   ├── com.springsource.javax.xml.rpc-1.1.0.jar
│   │   ├── com.springsource.javax.xml.soap-1.3.0.jar
│   │   ├── com.springsource.javax.xml.stream-1.0.1.jar
│   │   ├── com.springsource.javax.xml.ws-2.1.1.jar
│   │   ├── com.springsource.org.aopalliance-1.0.0.jar
│   │   ├── com.springsource.org.apache.catalina-6.0.16.jar
│   │   ├── com.springsource.org.apache.commons.beanutils-1.7.0.jar
│   │   ├── com.springsource.org.apache.commons.codec-1.3.0.jar
│   │   ├── com.springsource.org.apache.commons.collections-3.2.0.jar
│   │   ├── com.springsource.org.apache.commons.configuration-1.5.0.jar
│   │   ├── com.springsource.org.apache.commons.digester-1.8.0.jar
│   │   ├── com.springsource.org.apache.commons.fileupload-1.2.1.jar
│   │   ├── com.springsource.org.apache.commons.io-1.4.0.jar
│   │   ├── com.springsource.org.apache.commons.jxpath-1.2.0.jar
│   │   ├── com.springsource.org.apache.commons.lang-2.5.0.jar
│   │   ├── com.springsource.org.apache.coyote-6.0.16.jar
│   │   ├── com.springsource.org.apache.juli.extras-6.0.16.jar
│   │   ├── com.springsource.org.apache.log4j-1.2.15.jar
│   │   ├── com.springsource.org.apache.regexp-1.5.0.jar
│   │   ├── com.springsource.org.apache.xerces-2.8.1.jar
│   │   ├── com.springsource.org.apache.xmlcommons-1.3.3.jar
│   │   ├── com.springsource.org.apache.xml.resolver-1.2.0.jar
│   │   ├── com.springsource.org.castor-1.2.0.jar
│   │   ├── com.springsource.org.codehaus.jackson-1.4.2.jar
│   │   ├── com.springsource.org.codehaus.jackson.mapper-1.4.2.jar
│   │   ├── com.springsource.org.jdom-1.1.0.jar
│   │   ├── com.springsource.org.joda.time-1.6.0.jar
│   │   ├── com.springsource.slf4j.api-1.5.6.jar
│   │   ├── com.springsource.slf4j.log4j-1.5.6.jar
│   │   ├── com.springsource.slf4j.org.apache.commons.logging-1.5.6.jar
│   │   ├── org.apache.httpcomponents.httpclient_4.1.3.jar
│   │   ├── org.apache.httpcomponents.httpcore_4.1.4.jar
│   │   ├── org.springframework.aop-3.0.5.RELEASE.jar
│   │   ├── org.springframework.asm-3.0.5.RELEASE.jar
│   │   ├── org.springframework.beans-3.0.5.RELEASE.jar
│   │   ├── org.springframework.context-3.0.5.RELEASE.jar
│   │   ├── org.springframework.context.support-3.0.5.RELEASE.jar
│   │   ├── org.springframework.core-3.0.5.RELEASE.jar
│   │   ├── org.springframework.expression-3.0.5.RELEASE.jar
│   │   ├── org.springframework.web-3.0.5.RELEASE.jar
│   │   ├── org.springframework.web.servlet-3.0.5.RELEASE.jar
│   │   ├── spring-osgi-core-2.0.0.M1.jar
│   │   ├── spring-osgi-extender-2.0.0.M1.jar
│   │   ├── spring-osgi-io-2.0.0.M1.jar
│   │   ├── spring-osgi-web-2.0.0.M1.jar
│   │   └── spring-osgi-web-extender-2.0.0.M1.jar
│   ├── org.eclipse.osgi-3.7.0.v20110613.jar
│   └── plugins
│   ├── cosbench-ampli_0.3.3.0.jar
│   ├── cosbench-api_0.3.3.0.jar
│   ├── cosbench-castor_0.3.3.0.jar
│   ├── cosbench-config_0.3.3.0.jar
│   ├── cosbench-controller_0.3.3.0.jar
│   ├── cosbench-controller-web_0.3.3.0.jar
│   ├── cosbench-core_0.3.3.0.jar
│   ├── cosbench-core-web_0.3.3.0.jar
│   ├── cosbench-driver_0.3.3.0.jar
│   ├── cosbench-driver-web_0.3.3.0.jar
│   ├── cosbench-http_0.3.3.0.jar
│   ├── cosbench-keystone_0.3.3.0.jar
│   ├── cosbench-librados_0.3.3.0.jar
│   ├── cosbench-log_0.3.3.0.jar
│   ├── cosbench-log4j_0.3.3.0.jar
│   ├── cosbench-mock_0.3.3.0.jar
│   ├── cosbench-s3_0.3.3.0.jar
│   ├── cosbench-scality_0.3.3.0.jar
│   ├── cosbench-swauth_0.3.3.0.jar
│   ├── cosbench-swift_0.3.3.0.jar
│   └── cosbench-tomcat_0.3.3.0.jar
├── pkg.lst
├── README.md
├── start-all.bat
├── start-all.sh
├── start-controller.bat
├── start-controller.sh
├── start-driver.bat
├── start-driver.sh
├── stop-all.sh
├── stop-controller.sh
├── stop-driver.sh
├── TODO.md
├── VERSION
└── web.bat
135 directories, 897 files
view raw gistfile1.txt hosted with ❤ by GitHub

とりあえず動作確認

まずは、start-allをしてみます。
$ sh start-all.sh
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
.
Starting cosbench-log_0.3.3.0 [OK]
Starting cosbench-tomcat_0.3.3.0 [OK]
Starting cosbench-config_0.3.3.0 [OK]
Starting cosbench-http_0.3.3.0 [OK]
Starting cosbench-core_0.3.3.0 [OK]
Starting cosbench-core-web_0.3.3.0 [OK]
Starting cosbench-api_0.3.3.0 [OK]
Starting cosbench-mock_0.3.3.0 [OK]
Starting cosbench-ampli_0.3.3.0 [OK]
Starting cosbench-swift_0.3.3.0 [OK]
Starting cosbench-keystone_0.3.3.0 [OK]
Starting cosbench-s3_0.3.3.0 [OK]
Starting cosbench-librados_0.3.3.0 [OK]
Starting cosbench-scality_0.3.3.0 [OK]
Starting cosbench-driver_0.3.3.0 [OK]
Starting cosbench-driver-web_0.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 !!!
----------------------------------------------
======================================================
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench controller ...
.
Starting cosbench-log_0.3.3.0 [OK]
Starting cosbench-tomcat_0.3.3.0 [OK]
Starting cosbench-config_0.3.3.0 [OK]
Starting cosbench-core_0.3.3.0 [OK]
Starting cosbench-core-web_0.3.3.0 [OK]
Starting cosbench-controller_0.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 !!!
----------------------------------------------
view raw gistfile1.txt hosted with ❤ by GitHub

私の場合は、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とありますが、ここから負荷ルールファイルを登録します。

<?xml version="1.0" encoding="UTF-8" ?>
<workload name="s3-sample" description="sample benchmark for s3">
<storage type="s3" config="accesskey=************;secretkey=**********;endpoint=s3-us-west-2.amazonaws.com" />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="cprefix=*****-oregon;containers=r(1,2)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="cprefix=**********oregon;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="8" runtime="30">
<operation type="read" ratio="80" config="cprefix=**********oregon;containers=u(1,2);objects=u(1,10)" />
<operation type="write" ratio="20" config="cprefix=**********oregon;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" />
</work>
</workstage>
<workstage name="cleanup">
<work type="cleanup" workers="1" config="cprefix=**********oregon;containers=r(1,2);objects=r(1,20)" />
</workstage>
<workstage name="dispose">
<work type="dispose" workers="1" config="cprefix=**********oregon;containers=r(1,2)" />
</workstage>
</workflow>
</workload>
view raw gistfile1.xml hosted with ❤ by GitHub

これは、オレゴンのS3に対して、64KBのファイルを複数回、80%readでのテストしてみるときのルールです。cprefix= には該当のバケットを指定します。

あとは結果を待つ!

ルールを登録すると、すぐに測定が始まります。数分後には次のような結果をみることになるでしょう。

Final Result

General Report

Op-TypeOp-CountByte-CountAvg-ResTimeThroughputBandwidthSucc-Ratio
init-write0 ops0 BN/A0 op/s0 B/SN/A
prepare-write20 ops1.28 MB772.45 ms1.29 op/s82.76 KB/S100%
read177 ops11.33 MB1042.37 ms6.07 op/s388.55 KB/S100%
write41 ops2.62 MB1180.12 ms1.41 op/s90.2 KB/S100%
cleanup-delete40 ops0 B365.75 ms2.73 op/s0 B/S100%
dispose-delete0 ops0 BN/A0 op/s0 B/SN/A

ResTime (RT) Details

Op-Type60%-RT80%-RT90%-RT95%-RT99%-RT100%-RT
init-writeN/AN/AN/AN/AN/AN/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-deleteN/AN/AN/AN/AN/AN/A

 
となったので、次にアイルランドでも試してみる。

General Report

Op-TypeOp-CountByte-CountAvg-ResTimeThroughputBandwidthSucc-Ratio
init-write0 ops0 BN/A0 op/s0 B/SN/A
prepare-write20 ops1.28 MB1031.1 ms0.97 op/s62.07 KB/S100%
read308 ops19.71 MB376.57 ms10.48 op/s670.73 KB/S100%
write71 ops4.54 MB1686.62 ms2.4 op/s153.9 KB/S100%
cleanup-delete40 ops0 B346.02 ms2.89 op/s0 B/S100%
dispose-delete0 ops0 BN/A0 op/s0 B/SN/A

ResTime (RT) Details

Op-Type60%-RT80%-RT90%-RT95%-RT99%-RT100%-RT
init-writeN/AN/AN/AN/AN/AN/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-deleteN/AN/AN/AN/AN/AN/A

ついでに東京も。

ID: w6 Name: s3-tokyo Current Statefinished
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-TypeOp-CountByte-CountAvg-ResTimeThroughputBandwidthSucc-Ratio
init-write0 ops0 BN/A0 op/s0 B/SN/A
prepare-write20 ops1.28 MB88.95 ms11.22 op/s718.29 KB/S100%
read2.83 kops181.06 MB53.83 ms94.52 op/s6.05 MB/S99.93%
write702 ops44.93 MB122.86 ms23.45 op/s1.5 MB/S100%
cleanup-delete40 ops0 B29.45 ms33.87 op/s0 B/S100%
dispose-delete0 ops0 BN/A0 op/s0 B/SN/A

ResTime (RT) Details

Op-Type60%-RT80%-RT90%-RT95%-RT99%-RT100%-RT
init-writeN/AN/AN/AN/AN/AN/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-deleteN/AN/AN/AN/AN/AN/A

おわりに

「パフォーマンス計測」という意味で「ベンチマーク」という言葉が使われる事自体に違和感を感じるのは私だけでしょうか。ベンチマークは比較の対象があってはじめてベンチマークであるはずなのですが、巷では比較対象がなくてもその言葉が使われることが多いようです。

本記事では巷で使われる「ベンチマーク」のほうがキャッチーで、ググラビリティ高いためにこの言葉を使いました。

0 件のコメント:

コメントを投稿