命令列檢視Gluster卷頻寬方法
首先在gluster客戶端使用fio工具往gluster卷中寫入資料,不要用dd,dd工具會寫入快取,不好觀察磁碟IO,fio參考命令:
fio -filename=file4 -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=128k -size=32G -numjobs=10 -group_reporting -name=gfstest
GlusterFS Volume Profile簡介
GlusterFS Volume Profile命令提供了一個介面,用於獲取卷中每個Brick的I / O資訊,有助於分析儲存系統中的瓶頸。
Usage:
volume profile <VOLNAME> {start|info [peek|incremental [peek]|cumulative|clear]|stop} [nfs]
首先要開啟卷的效能分析選項:
# gluster volume profile fuben start
檢視卷效能命令:
# gluster volume profile fuben info
引數說明:
Cumulative Stats:Brick的累計統計資料資訊
Block Size:每次讀取或寫入的塊大小,這個值會根據當前客戶端的IO大小自動調整
修改引數:performance.rda-request-size,可減少客戶端與伺服器的互動,增強效能,通過該命令檢視:gluster v get fuben all|grep performance.rda-request-size,上圖的Block Size是128k
No. of Reads:從該Brick中累計讀取的Block Size次數
No. of Writes:累計寫入該Brick中的Block Size次數,這個值是從下面的Fop欄位中的WRITE欄獲取的
%-latency:Brick中每個Fop步驟的延時比例佔比;
Duration:累計統計時間
Data Read:從該Brick中累計讀取的資料量,這個值是由No. of Reads乘以Block Size得到的;
Data Written:累計寫入該Brick中的資料量,這個值No. of Writes乘以Block Size得到的;
由上引數說明可得出:
卷的讀寫iops=每個Brick中的No. of Reads或No. of Writes除以Duration後相加的值;
卷的讀寫頻寬=每個Brick中的Data Read或Data Written除以Duration後相加的值;
檢視最新的幾條效能資料資訊:
# gluster v profile fuben info incremental
列印副本卷所有Brick的寫延時資料
gluster v profile gfspool2 info incremental|egrep 'Brick|latency|WRITE'
列印副本卷所有Brick的數量和平均寫延時之和【寫延時=平均寫延時之和/Brick數量,單位是us】
gluster v profile gfspool2 info incremental|egrep 'WRITE'|awk '{sum+=$2} END {print sum} END{print NR}'
列印副本卷統計間隔
gluster v profile gfspool2 info incremental|egrep 'Duration'|awk '{print $2}'|uniq
列印副本卷所有Brick讀頻寬資料
gluster v profile gfspool2 info incremental|egrep 'Data Read'|awk '{print $3}'
列印副本卷所有Brick寫頻寬資料
gluster v profile gfspool2 info incremental|egrep 'Data Written'|awk '{print $3}'
列印副本卷所有Date Brick資料卷(不含仲裁卷)寫頻寬之和並轉換為MB(讀類似)
gluster v profile gfspool2 info incremental|egrep 'Brick|Duration|Data Read|Data Written'|grep -A 3 'data$'|grep 'Data Written'|awk '{sum+=$3} END {print sum/1024/1024}'
列印副本卷所有Date Brick(含仲裁卷)統計間隔和寫頻寬之和【計算寫頻寬結果:(寫頻寬之和-統計間隔)/統計間隔】
注1:如果卷是2副本的,實際頻寬要乘以副本數,因為檔案寫進來會同時往2個Brick上面寫
注2:要看讀的話,把下面命令中的Data Written換成Data Read即可
注3:命令列中的head -5,這個5指的是卷的所有Brick數量+1
gluster v profile gfspool2 info incremental|egrep 'Duration|Data Written'|sort|uniq|awk -F ": " '{print $2}'|awk '{sum+=$1} END {print sum/1024/1024} END{print $1}'
gluster v profile fuben info incremental|egrep 'Duration|Data Written'|sort -r|awk -F ": " '{print $2}'|head -5|awk '{sum+=$1} END {print "ALL Data Written(bytes): " sum} END{print "Duration: " $1} END{print "Bandwidth(MB/S): " sum/1024/1024/$1-1}'
列印副本卷所有Date Brick統計間隔和寫IOPS之和【計算寫IOPS結果:(寫IOPS之和-統計間隔)/統計間隔】
注1:要看讀的話,把下面命令中的No. of Writes換成No. of Reads即可
gluster v profile gfspool2 info incremental|egrep 'Duration|No. of Writes'|sort -r|uniq|awk -F ": " '{print $2}'|awk '{sum+=$1} END {print sum} END{print $1}'
gluster v profile fuben info incremental|egrep 'Duration|No. of Writes'|sort -r|awk -F ": " '{print $2}'|head -5|awk '{sum+=$1} END {print "ALL No. of Writes: " sum} END{print "Duration: " $1} END{print "iops: " sum/$1-1}'
演示效果:
列印糾刪卷所有Date Brick統計間隔和寫IOPS之和【計算寫IOPS結果:(寫IOPS之和-統計間隔)/統計間隔】
gluster v profile ecpool info incremental|egrep 'Duration|No. of Writes'|sort -r|awk -F ": " '{print $2}'|head -21|awk '{sum+=$1} END {print "ALL No. of Writes: " sum} END{print "Duration: " $1} END{print "iops: " sum/$1-1}'
注1:命令列中的head -21,這個21是卷的所有Brick數量+1(加的這個1是統計間隔的資料所在行數),比如卷是分散式為2,糾刪比為8:2的型別,那麼head後面的值就是(8+2)×2+1
列印糾刪卷所有Date Brick統計間隔和寫頻寬之和【計算寫頻寬結果:(寫頻寬之和-統計間隔)/統計間隔】
gluster v profile ecpool info incremental|egrep 'Duration|Data Written'|sort|awk -F ": " '{print $2}'|head -21|awk '{sum+=$1} END {print "ALL Data Written(bytes): " sum} END{print "Duration: " $1} END{print "Bandwidth(MB/S): " sum/1024/1024/$1-1}'
列印糾刪卷所有Brick的寫延時
gluster v profile ecpool info incremental|egrep 'WRITE|%-latency'|sort -r|uniq
列印糾刪卷所有Brick的讀和寫的延時
gluster v profile fuben info incremental|egrep 'READ$|WRITE'|sort|awk '{print $9 ": "$2 " " $3}
列印糾刪卷所有Brick的數量和平均寫延時之和【寫延時=平均寫延時之和/Brick數量,單位是us】
gluster v profile ecpool info incremental|egrep 'WRITE'|awk '{sum+=$2} END {print "SUM Avg-latency: " sum} END{print "Number of Brick: " NR} END{print "Avg-latency(us): " sum/NR-1}'
演示效果: