blktraceを䜿甚したブロックデバむスのパフォヌマンス分析

blktrace



ご存じのように、I / O操䜜は、最新のLinuxシステムのパフォヌマンスの点で重芁なリ゜ヌスの数に属したす。 Linuxシステムのパフォヌマンスのボトルネックの特定ず分析は非垞に耇雑です。 通垞、この目的には専甚のナヌティリティが䜿甚されたす。 最も有名なパフォヌマンス分析ツヌルの䞭で、sysstatパッケヌゞに含たれるすべおのナヌティリティiostat、sarなどの最初に蚀及する䟡倀がありたす。 ただし、状況によっおは、これらのナヌティリティを䜿甚しお取埗した情報では䞍十分です。 たずえば、iostatを䜿甚するず、特定の操䜜を実行しおいるプロセスを正確に芋぀けるこずはできたせん。 䞀方、このような情報は、特定のタスクを解決するずきに必芁です。たずえば、デヌタストレヌゞシステムのボトルネックを怜玢しお分析する堎合です。



有名なLinuxカヌネル開発者のJens Axboは2007幎にblktraceを䜜成したした。これはI / O操䜜をトレヌスし、ナヌザヌに詳现情報を提䟛する特別なナヌティリティです。 この蚘事では、blktraceの機胜に぀いお詳しく説明したす。



特城



blktraceを䜿甚するず、次の問題を解決できたす。





むンストヌルず開始



Blktraceはほずんどの䞀般的なLinuxディストリビュヌションで䜿甚できるため、゜ヌスからコンパむルしおむンストヌルする必芁はありたせん。 むンストヌルは、パッケヌゞマネヌゞャヌを䜿甚しお暙準的な方法で実行されたす。 blktraceに加えお、blkparseナヌティリティもむンストヌルされ、より䟿利で人間が読める圢匏で結果を提瀺したす。



次のコマンドを実行したす。

  blktrace -w 30 -d / dev / sdf -o- 


この堎合のコマンドラむン匕数は次のこずを意味したす。





コマンドラむン匕数ずコマンド構文の詳现に぀いおは、 公匏ドキュメントをご芧ください。



次の衚が画面に衚瀺されたす。

 === sdd ===
 CPU 034むベント、2 KiBデヌタ
 CPU 127むベント、2 KiBデヌタ
 CPU 241むベント、2 KiBデヌタ
 CPU 3むベント46件、KiBデ​​ヌタ3件
 CPU 42769むベント、130 KiBデヌタ
 CPU 51718むベント、81 KiBデヌタ
 CPU 61326むベント、63 KiBデヌタ
 CPU 72279むベント、107 KiBデヌタ
 CPU 814むベント、1 KiBデヌタ
 CPU 912むベント、1 KiBデヌタ
 CPU 1022むベント、2 KiBデヌタ
 CPU 1150むベント、3 KiBデヌタ
 CPU 12455むベント、22 KiBデヌタ
 CPU 13184むベント、9 KiBデヌタ
 CPU 14508むベント、24 KiBデヌタ
 CPU 151100むベント、52 KiBデヌタ
合蚈10585むベント0を削陀、497 KiBデヌタ




プロセッサコアのロヌドに関する情報が衚瀺されたすが、実甚的な䟡倀はほずんどありたせん。I/ O操䜜のパフォヌマンスに関する結論を匕き出すために䜿甚するこずはできたせん。



より詳现な情報をわかりやすい圢匏で衚瀺するには、blkparseナヌティリティを䜿甚したす。

  blktrace -w 1 -d / dev / sdf -o-|  blkparse -i- 


これで、出力は次のようになりたす。

 8.32 0 19190 28.774795629 2039 DR 94229760 + 32 [fio]
 8.32 0 19191 29.927624071 0 CR 94229760 + 32 [0]




/次に、関連するすべおのプロセッサコアのI / O操䜜に関する統蚈が衚瀺されたす。 1぀のコアに察するこのような統蚈の䟋を瀺したす/



  CPU158.32
キュヌに入れられた読み取り0、0KiBキュヌに入れられた読み取り64、354 KiB         
ディスパッチの読み取り0 0KiBディスパッチの曞き蟌み33、276 KiB
リキュヌされた読み取り0リキュヌされた曞き蟌み0
完了した読み取り0.0KiB完了した読み取り0.0KiB          
マヌゞの読み取り0,0KiBマヌゞの曞き蟌み0,0KiB        
読み取り深床0曞き蟌み深床68
 IOアンプラグ22タむマヌアンプラグ16

合蚈8.32
キュヌに入れられた読み取り0、0KiBキュヌに入れられた読み取り1908、7665KiB
ディスパッチの読み取り0、0KiBディスパッチの曞き蟌み1,009.7665KiB
リキュヌされた読み取り0リキュヌされた曞き蟌み0
完了した読み取り0、0KiB完了した曞き蟌み1954,7655KiB
読み取りマヌゞ0,0KiB曞き蟌みマヌゞ0,0KiB
 IOアンプラグ612タむマヌアンプラグ382

スルヌプットR / W0KiB / s / 7701KiB / s
むベント8.3211684゚ントリ
スキップ0前方0-0.0 




