# Vdbench
## 一、vdbench簡介
vdbench是一個 I/O 工作負載生成器,用於驗證數據完整性和度量直接附加和網絡連接的存儲的性能。它是一個免費的工具,容易使用,而且常常用於測試和基准測試。
可以使用vdbench測試磁盤和文件系統的讀寫性能。
**vdbench中常用的一些名詞解釋:**
- HD 主機定義
- SD 存儲定義
- WD 工作負載定義
- RD 運行定義
- FSD 文件系統存儲定義
- FWD 文件工作負載定義
## 二、vdbench的安裝和配置
### 1、linux下配置vdbench
(1)下載Vdbench
下載地址:http://www.oracle.com/technetwork/cn/server-storage/vdbench-downloads-1901681-zhs.html 下載之后解壓;多客戶端情況下解壓到相同路徑下
(2)然后安裝java(vdbench的運行依賴於java)
```
java -version
yum install jre
```
(3)進入vdbench相應目錄下./vdbench -t 來測試一下vdbench的可用性,如果正常,會在目錄下自動生成一個output目錄。
```
[root@localhost vdbench50407]# cd /vdbench50407/
[root@localhost vdbench50407]# ./vdbench -t
```
顯示如下信息:

### 2、Windows下配置vdbench
(1)解壓vdbench包(vdbench的linux版本的包和windows是同一個),解壓之后,下載32位的java,安裝java,配置windows上java的環境變量;(注意:目前vdbench在windows支持32位的java)
(2)打開dos窗口,切換到vdbench目錄,執行命令 vdbench -t來測試vdbench的可用性
```
PS C:\vdbench> .\vdbench -t
```

(3)多客戶端場景下,先在每個客戶端上執行.\vdbench rsh 開啟監控
## 三、vdbench的使用
vdbench運行依賴配置文件,vdbench通過讀取配置文件參數執行測試場景。
### **1、腳本的編寫**
這部分可以參考解壓后的example文件;也可以參考output目錄下的parmfile.html
```
[root@localhost vdbench50407]# cat example1
```

```
[root@localhost output]# cat parmfile.html
```

### **2、vdbench文件系統測試**
**對於一個文件系統,配置以下參數:**
(1)**HD**(Host Define):主機定義。與虛擬塊設備相同。
非必選項,單機運行時不需要配置HD參數,一般只有在多主機聯機測試時才需要配置
- hd= 標識主機定義的名稱,多主機運行時,可以使用hd1、hd2、hd3…區分 ,第一行為公共參數
- system= 主機IP地址或主機名
- vdbench= vdbench執行文件存放路徑,當多主機存放路徑不同時,可在hd定義時單獨指定
- user= slave和master通信使用用戶
- shell= 可選值為`rsh`、`ssh`或`vdbench`,默認值為`rsh`,多主機聯機測試時,mater和slave主機間通信方式 當參數值為`rsh`時,需要配置master和slave主機rsh互信,考慮到rsh使用明文傳輸,安全級別不夠,通常情況下不建議使用這種通信方式 當參數值為`ssh`時,需要配置master和slave主機ssh互信,通常Linux主機聯機時使用此通信方式 當參數值為`vdbench`,需要在所有slave主機運行`vdbench rsh`啟用vdbench本身的rsh守護進程,通常Window主機聯機時使用此通信方式
**(2)FSD**(File System Define):文件系統定義
- fsd= 標識文件系統定義的名稱,多文件系統時(`fsd1`、`fsd2`、`fsd3`…),可以指定`default`(將相同的參數作為所有fsd的默認值)
- anchor= 文件寫入根目錄
- width= 每層文件夾的子文件夾數
- depth= 創建目錄層級數(即目錄深度)
- files= 測試文件個數(vdbench測試過程中會生成多層級目錄結構,實際只有最后一層目錄會生成測試文件)
- sizes= (size,size,...) 每個測試文件大小
- distribution= 可選值為`bottom`或`all`,默認為`bottom` –當參數值為`bottom`時,程序只在最后一層目錄寫入測試文件 –當參數值為`all`時,程序在每一層目錄都寫入測試文件
- openflags= 用於打開一個文件系統 (Solaris) 的 flag_list,一般要加o_direct參數繞過緩存
- shared= 可選值為`yes`或`no`,默認值為`no`,一般只有在多主機聯機測試時指定 vdbench不允許不同的slave之間共享同一個目錄結構下的所有文件,因為這樣會帶來很大的開銷,但是它們允許共享同一個目錄結構。加入設置了shared=yes,那么不同的slave可以平分一個目錄下所有的文件來進行訪問,相當於每個slave有各自等分的訪問區域,因此不能測試多個客戶的對同一個文件的讀寫 –當多主機聯機測試時,寫入的根目錄`anchor`為同一個路徑時,需要指定參數值為`yes`
- 最后一層生成文件夾個數=`width`^`depth` 測試文件個數=(`width`^`depth`)*`files`
**(3)FWD**(FileSystem Workload Defile):文件系統工作負載定義
- fwd= 標識文件系統工作負載定義的名稱,多文件系統工作負載定義時,可以使用fwd1、fwd2、fwd3…區分
- fsd= 要使用的文件系統定義的 ID。
- host= 要用於此工作負載的主機的 ID。
- fileio= random 或 sequential,表示文件 I/O 將執行的方式。
- fileselect= random 或 sequential,標識選擇文件或目錄的方式。
- xfersizes= 數據傳輸(讀取和寫入操作)處理的數據大小。
- operation= mkdir、rmdir、create、delete、open、close、read、write、getattr 和 setattr。選擇要執行的單個文件操作。
- rdpct= 可選值為`0`~`100`,讀操作占比百分比,一般混合讀寫時需要指定,當值為60時,則混合讀寫比為6:4
- threads= 此工作負載的並發線程數量。每個線程需要至少 1 個文件。
**(4)RD**(Run Define):運行定義
- rd= 標識運行定義的名稱
- fwd= 要使用的文件系統工作負載定義的 ID,fwd*標識執行所有工作負載。
- fwdrate= 每秒執行的文件系統操作數量。設置為max,表示不做任何限制,按照最大強度自適應
- format= 可選值為`yes`、`no`或`restart`,標識預處理目錄和文件結構的方式
–yes表示刪除目錄和文件結構再重新創建
–no表示不刪除目錄和文件結構
–restart表示只創建未生成的目錄或文件,並且增大未達到實際大小的文件
- operations= 覆蓋 fwd 操作。選項相同。
- elapsed= 測試運行持續時間(單位為秒)
- interval= 結果輸出打印時間間隔(單位為秒)
### **3、運行腳本**
```
./vdbench -f example1 -o dir_name -jn
```
其中-jn是為了做數據校驗,-o為本次生成的結果所在目錄,會自動生成
```
./vdbench -f paracgf -o test1 -jn
```

### **4、輸出結果**
會回寫輸出一大堆東西,如果沒有出現錯誤,最后會出現:
```
Vdbench execution completed successfully. Output directory: /vdbench50407/output
```

每次運行后,vdbench 會創建一個dir_name文件夾 :

**(1)errorlog.html**——當為測試啟用了數據驗證(-jn)時,它可包含一些數據塊中的錯誤的相關信息:

- 無效的密鑰讀取
- 無效的 lba 讀取(一個扇區的邏輯字節地址)
- 無效的 SD 或 FSD 名稱讀取
- 數據損壞,即使在使用錯誤的 lba 或密鑰時
- 數據損壞
- 壞扇區
**(2)flatfile.html**——包含 vdbench 生成的一種逐列的 ASCII 格式的信息。
**(3)histogram.html**—— 僅適用於文件系統工作負載。響應時間直方圖,報告所有請求的FWD操作的響應時間詳細信息。
**(4)logfile.html**——包含 Java 代碼寫入控制台窗口的每行信息的副本。logfile.html 主要用於調試用途
**(5)parmfile.html**——顯示已包含用於測試的配置文件
**(6)sdN.histogram.html、sdN.html**——每個 N 存儲定義的柱狀圖和存儲定義 “N” 報告。
**(7)wdN.histogram.html、wdN.html**——每個 N 負載定義的柱狀圖和負載定義 “N” 報告。
**(8)hdN.histogram.html、hdN.html**——每個 N 主機定義的柱狀圖和主機定義 “N” 報告。
**(9)summary.html**——主要報告文件,顯示為在每個報告間隔的每次運行生成的總工作負載,以及除第一個間隔外的所有間隔的加權平均值。
- interval:報告間隔序號
- I/O rate:每秒觀察到的平均 I/O 速率
- MB sec:傳輸的數據的平均 MB 數
- bytes I/O:平均數據傳輸大小
- read pct:平均讀取百分比
- resp time:以讀/寫請求持續時間度量的平均響應時間。所有 vdbench 時間都以毫秒為單位。
- resp max:在此間隔中觀察到的最大響應時間。最后一行包含最大值總數。
- resp stddev:響應時間的標准偏差
- cpu% sys+usr:處理器繁忙 = 100(系統 + 用戶時間)(Solaris、Windows、Linux)
- cpu% sys:處理器利用率:系統時間
- window :start summary.html unix:firefox summary.html &
**(10)totals.html**——記錄全部數據計算之后的平均值,一般測試結果從該文件取值,除第一個間隔外所有間隔的加權平均值
(11)hdx-n.stdout.html——包含一個特定從屬服務器的日志信息
(12)parascan.html——包含當前正在分析的參數數據的運行軌跡。如果出現解析錯誤或參數錯誤,此文件將顯示正在解析的最新參數。
(13)skew.html——工作量偏差報告。
## 四、運行
### 1、單機
單機不需要添加HD,否則會有如下報錯:
```
Current system IP address is '127.0.0.1'. Invalid network definition for multi-host processing.
```
linux:
```
fsd=fsd1,anchor=/mnt/nfs,depth=1,width=2,files=10,size=100m,openflags=o_direct
fwd=fwd1,fsd=fsd1,host=localhost,operation=write,xfersize=1m,fileio=sequantial,fileselect=sequantial,threads=2
rd=rd1,fwd=fwd1,fwdrate=max,format=restart,elapsed=300,interval=1
```
windows
```
fsd=fsd1,anchor=E:\Sigle-FileSystem,depth=2,width=3,files=10,size=200M
fwd=fwd1,fsd=fsd1,operation=write,xfersize=1M,fileio=sequential,fileselect=rando
m,threads=2
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=30,interval=1
```
### 2、聯機
#### linux免密通信
10.0.20.232 node232
10.0.20.233 node233
10.0.20.234 node234
將每個節點IP和主機名的映射關系寫入到`/etc/hosts`配置文件內
```
echo '10.0.20.232 node232' >> /etc/hosts
echo '10.0.20.233 node233' >> /etc/hosts
echo '10.0.20.234 node234' >> /etc/hosts
```
主節點生成公鑰文件,並拷貝到其他從節點(配置主節點到從節點免秘鑰登錄)
```
ssh-keygen
ssh-copy-id node233
ssh-copy-id node234
```
#### windows建立通信
1、所有slave主機運行vdbench本身rsh守護進程
```
./vdbench rsh
```
此命令是用於windows系統多主機聯機跑vdbench時使用,因為windows操作系統不支持ssh,因此,vdbench提供了rsh的通信方式。在目標主機上執行此工具后,vdbench將會啟動一個java socket用於vdbench slave與master之間通信
2、master主機運行測試參數文件即可
```
三節點針對文件系統聯機測試,1M順序寫,目錄深度為1,每層目錄數為2,每個目錄文件數為2,每個文件大小為200M,測試時間為30s,報告間隔1s
PS C:\vdbench> more .\Multi-FileSystem.txt
hd=default,vdbench=C:\vdbench,user=Eli,shell=vdbench
hd=hd1,system=10.0.20.225
hd=hd2,system=10.0.20.221
fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=1,width=2,files=2,size=200M
fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=1,width=2,files=2,size=200M
fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=4
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd2,host=hd2
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=30,interval=1
```
```
vdbench -f "Multi-FileSystem.txt"
```
## 五、結果分析
當vdbench運行完負載測試后,會在安裝目錄下生成目標文件夾,里邊包含測試結果文件
### 1、輸出文件
**errorlog.html**
- 無效的密鑰讀取
- 無效的 lba 讀取(一個扇區的邏輯字節地址)
- 無效的 SD 或 FSD 名稱讀取
- 數據損壞
- 壞扇區
**flatfile.html**
vdbench 生成的一種逐列的 ASCII 格式的信息,可以使用`parseflat`參數解析結果
./vdbench parseflat -i <flatfile.html> -o output.csv [-c col1 col2 ..][-a] [-f col1 value1 col2 value2..]
-i input flatfile, e.g. output/flatfile.html
-o output CSV file name (default stdout)
-c which column to write to CSV. Columns are written in the order specified
-f filters: 'if (colX == valueX) ... ...' (Alphabetic compare)
-a include only the 'avg' data. Default: include only non-avg data.
-i是表示待分析的文件,這里寫vdbench輸出目錄里的flatfile.html這個文件,寫其它文件不能正常解析;
-o是解析后的輸出文件,可以手動指定存放目錄。文件格式為CSV,此文件的列由-c參數指定,列的順序為-c參數的順序
-a是表示csv文件中只記錄測試過程中的avg值,根據自己的需求格式導出
```
* Run : Name of run from RD=
* Interval : Reporting interval number
* Xfersize : data transfer size requested
* Threads : number of threads requested
* Reqrate : Requested FWD rate
* Rate : Requested operations per second
* Rate_std : Requested operations per second standard deviation
* Rate_max : Requested operations per second max
* Resp : Requested response time
* Resp_std : Requested response time standard deviation
* Resp_max : Requested response time max
* MB/sec : Megabytes per second (MB=1024*1024)
* MB_read : Megabytes read per second
* MB_write : Megabytes written per second
* Read_rate : Reads per second
* Read_rate_std : Reads per second stddev
* Read_rate_max : Reads per second max
* Read_resp : Read response time
* Read_resp_std : Read response time stddev
* Read_resp_max : Read response time max
* Write_rate : Writes per second
* Write_rate_std : Writes per second stddev
* Write_rate_max : Writes per second max
* Write_resp : Write response time
* Write_resp_std : Write response time stddev
* Write_resp_max : Write response time max
* Mkdir_rate : Mkdirs per second
* Mkdir_rate_std : Mkdirs per second stddev
* Mkdir_rate_max : Mkdirs per second max
* Mkdir_resp : Mkdir response time
* Mkdir_resp_std : Mkdir response time stddev
* Mkdir_resp_max : Mkdir response time max
* Rmdir_rate : Rmdirs per second
* Rmdir_rate_std : Rmdirs per second stddev
* Rmdir_rate_max : Rmdirs per second max
* Rmdir_resp : Rmdir response time
* Rmdir_resp_std : Rmdir response time stddev
* Rmdir_resp_max : Rmdir response time max
* Create_rate : Creates per second
* Create_rate_std : Creates per second stddev
* Create_rate_max : Creates per second max
* Create_resp : Create response time
* Create_resp_std : Create response time stddev
* Create_resp_max : Create response time max
* Open_rate : Opens per second
* Open_rate_std : Opens per second stddev
* Open_rate_max : Opens per second max
* Open_resp : Open response time
* Open_resp_std : Open response time stddev
* Open_resp_max : Open response time max
* Close_rate : Closes per second
* Close_rate_std : Closes per second stddev
* Close_rate_max : Closes per second max
* Close_resp : Close response time
* Close_resp_std : Close response time stddev
* Close_resp_max : Close response time max
* Delete_rate : Deletes per second
* Delete_rate_std : Deletes per second stddev
* Delete_rate_max : Deletes per second max
* Delete_resp : Delete response time
* Delete_resp_std : Delete response time stddev
* Delete_resp_max : Delete response time max
* Getattr_rate : Getattrs per second
* Getattr_rate_std: Getattrs per second stddev
* Getattr_rate_max: Getattrs per second max
* Getattr_resp : Getattr response time
* Getattr_resp_std: Getattr response time stddev
* Getattr_resp_max: Getattr response time max
* Setattr_rate : Setattrs per second
* Setattr_rate_std: Setattrs per second stddev
* Setattr_rate_max: Setattrs per second max
* Setattr_resp : Setattr response time
* Setattr_resp_std: Setattr response time stddev
* Setattr_resp_max: Setattr response time max
* Access_rate : Accesses per second
* Access_rate_std : Accesses per second stddev
* Access_rate_max : Accesses per second max
* Access_resp : Access response time
* Access_resp_std : Access response time stddev
* Access_resp_max : Access response time max
* Compratio : Requested compression ratio
* Dedupratio : Requested dedup ratio
* cpu_used : kstat: cpu% user+sys
* cpu_user : kstat: cpu% user
* cpu_kernel : kstat: cpu% sys
* cpu_wait : kstat: cpu% wait
* cpu_idle : kstat: cpu% idle
```
示例如下:
```
.\vdbench.bat parseflat -i .\Multi-FileSystem\flatfile.html -c run Interval Xfersize Threads Reqrate Rate Rate_std Rate_max Resp Resp_std Resp_max MB/sec MB_read MB_write Read_rate Read_rate_std Read_rate_max -o .\output.csv
vdbench parseflat arguments:
Argument 0: -i
Argument 1: .\Multi-FileSystem\flatfile.html
Argument 2: -c
Argument 3: run
Argument 4: Interval
Argument 5: Xfersize
Argument 6: Threads
Argument 7: Reqrate
Argument 8: Rate
Argument 9: Rate_std
Argument 10: Rate_max
Argument 11: Resp
Argument 12: Resp_std
Argument 13: Resp_max
Argument 14: MB/sec
Argument 15: MB_read
Argument 16: MB_write
Argument 17: Read_rate
Argument 18: Read_rate_std
Argument 19: Read_rate_max
Argument 20: -o
Argument 21: .\output.csv
17:37:42.271 ParseFlat completed successfully.
```

