參考資料:
https://blog.csdn.net/QTM_Gitee/article/details/100067724
https://github.com/intel-cloud/cosbench/blob/master/COSBenchUserGuide.pdf
COSBench測Ceph對象存儲:那些網上找不到的細節html
cosbench - Cloud Object Storage Beachmark,是Intel開發的一個對象存儲基準性能測試工具,支持OpenStack* Swift
, Amazon* S3
, Amplidata v2.3, 2.5 and 3.1
, Scality*
, Ceph
, CDMI
, Google* Cloud Storage
, Aliyun OSS
對象存儲java
cosbench能夠聯機測試,主要有如下兩個關鍵組件:node
driver
cosbench負載生成器,主要負責工做負載生成,發佈針對雲對象存儲的操做和收集性能統計信息
能夠經過http://{driver-ip}:18088/driver
地址訪問linux
controller
cosbench控制器,主要負責協調負載生成器共同執行工做負載,收集來自負載生成器的基準性能測試結果
能夠經過http://{controller-ip}:19088/controller
地址訪問
注:controller和driver角色能夠部署在同一個節點上git
下載jre版本包,解壓縮至/opt
目錄下github
wget https://javadl.oracle.com/webapps/download/AutoDL?BundleId=242050_3d5a2bb8f8d4428bbe94aed7ec7ae784 -O jre-8u251-linux-x64.tar.gz tar -zxvf jre-8u251-linux-x64.tar.gz -C /opt/
配置jre環境變量web
echo "export JAVA_HOME=/opt/jre1.8.0_251/" >> /etc/profile echo "export CLASSPATH=/opt/jre1.8.0_251/lib" >> /etc/profile echo "export PATH=/opt/jre1.8.0_251/bin:$PATH" >> /etc/profile source /etc/profile
controller和driver之間通訊須要依賴nc環境算法
執行 yum install -y nmap-ncat
命令在線安裝ncat包swift
一般狀況下,系統默認已經安裝curl包
如系統未安裝,可經過yum install curl -y
命令在線安裝後端
官方提供的最新版本
v0.4.2
存在沒法啓動問題MESSAGE Bundle plugins/cosbench-log4j not found.
,具體詳見Github-Issues#383
爲規避此問題,此處選擇的是v0.4.2.c4
版本
wget https://github.com/intel-cloud/cosbench/releases/download/v0.4.2.c4/0.4.2.c4.zip unzip 0.4.2.c4.zip
使用過程當中須要關閉防火牆
或者開放指定端口
,經過如下任意一種方法都可以
關閉防火牆
執行systemctl stop firewalld
命令便可
開放指定端口
driver角色須要使用到18089
及18088
端口
controller角色須要使用到19089
及19088
端口
#開放driver角色服務端口 firewall-cmd --zone=public --add-port=18088/tcp --permanent firewall-cmd --zone=public --add-port=18089/tcp --permanent systemctl reload firewalld #開放controller角色服務端口 firewall-cmd --zone=public --add-port=19088/tcp --permanent firewall-cmd --zone=public --add-port=19089/tcp --permanent systemctl reload firewalld
參考Github-Issues#320,基於0.4.2.c4版本,讀文件測試過程當中會出現沒法驗證下載文件完整性錯誤(Unable to verify integrity of data download),致使讀取測試任務中斷(Terminate),故此處關閉S3的MD5校驗功能
修改全部節點0.4.2.c4/cosbench-start.sh
配置文件,在java後添加參數-Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true
[root@node241 0.4.2.c4]# cat cosbench-start.sh | grep java /usr/bin/nohup java -Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true -Dcosbench.tomcat.config=$TOMCAT_CONFIG -server -cp main/* org.eclipse.equinox.launcher.Main -configuration $OSGI_CONFIG -console $OSGI_CONSOLE_PORT 1> $BOOT_LOG 2>&1 &
cosbench工具使用按照流程可分爲如下幾個步驟:參數配置--服務啓動--提交測試--分析結果
示例使用三個節點聯機測試,配置示意以下:
節點主機名 | 節點IP地址 | cosbench角色 |
---|---|---|
node241 | 66.66.66.241 | controller、driver |
node242 | 66.66.66.242 | driver |
node243 | 66.66.66.243 | driver |
controller和driver依賴不一樣系統配置來啓動服務,在啓動controller和driver服務時,須要先行定義角色配置
controller在初始化時讀取conf/controller.conf
配置文件啓動控制器服務
[root@node241 0.4.2.c4]# cat conf/controller.conf [controller] concurrency=1 drivers=3 log_level=INFO log_file=log/system.log archive_dir=archive [driver1] name=driver1 url=http://66.66.66.241:18088/driver [driver2] name=driver2 url=http://66.66.66.242:18088/driver [driver3] name=driver3 url=http://66.66.66.243:18088/driver
[controller]
1
,表示能夠同時執行的工做負載數量1
,表示此controller
控制的driver
數量INFO
,可選值爲TRACE
、DEBUG
、INFO
、WARN
、ERROR
,表示日誌打印等級log/system.log
,表示日誌文件存放位置archive
,表示工做負載結果存放位置,當參數值爲archive
,則工做負載結果存放於0.4.2/archive
目錄內[driverx]
當有多個driver時,第{n}個driver命名爲[driver{n}]
driver在初始化時讀取conf/driver.conf
配置文件啓動負載器服務
[root@node241 0.4.2.c4]# cat conf/driver.conf [driver] name=127.0.0.1:18088 url=http://127.0.0.1:18088/driver
在controller角色節點執行如下命令啓動controller
[root@node241 0.4.2.c4]# sh start-controller.sh #檢查controller服務啓動狀況 [root@node241 0.4.2.c4]# lsof -i:19088 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 30012 root 88u IPv6 184509 0t0 TCP *:19088 (LISTEN) [root@node241 0.4.2.c4]# ps -aux | grep 30012 root 30012 0.6 4.2 4585852 165528 pts/0 Sl 15:51 0:06 java -Dcosbench.tomcat.config=conf/controller-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.controller -console 19089
注:若節點須要同時啓動controller和driver角色,也可使用sh start-all.sh
命令啓動(start-all.sh
=start-driver.sh
+start-controller.sh
)
在全部driver角色節點執行如下命令啓動driver
[root@node242 0.4.2.c4]# sh start-driver.sh #檢查driver服務啓動狀況 [root@node242 0.4.2.c4]# lsof -i:18088 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 23102 root 100u IPv6 161668 0t0 TCP *:18088 (LISTEN) [root@node242 0.4.2.c4]# ps -aux | grep 23102 root 23102 0.2 5.2 4597000 203344 pts/0 Sl 15:12 0:07 java -Dcosbench.tomcat.config=conf/driver-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.driver -console 18089
可使用如下兩種方法提交測試(示例測試參數文件爲config.xml)
sh cli.sh submit {test.xml}
命令提交測試[root@node241 0.4.2.c4]# sh cli.sh submit conf/config.xml
http://{controller-ip}:19088/controller
,點擊submit new workloads
url,提交測試文件便可使用命令行接口
在controller節點cosbench目錄下,使用sh cli.sh info
命令查看當前運行任務
使用web控制檯
web訪問控制檯地址http://{controller-ip}:19088/controller
,點擊對應任務view details
url,查看當前運行狀態及結果
在測試參數文件中,auth
、storage
、storage
、work
定義中支持config
屬性配置,該屬性包含一個可選的參數列表(使用鍵值對格式表示,如"a=a_val;b=b_val")
表達式 | 格式 | 註釋 |
---|---|---|
constant | c(number) | 僅使用指定數字 通常在經常使用於對象大小定義,如 sizes=c(512)KB ,則表示對象大小爲512KB |
uniform | u(min, max) | 從(min,max)中均勻選擇 u(1,100)表示從1到100中均勻地選取一個數字,選擇是隨機的,有些數字可能被選中屢次,有些數字永遠不會被選中 |
range | r(min,max) | 從(min,max)遞增選擇 r(1,100)表示從1到100遞增地選取一個數字(每一個數字只被選中一次),這一般被用於特殊work(init、prepare、cleanup、dispose) |
sequential | s(min,max) | 從(min,max)遞增選擇 s(1,100)表示從1到100遞增地選取一個數字(每一個數字只被選中一次),這一般被用於常規work |
histogram | h(min1|max1|weight1,…) | 它提供了一個加權直方圖生成器,要配置它,須要指定一個逗號分隔的桶列表,其中每一個桶由一個範圍和一個整數權重定義。例如: h(1|64|10,64|512|20,512|2048|30)KB 其中定義了一個配置文件,其中(1,64)KB被加權爲10,(64,512)KB被加權爲20,(512,2048)KB被加權爲30.權重之和不必定是100 |
注:通常經常使用的選擇器一般爲c(number)、u(min,max)、s(min,max)
基於元素類型和工做類型的選擇器有額外的約束,下面兩個表列出了容許的組合
Key | constant (c(num)) | uniform (u(min,max)) | range (r(min,max)) | sequential (s(min,max)) | histogram(h(min|max|ratio)) |
---|---|---|---|---|---|
containers | ✔ | ✔ | ✔ | ✔ | |
objects | ✔ | ✔ | ✔ | ✔ | |
sizes | ✔ | ✔ | ✔ | ✔ |
Key | init | prepare | normal (read) | normal (write) | normal (delete) | cleanup | dispose |
---|---|---|---|---|---|---|---|
containers | r(), s() | r(), s() | c(), u(), r(), s() | c(), u(), r(), s() | c(), u(), r(), s() | r(), s() | r(), s() |
objects | r(), s() | c(), u(), r(), s() | c(), u(), r() | c(), u(), r(), s() | r(), s() | ||
sizes | c(), u(), h() | c(), u(), h() |
本小節主要介紹工做負載參數定義,一般爲標籤對目錄結構的xml文件,目錄結構示意以下:
<workload> <auth /> #可選項 <storage /> <workflow> <workstage> <auth /> #可選項 <storage /> #可選項 <work /> <auth /> #可選項 <storage /> #可選項 <operation /> </workstage> </workflow> </workload>
相關說明:
workload
-workstage
-work
-operation
<?xml version="1.0" encoding="UTF-8" ?> <workload name="s3-sample" description="sample benchmark for s3"> <storage type="s3" config="accesskey=<accesskey>;secretkey=<scretkey>;proxyhost=<proxyhost>;proxyport=<proxyport>;endpoint=<endpoint>" /> <workflow> <workstage name="init"> <work type="init" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" /> </workstage> <workstage name="prepare"> <work type="prepare" workers="1" config="cprefix=s3testqwer;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=s3testqwer;containers=u(1,2);objects=u(1,10)" /> <operation type="write" ratio="20" config="cprefix=s3testqwer;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,20)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" /> </workstage> </workflow> </workload>
<?xml version="1.0" encoding="UTF-8" ?> <workload name="s3-sample" description="sample benchmark for s3"> </workload>
cosbench認證機制有none
、mock
、swauth
、keystone
、httpauth
<auth type="none" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
logging | 布爾型 | false | 將信息打印到日誌 |
retry | 整型 | 0 | 指定認證失敗時的重試次數 |
Caching | 布爾型 | false | 是否緩存認證信息 |
參數 | 類型 | 默認值 | 註釋 |
--- | --- | --- | --- |
type | 字符串 | 「cdmi」 | 選項:「cdmi」或「non-cdmi」,它表示要使用的內容類型,「cdmi」表示存儲訪問將遵循cdmi內容類型,「non-cdmi」表示存儲訪問將遵循非cdmi內容類型. |
Customer_headers | 字符串 | 這是一個實驗參數,用於查看是否可能支持cdmi衍生物,這可能須要額外的標頭。 能夠在不通知的狀況下移除該參數。 |
<auth type="mock" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
token | 字符串 | 「token」 | Token字符串 |
delay | 長整型 | 20 | 延遲時間(以毫秒爲單位) |
retry | 整型 | 0 | 指定認證失敗時的重試次數 |
<auth type="swauth" config="username={username};password={password};url=http://{controller-ip}:8080/auth/v1.0 />"
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
url | 字符串 | http:/{controller-ip}:8080/auth/v1.0 | auth節點的URL,通常爲controller節點 |
username | 字符串 | 用於認證的用戶名,語法account:user | |
password | 字符串 | 用於認證的密碼 | |
timeout | 整型 | 30,000 | 鏈接超時值(以毫秒爲單位) |
retry | 整型 | 0 | 指定認證失敗時的重試次數 |
<auth type="keystone" config="username={username};password={password};tenant_name={tenant_name};url=http://{controller-ip}:8080/v2.0;service=swift"/>
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
url | 字符串 | http://{controller-ip}:8080/auth/v2.0 | auth節點的URL |
username | 字符串 | 用於認證的用戶名。 語法account:user | |
password | 字符串 | 用於認證的密碼 | |
tenant_name | 字符串 | 用戶所屬的租戶名稱 | |
service | 字符串 | swift | 請求的服務 |
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
retry | 整型 | 0 | 指定認證失敗時的重試次數 |
<auth type="httpauth" config="username={username};password={password};auth_url=http://{controller-ip}:8080/" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
auth_url | 字符串 | http://{controller-ip}:8080/ | auth節點的URL |
username | 字符串 | 用於認證的用戶名。 | |
password | 字符串 | 用於認證的密碼 | |
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
retry | 整型 | 0 | 指定認證失敗時的重試次數 |
<storage type="none" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
logging | 布爾型 | false | 將信息打印到日誌 |
<storage type="mock" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
logging | 布爾型 | false | 將信息打印到日誌 |
size | 整型 | 1024 | 對象大小(字節) |
delay | 整型 | 10 | 延遲時間(毫秒) |
errors | 整型 | 0 | 設置錯誤限制以模擬失敗 |
printing | 布爾型 | False | 是否打印出數據內容 |
<storage type="swift" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
token | 字符串 | AUTH_xxx | 認證令牌,只有在用戶但願繞過認證時才須要此參數。 |
storage_url | 字符串 | http://127.0.0.1:8080/auth/v1.0 | 存儲URL,只有在用戶但願繞過認證時才須要此參數。 |
policy | 字符串 | 存儲策略是Swift 2.0中引入的一項功能,容許應用程序在每一個容器的基礎上爲其存儲選擇一組不一樣的特徵。 有關完整信息,請參閱最新的Swift文檔:http://docs.openstack.org/developer/swift/overview_architecture.html. 只有當用戶但願利用不一樣的存儲策略而不是默認存儲策略時,才須要它。 |
<storage type="ampli" config="host={controller-ip};port=8080;nsroot=/namespace;policy={policy-id}" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
host | 字符串 | 要鏈接的controller節點IP | |
port | 整型 | 端口 | |
nsroot | 字符串 | 「/namespace」 | 命名空間root |
policy | 字符串 | 命名空間將訪問的策略ID |
<storage type="s3" config="accesskey={accesskey};secretkey={scretkey};endpoint={endpoint}; proxyhost={proxyhost};proxyport={proxyport}" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
accesskey | 字符串 | base64編碼的用戶名 | |
secretkey | 字符串 | base64編碼的密碼 | |
endpoint | 字符串 | http://s3.amazonaws.com | 端點url(s3存儲公開以供外部訪問的url). |
proxyhost | 字符串 | 非必選項,按需配置,http代理主機名或IP地址 | |
proxyport | 整型 | 非必選項,按需配置,http代理端口。 |
<storage type="sproxyd" config="hosts={host1,host2,…};port={port};base_path={path};pool_size={maxTotal,maxPerRoute}" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
hosts | 字符串 | 127.0.0.1 | 以逗號分隔的主機名/IP地址列表。 使用簡單的循環算法在全部主機上實現請求的負載平衡 |
port | 整型 | 81 | connector使用的端口 |
base_path | 字符串 | /proxy/chord | sproxyd配置文件的路徑(此配置文件必須具備by_path_enabled=1) |
pool_size | 整型或逗號分隔的整數對 | 60,10 | 第一個值是鏈接池的大小。 第二個值(若是提供)是給定HTTP路由的最大鏈接數。 |
<storage type="cdmi" config="type=<cdmi|non-cdmi;custom_headers=<header:value_reference>" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
type | 字符串 | 「cdmi」 | 選項:「cdmi」或「non-cdmi」,它表示要使用的內容類型,「cdmi」表示存儲訪問將遵循cdmi內容類型,「non-cdmi」表示存儲訪問將遵循非cdmi內容類型 |
Customer_headers | 字符串 | 這是一個實驗參數,用於查看是否可能支持cdmi衍生物,這可能須要額外的標頭。 能夠在不通知的狀況下移除該參數 |
<storage type="cdmi_swift" config="" />
config
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
timeout | 整型 | 30,000 | 鏈接超時值(毫秒) |
<storage type="librados" config="endpoint={endpoint};accesskey={accesskey};secretkey={secretkey}" />
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
endpoint | 字符串 | 127.0.0.1 | 端點能夠是例如監視器節點。 |
accesskey | 字符串 | 用戶名如「admin」。 | |
secretkey | 字符串 | secretkey是admin keyring的key。 |
<workstage name="<name>" > </workstage>
<work name="main" type="normal" workers="128" interval="5" division="none" runtime="60" rampup="0" rampdown="0" totalOps="0" totalBytes="0" afr=」200000」 config="" > . . . </work>
有一種常規work(normal
)和四種特殊work(init
、prepare
、cleanup
、dispose
),上面示例參數針對全部組合狀況,不一樣工做類型會有不一樣的參數組合,通常規則以下:
workers
控制負載狀況runtime
(包括rampup
和rampdown
)、totalOps
、totalBytes
控制負載何時結束,通常一個work定義只能設置其中一種,特殊work不須要定義此項參數屬性 | 類型 | 默認值 | 註釋 |
---|---|---|---|
name | 字符串 | work的一個名稱 | |
type | 字符串 | normal | work的類型,可選參數爲normal、init、prepare、cleanup、dispose、delay |
workers | 整型 | 並行進行work的workers數量,即同時起多少個線程運行負載 | |
interval | 整型 | 5 | 性能快照之間的間隔,即多久統計一次性能數據 |
division | 字符串 | none | 控制workers之間的work分配方式,可選參數爲none、container、object |
runtime | 整型 | 0 | 結束選項,work將執行多少秒 |
rampup | 整型 | 0 | 結束選項,加速工做負載的秒數(須要多少秒來增長工做負載);此時間不包括在runtime中 |
rampdown | 整型 | 0 | 結束選項,減速工做負載的秒數(須要多少秒來減小工做負載);此時間不包括在runtime中 |
totalOps | 整型 | 0 | 結束選項,將執行多少個操做;應該是workers的倍數 |
totalBytes | 整型 | 0 | 結束選項,要傳輸多少字節,應該是workers和size的乘積的倍數。 |
driver | 字符串 | 將執行此work的driver,默認狀況下,全部driver都將參與執行,可手動指定該work由哪一個driver執行負載測試 | |
afr | 整型 | 200000(常規work類型) 0(特殊work類型) |
可接受的失敗率,是百萬分之一。 |
參數解釋
none
、container
、object
init
/dispose
,默認的劃分策略爲container
prepare
/cleanup
,默認的劃分策略爲object
none
#示例參數以下: <work name="main" workers="4" runtime="300" division="?"> <operation type="read" ratio="100" config="containers=u(1,8);objects=u(1,1000)" /> </work>
若
division="container"
,則表示在當前work中,worker經過container
劃分負載區域範圍,訪問模式示例以下:
注:workers
數量不容許超過container
Worker | Container Range | Object Range |
---|---|---|
#1 | 1-2 | 1-1000 |
#2 | 3-4 | 1-1000 |
#3 | 5-6 | 1-1000 |
#4 | 7-8 | 1-1000 |
若
division="object"
,則表示在當前work中,worker經過object
劃分負載區域範圍,訪問模式示例以下:
注:wrokers
數量不容許超過objects
Worker | Container Range | Object Range |
---|---|---|
#1 | 1-8 | 1-250 |
#2 | 1-8 | 251-500 |
#3 | 1-8 | 501-750 |
#4 | 1-8 | 751-1000 |
<work type="init|prepare|cleanup|dispose|delay" workers="{number}" config="{key}={value};{key}={value}" />
特殊work與常規work有如下不一樣的地方:
totalOps
並計算具體數值來控制負載運行時長,所以不須要額外去定義結束選項operation
)<work type="init" workers="4" config="containers=r(1,100)" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如: c(1), r(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
<work type="prepare" workers="4" config="containers=r(1,10);objects=r(1,100);sizes=c(64)KB" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如: c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
objects | 字符串 | 對象選擇表達式;例如 c(1), u(1,100) | |
oprefix | 字符串 | myobjects_ | 對象前綴 |
osuffix | 字符串 |
|
對象後綴 |
sizes | 字符串 | 帶單位(B/KB/MB/GB)的大小選擇表達式;例如: c(128)KB, u(2,10)MB | |
chunked | 布爾型 | False | 是否以chunked模式上傳數據 |
content | 字符串 | random | 使用隨機數據或全零填充對象內容,可選參數爲random、zero |
createContainer | 布爾型 | False | 建立相關容器(若是不存在) |
hashCheck | 布爾型 | False | 作與對象完整性檢查相關的工做 |
<work type="cleanup" workers="4" config="containers=r(1,10);objects=r(1,100)" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
objects | 字符串 | 對象選擇表達式;例如 c(1), u(1,100) | |
oprefix | 字符串 | myobjects_ | 對象前綴 |
osuffix | 字符串 |
|
對象後綴 |
deleteContainer | 布爾型 | False | 刪除相關容器(若是存在) |
<work type="dispose" workers="4" config="containers=r(1,100)" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
<workstage name=」delay」 closuredelay=」60」 > <work type="delay" workers="1" /> </workstage>
注:closuredelay
即延遲時間(單位爲秒)
注:ratio
爲當前操做數佔總操做數的比例,單個work定義中,全部operation的ratio
之和爲100
<operation type="read" ratio="70" config="containers=c(1);objects=u(1,100)" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
objects | 字符串 | 對象選擇表達式;例如 c(1), u(1,100) | |
oprefix | 字符串 | myobjects_ | 對象前綴 |
osuffix | 字符串 |
|
對象後綴 |
hashCheck | 布爾型 | False | 作與對象完整性檢查相關的工做 |
<operation type="write" ratio="20" config="containers=c(2);objects=u(1,1000);sizes=c(2)MB" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
objects | 字符串 | 對象選擇表達式;例如 c(1), u(1,100) | |
oprefix | 字符串 | myobjects_ | 對象前綴 |
osuffix | 字符串 |
|
對象後綴 |
sizes | 字符串 | 帶單位(B/KB/MB/GB)的大小選擇表達式;例如: c(128)KB, u(2,10)MB | |
chunked | 布爾型 | False | 是否以chunked模式上傳數據 |
content | 字符串 | random | 使用隨機數據或全零填充對象內容,可選參數爲random、zero |
hashCheck | Boolean | False | 作與對象完整性檢查相關的工做 |
<operation type="filewrite" ratio="20" config="containers=c(2);fileselection=s;files=/tmp/testfiles" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
fileselection | 字符串 | 哪一種選擇器應該只使用put選擇器標識符(例如,s表明順序)。* | |
files | 字符串 | 包含要上載的文件的文件夾的路徑,路徑必須存在 | |
chunked | 布爾型 | False | 是否以chunked模式上傳數據 |
hashCheck | 布爾型 | False | 作與對象完整性檢查相關的工做 |
注:對象不按文件名讀取。Java以隨機方式讀取文件夾中的文件。在第一個對象第二次被選中以前,使用「Sequential」選擇器確保每一個對象將被選中一次。在工做定義中使用totalOps或runtime限制對象的數量
<operation type="delete" ratio="10" config="containers=c(2);objects=u(1,1000)" />
參數列表以下:
參數 | 類型 | 默認值 | 註釋 |
---|---|---|---|
containers | 字符串 | 容器選擇表達式;例如 c(1), u(1,100) | |
cprefix | 字符串 | mycontainers_ | 容器前綴 |
csuffix | 字符串 |
|
容器後綴 |
objects | 字符串 | 對象選擇表達式;例如 c(1), u(1,100) | |
oprefix | 字符串 | myobjects_ | 對象前綴 |
osuffix | 字符串 |
|
對象後綴 |
Op-Type
操做類型,經常使用操做類型有read
、write
、filewrite
、delete
,具體詳見operation定義(type="")
Op-Count
總操做數
Byte-Count
總字節數
Avg-ResTime
時延(平均響應時間,請求開始到請求完成的持續時間)
Throughput(Operations/s)
IOPS(每秒完成的操做總數)
注:此處的值由總操做成功請求數除以總運行時間計算而來
Bandwidth
帶寬(每秒傳輸的數據量)
注:此處數據量進制換算跟實際有所不一樣(1 MB = 1000 × 1000 bytes),故測試的性能值要高於實際值
Succ-Ratio
操做成功率(成功請求數/總請求數)
一、爲實現最大性能,此處endpoint
指向的爲haproxy端口(後端使用均衡模式roundrobin,指向三個集羣節點不一樣網關)
二、全部測試模型執行前需手動清理下緩存sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
三、workers
通常設置爲客戶端CPU線程數總大小 grep 'processor' /proc/cpuinfo | sort -u | wc -l
四、objects
對象數需爲wokers
併發數的整數倍,不然會由於線程數沒法除盡,出現文件上傳不全的狀況
如併發數爲32,上傳對象10000個,實際上傳對象爲9984個
序號 | 客戶端個數 | 客戶端driver個數 | 單driver併發數 | 對象數量 | 對象大小 | 讀寫類型 | 讀結果標識 | 寫結果標識 |
---|---|---|---|---|---|---|---|---|
1. | 1 | 1 | 32 | 200000 | 4KB | 讀寫 | OR1 | OW1 |
2. | 3 | 1 | 32 | 600000 | 4KB | 讀寫 | OR2 | OW2 |
3. | 1 | 1 | 32 | 60000 | 4MB | 讀寫 | OR3 | OW3 |
4. | 3 | 1 | 32 | 180000 | 4MB | 讀寫 | OR4 | OW4 |
單個客戶端,單個客戶端線程數3二、100個桶、單桶2000個對象(共20w個對象)、單個對象大小4KB
<?xml version="1.0" encoding="UTF-8" ?> <workload name="4k-rw-1driver" description="sample benchmark for s3"> <storage type="s3" config="accesskey={userak};secretkey={usersk};endpoint=http://{haproxy-ip}:{port};timeout=300000;max_connections=400" /> <workflow> <workstage name="init"> <work type="init" workers="10" config="cprefix=test4kbucket;containers=r(1,100)" /> </workstage> <workstage name="write test4k"> <work type="prepare" workers="32" driver="driver1" config="cprefix=test4kbucket;containers=r(1,100);objects=r(1,2000);sizes=c(4)KB" /> </workstage> <workstage name="read test4k"> <work name="read" workers="32" driver="driver1" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4kbucket;containers=u(1,100);objects=u(1,2000)" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="32" config="cprefix=test4kbucket;containers=r(1,100);objects=r(1,2000)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="10" config="cprefix=test4kbucket;containers=r(1,100)" /> </workstage> </workflow> </workload>
三個客戶端,單個客戶端線程數3二、100個桶、單桶2000個對象(共60w個對象)、單個對象大小4KB
<?xml version="1.0" encoding="UTF-8" ?> <workload name="4k-rw-3driver" description="sample benchmark for s3"> <storage type="s3" config="accesskey={userak};secretkey={usersk};proxyhost=;proxyport=;endpoint=http://{haproxy-ip}:{port};timeout=300000;max_connections=400" /> <workflow> <workstage name="init"> <work type="init" workers="10" config="cprefix=test4kbucket;containers=r(1,300)" /> </workstage> <workstage name="write test4k"> <work type="prepare" workers="32" driver="driver1" config="cprefix=test4kbucket;containers=r(1,100);objects=r(1,2000);sizes=c(4)KB" /> <work type="prepare" workers="32" driver="driver2" config="cprefix=test4kbucket;containers=r(101,200);objects=r(1,2000);sizes=c(4)KB" /> <work type="prepare" workers="32" driver="driver3" config="cprefix=test4kbucket;containers=r(201,300);objects=r(1,2000);sizes=c(4)KB" /> </workstage> <workstage name="read test4k"> <work name="read" workers="32" driver="driver1" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4kbucket;containers=u(1,100);objects=u(1,2000)" /> </work> <work name="read" workers="32" driver="driver2" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4kbucket;containers=u(101,200);objects=u(1,2000)" /> </work> <work name="read" workers="32" driver="driver3" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4kbucket;containers=u(201,300);objects=u(1,2000)" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="32" config="cprefix=test4kbucket;containers=r(1,300);objects=r(1,2000)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="10" config="cprefix=test4kbucket;containers=r(1,300)" /> </workstage> </workflow> </workload>
一個客戶端,單個客戶端線程數3二、100個桶、單桶600個對象(共6w個對象)、單個對象大小4MB
<?xml version="1.0" encoding="UTF-8" ?> <workload name="4m-rw-1driver" description="sample benchmark for s3"> <storage type="s3" config="accesskey={userak};secretkey={usersk};proxyhost=;proxyport=;endpoint=http://{haproxy-ip}:{port};timeout=300000;max_connections=400" /> <workflow> <workstage name="init"> <work type="init" workers="10" config="cprefix=test4mbucket;containers=r(1,100)" /> </workstage> <workstage name="write test4m"> <work type="prepare" workers="32" driver="driver1" config="cprefix=test4mbucket;containers=r(1,100);objects=r(1,600);sizes=c(4096)KB" /> </workstage> <workstage name="read test4m"> <work name="read" workers="32" driver="driver1" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4mbucket;containers=u(1,100);objects=u(1,600)" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="32" config="cprefix=test4mbucket;containers=r(1,100);objects=r(1,600)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="10" config="cprefix=test4mbucket;containers=r(1,100)" /> </workstage> </workflow> </workload>
三個客戶端,單個客戶端線程數3二、100個桶、單桶600個對象(共18w個對象)、單個對象大小4MB
<?xml version="1.0" encoding="UTF-8" ?> <workload name="4m-rw-3driver" description="sample benchmark for s3"> <storage type="s3" config="accesskey={userak};secretkey={usersk};proxyhost=;proxyport=;endpoint=http://{haproxy-ip}:{port};timeout=300000;max_connections=400" /> <workflow> <workstage name="init"> <work type="init" workers="10" config="cprefix=test4mbucket;containers=r(1,300)" /> </workstage> <workstage name="write test4m"> <work type="prepare" workers="32" driver="driver1" config="cprefix=test4mbucket;containers=r(1,100);objects=r(1,600);sizes=c(4096)KB" /> <work type="prepare" workers="32" driver="driver2" config="cprefix=test4mbucket;containers=r(101,200);objects=r(1,600);sizes=c(4096)KB" /> <work type="prepare" workers="32" driver="driver3" config="cprefix=test4mbucket;containers=r(201,300);objects=r(1,600);sizes=c(4096)KB" /> </workstage> <workstage name="read test4m"> <work name="read" workers="32" driver="driver1" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4mbucket;containers=u(1,100);objects=u(1,600)" /> </work> <work name="read" workers="32" driver="driver2" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4mbucket;containers=u(101,200);objects=u(1,600)" /> </work> <work name="read" workers="32" driver="driver3" runtime="300"> <operation type="read" ratio="100" config="cprefix=test4mbucket;containers=u(201,300);objects=u(1,600)" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="32" config="cprefix=test4mbucket;containers=r(1,300);objects=r(1,600)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="10" config="cprefix=test4mbucket;containers=r(1,300)" /> </workstage> </workflow> </workload>
Terminate
錯誤radosgw-admin bucket stats --bucket={bucket-name} | grep num_objects
注:通常測試讀模型時,須要預填準備測試數據,此時上傳對象須要使用
s(min,max)
表達式順序執行,從而保證讀取的對象數據徹底
注:此處引用文章
**COSBench測Ceph對象存儲:那些網上找不到的細節**
radosgw-admin bucket stats –bucket={bucket-name}
查看桶內對象數是否達到指定用例規模;