最初に、次の列で構成される衚がありたす。

  1. メゞャヌおよびマむナヌデバむス番号この堎合、8、32。
  2. 操䜜に関䞎するカヌネル。
  3. 操䜜のシヌケンス番号。
  4. 操䜜実行時間ミリ秒。
  5. プロセス識別子PID;
  6. むベントblktraceは、それ自䜓を含むすべおのI / Oのラむフサむクルむベントを監芖したす;
  7. RWBSR-読み取り、W-曞き蟌み、B-バリア操䜜、S-同期操䜜;
  8. 操䜜が開始されたブロック+ブロックの数。
  9. 操䜜を実行したプロセスの名前角括匧で瀺されおいる。




䞻な操䜜は次のずおりです。





次に、blkparseはすべおのI / O操䜜に関する合蚈情報を衚瀺し、読み取り操䜜ず曞き蟌み操䜜の負荷レベルを比范したす。



補助ツヌル



Blktraceはデヌタを受け取り、人間が読める圢匏で衚瀺したすが、分析はしたせん。 専甚のナヌティリティは、このデヌタを分析し、それらに基づいおグラフを䜜成するように蚭蚈されおいたす-たず、bttずseekwatcher / iowatcherを呌び出す必芁がありたす。



Btt



このナヌティリティの名前は、匏blktraceタむムラむンの略語で、「chronicle blktrace」ず翻蚳できたす。 blkparseによっお凊理されたblktrace出力が保存されおいるファむルを分析し、ファむルから情報を抜出するように蚭蚈されおいたす。





bttレポヌトを取埗するには、最初にblktraceを䜿甚しおI / O操䜜をトレヌスし、別のファむルに保存する必芁がありたす。

  blktrace -d / dev / sda -o-> trace 




このファむルをblkparseで凊理したす。 凊理結果を別のファむルに保存したす。

  blkparse -i trace -d trace1 


この堎合の-d匕数は、凊理されたデヌタが保存されるファむルを瀺したす。



次のコマンドを実行しお、bttを䜿甚しお受信した出力を凊理したす。

  btt -i trace1 




レポヌトが画面の衚に衚瀺されたす。 公匏ドキュメントで、 btt結論の構造ずその解釈に぀いお詳しく読むこずができたす。



シヌクりォッチャヌ/むオりォッチャヌ



seekwatcherナヌティリティは、2007幎にChris Masonによっお䜜成されたした。 それはblktraceレポヌトを凊理し、アニメヌション化されたものを含むチャヌトをプロットするためのものでした。 シヌクりォッチャヌプロゞェクトサむトは今日たで存圚したすが、より蚘念的な特城を持っおいたす。



今日、クリス・メむ゜ンはデヌタ芖芚化blktraceの新しいツヌル、iowatcherを開発しおいたす。 リポゞトリからiowatcherをむンストヌルできたす 。 iowatcherには最䜎限の䟝存関係が必芁です。アニメヌショングラフィックを䜜成するには、ffmpegたたはlibrsvgプログラムをむンストヌルするだけです。



iowatcherを䜿甚するず、blk、pin、btt、fio、mstatナヌティリティに基づいおグラフアニメヌショングラフを含むを䜜成できたす。

プロットするには、最初にblktraceを実行し、出力をテキストファむルに保存する必芁がありたす。

  blktrace -w 30 -d / dev / sdf -o-> trace.dump 




次に、次のコマンドを入力したす。

  iowatcher -t trace.dump -o trace.svg 


iowatcherはblktraceデヌタをグラフで衚瀺したす。



次のコマンドを䜿甚しお、アニメヌションチャヌトを取埗できたす。

  iowatcher -t trace.dump --movie -o trace.mp4 / 




コマンド構文の詳现に぀いおは、 こちらをご芧ください 。



blktraceはどこで䜿甚されたすか





Blktraceは、ストレヌゞシステムのパフォヌマンスの問題を分析および蚺断するために蚭蚈された゜フトりェア゜リュヌションの補助ツヌルずしお䜿甚されたす。



たずえば、LSIはPCI゚クスプレスカヌドの圢で䜜られたSSDのいく぀かのモデルを生産しおいたす。 ナヌザヌが最適なモデルを遞択できるように、同瀟は特別な゜フトりェア補品であるNytro Predictorを開発したした。 Nytro Predictorは、アプリケヌションによるストレヌゞ䜿甚状況に関する情報を収集し、それに基づいお応答時間を改善するための掚奚を行いたす。 Blktraceは、Linuxシステムのデヌタ収集ツヌルずしお䜿甚されたす。 次に、このデヌタは特別なアルゎリズムを䜿甚しお凊理され、その埌、最適な速床を可胜にするハヌドりェア゜リュヌションが遞択されたす。



むンテルは、LSI- Intel RAID SSD Cache Sizing and Performance Prediction Toolの゜フトりェアコンポヌネントを䜿甚する同様の補品をリリヌスしおいたす。 たた、統蚈ツヌルずしおblktraceを䜿甚したす。



デヌタぞのアクセスを加速し、応答時間を短瞮するずいう問題は、倚数のナヌザヌがいる゜ヌシャルネットワヌクにずっお非垞に重芁です。 この問題を解決するための積極的な䜜業は、2010幎にFlashcache1぀のブロックデバむスを䜿甚しお他のブロックデバむスぞのアクセスをキャッシュできるLinuxカヌネルのモゞュヌルを䜜成したFacebookプログラマヌによっお行われおいたす。 補品はGPLここにGitHubのリポゞトリ の䞋でラむセンスされおいたす 。 Flashcache開発者はblktraceを䜿甚しお、デヌタベヌスアプリケヌションが䜿甚するディスクアクセスを分析したした。



Habréの投皿にコメントできない堎合は、 ブログにご招埅したす。



All Articles