**histogram.html** 一種包含報告柱狀圖的響應時間、文本格式的文件
**logfile.html** 包含 Java 代碼寫入控制台窗口的每行信息的副本。logfile.html 主要用於調試用途
**parmfile.html** 包含測試運行配置參數信息
**summary.html** 記錄全部數據信息,顯示每個報告間隔內總體性能情況及工作負載情況,以及除第一個間隔外的所有間隔的加權平均值
**totals.html** 記錄全部數據計算之后的平均值,一般測試結果從該文件取值,除第一個間隔外所有間隔的加權平均值
### 2、結果分析
#### 2.1、文件系統
測試參數如下:hd=default,vdbench=C:\vdbench,user=Eli,shell=vdbench
```
hd=hd1,system=10.0.20.225
hd=hd2,system=10.0.20.221
fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=1,width=2,files=2,size=200M
fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=1,width=2,files=2,size=200M
fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=4
fwd=fwd1,fsd=fsd1,host=hd1car
fwd=fwd2,fsd=fsd2,host=hd2
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=30,interval=1
```
測試結果如下:

`totals.html`一般包括兩個部分,第一部分為文件存儲目錄結構及數據填充的平均性能值,第二部分為執行測試過程中除第一個時間間隔外所有時間間隔平均性能值,主要看第二部分的內容
- **Interval**
報告間隔序號,測試結果一般為除第一個時間間隔外所有時間間隔加權平均值
如elapsed=600,interval=5,則性能結果為第2個間隔到第120個間隔的平均值(avg_2-120)
- **ReqstdOps**
- **rate**
每秒讀寫I/O個數(**讀寫IOPS**),可以通過`rd`運行定義參數`fwdrate`控制
當`fwdrate`為`max`時,以最大I/O速率運行工作負載
當`fwdrate`為低於最大I/0速率的一個數值時,可以限制讀寫速度,以固定I/O速率運行工作負載
- **resp**
讀寫請求響應時間(**讀寫時延**),單位為`ms`
- **cpu%**
- **tatol**
總的cpu占用率
- **sys**
系統cpu占用率
- **read pct**
讀取請求占總請求數百分比占比,當為0時表示寫,當為100時表示讀
- **read**
- **rate**
每秒讀I/O個數(**讀IOPS**)
- **resp**
讀請求響應時間(**讀時延**),單位為`ms`
- **write**
- **rate**
每秒寫I/O個數(**寫IOPS**)
- **resp**
寫請求響應時間(**寫時延**),單位為`ms`
- **mb/sec**
- **read**
每秒讀取速度
- **write**
每秒寫入速度
- **total**
每秒讀寫速度總和
- **xfersize**
每個讀寫I/O傳輸數據量(即單個讀寫I/O大小),單位為字節`B`
## 六、測試說明
### 1、測試總結
1. 線程數(thread)一般設置為客戶端CPU線程數總大小 `grep 'processor' /proc/cpuinfo | sort -u | wc -l`
2. 測試總數據量需要為客戶端內存大小兩倍
3. 測試讀模型時需要清理客戶端緩存信息 `sync;echo 3 > /proc/sys/vm/drop`
### 2、常見測試參數
- **4M順序寫**
目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小4M、IO塊大小1M、順序寫
```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=4M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=write,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
```
**4M順序讀** 目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小4M、IO塊大小1M、順序讀
```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=4M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=read,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
```
**8M混合讀寫** 目錄深度2、單級目錄數100、單個目錄文件數100、單文件大小8M、IO塊大小1M、混合讀寫(讀寫比為6:4)
```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=8M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=random,fileselect=random,rdpct=60,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
```
## 七、Q&A
### 1、open failed for xxx
- **問題描述**
使用vdbench測試過程中,測試中斷,報錯信息如下:
error: 13
file_open(),open /client/vdb_f00006.file failed
Maximum native memory allocation: 131,072;Current allocation: 131,072
open failed for /client/vdb.2_32.dir/vdb_f00006.file
- **原因分析**
默認vdbench限制了java內存使用量,測試期間java運行內存不足才導致測試異常中斷。
- **處理措施**
修改vdbench運行腳本的java內存參數,最小內存為1G,最大內存為2G
```
[root@node40 vdbench50406]# cat vdbench
if [ "$1" == "SlaveJvm" ]; then
$java -client -Xmx2048m -Xms1024m -cp $cp Vdb.SlaveJvm $*
exit $?
else
$java -client -Xmx2048m -Xms1024m -cp $cp Vdb.Vdbmain $*
exit $?
fi
```