系統技術非業餘研究 » blktrace 深度瞭解linux系統的IO運作
我們在Linux上總是要儲存資料的,資料要麼儲存在檔案系統裡(如ext3),要麼就在裸裝置裡面。我們在使用這些資料的時候都是通過檔案這個抽象來訪問的,作業系統會把我們需要的資料給我們,我們通常無需和塊裝置打交道。
我們會發現IO是個層次很深的子系統,有很複雜的資料流動線路。
至於作業系統如何去儲存和獲取這些資料對我們完全是黑盒子的,這通常不是問題。但是如果我們的IO很密集,我們就需要搞清楚IO具體是如何運作的,免的濫用IO和導致設計問題。
這時候你就需要blktrace這樣的工具。
blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations up to user space.
它的作者Jens Axboe, 是核心IO模組的維護者,目前就職於FusionIO, 是個很nice的傢伙,同時他還是著名IO評測工具fio的作者。
目前blktrace在大部分的Linux發行版都支援的,我們可以輕鬆的安裝使用:
$ sudo yum install blktrace $ sudo blktrace /dev/sda5 -o - | blkparse -i - 8,5 2 1 0.000000000 0 C W 40247824 + 8 [0] 0,0 2 2 0.000040884 4271 A W 31105920 + 8 <- (8,3) 132600 8,5 2 3 0.000041214 4271 Q W 31105920 + 8 [(null)] 8,5 2 4 0.000045947 4271 G W 31105920 + 8 [(null)] 8,5 2 5 0.000046707 4271 P N [(null)] 8,5 2 6 0.000047073 4271 I W 31105920 + 8 [(null)] 0,0 2 7 0.000048282 4271 A W 31105928 + 8 <- (8,3) 132608 8,5 2 8 0.000048357 4271 Q W 31105928 + 8 [(null)] 8,5 2 9 0.000049137 4271 M W 31105928 + 8 [(null)] 0,0 2 10 0.000050167 4271 A W 31105936 + 8 <- (8,3) 132616 8,5 2 11 0.000050241 4271 Q W 31105936 + 8 [(null)] 8,5 2 12 0.000050417 4271 M W 31105936 + 8 [(null)] 0,0 2 13 0.000050984 4271 A W 31105944 + 8 <- (8,3) 132624 8,5 2 14 0.000051047 4271 Q W 31105944 + 8 [(null)] 8,5 2 15 0.000051258 4271 M W 31105944 + 8 [(null)] 8,5 2 16 0.000051829 4271 U N [(null)] 1 8,5 2 17 0.000052699 4271 D W 31105920 + 32 [(null)] 8,5 2 18 0.000108292 0 C W 31105920 + 32 [0] 0,0 2 19 0.000127791 4271 A W 31105952 + 8 <- (8,3) 132632 8,5 2 20 0.000128001 4271 Q W 31105952 + 8 [(null)] 8,5 2 21 0.000128874 4271 G W 31105952 + 8 [(null)] 8,5 2 22 0.000129373 4271 P N [(null)] 8,5 2 23 0.000129706 4271 I W 31105952 + 8 [(null)] 8,5 2 24 0.000130551 4271 U N [(null)] 1 8,5 2 25 0.000131330 4271 D W 31105952 + 8 [(null)] 8,5 2 26 0.000172705 0 C W 31105952 + 8 [0] 0,0 13 1 1266874889.709337223 4271 A W 40247824 + 8 <- (8,3) 9274504 8,5 13 2 1266874889.709338011 4271 Q W 40247824 + 8 [kjournald] 8,5 13 3 1266874889.709343974 4271 G W 40247824 + 8 [kjournald] 8,5 13 4 1266874889.709346653 4271 P N [kjournald] 8,5 13 5 1266874889.709347728 4271 I W 40247824 + 8 [kjournald] 8,5 13 6 1266874889.709350795 4271 U N [kjournald] 1 8,5 13 7 1266874889.709355396 4271 D W 40247824 + 8 [kjournald] 0,0 21 1 0.504685570 4267 A W 92640335 + 8 <- (8,6) 234392 8,5 21 2 0.504686212 4267 Q W 92640335 + 8 [kjournald] 8,5 21 3 0.504690614 4267 G W 92640335 + 8 [kjournald] 8,5 21 4 0.504691826 4267 P N [kjournald] 8,5 21 5 0.504692896 4267 I W 92640335 + 8 [kjournald] 0,0 21 6 0.504694268 4267 A W 92640343 + 8 <- (8,6) 234400 8,5 21 7 0.504694448 4267 Q W 92640343 + 8 [kjournald] 8,5 21 8 0.504695115 4267 M W 92640343 + 8 [kjournald] 0,0 21 9 0.504696227 4267 A W 92640351 + 8 <- (8,6) 234408 8,5 21 10 0.504696357 4267 Q W 92640351 + 8 [kjournald] 8,5 21 11 0.504696615 4267 M W 92640351 + 8 [kjournald] 0,0 21 12 0.504697422 4267 A W 92640359 + 8 <- (8,6) 234416 8,5 21 13 0.504697565 4267 Q W 92640359 + 8 [kjournald] 8,5 21 14 0.504697787 4267 M W 92640359 + 8 [kjournald] 0,0 21 15 0.504698549 4267 A W 92640367 + 8 <- (8,6) 234424 8,5 21 16 0.504698677 4267 Q W 92640367 + 8 [kjournald] 8,5 21 17 0.504698939 4267 M W 92640367 + 8 [kjournald] 8,5 21 18 0.504699954 4267 U N [kjournald] 1 8,5 21 19 0.504704050 4267 D W 92640335 + 40 [kjournald] 8,5 2 27 0.504810390 0 C W 92640335 + 40 [0] 0,0 2 28 0.504842324 4267 A W 92640375 + 8 <- (8,6) 234432 8,5 2 29 0.504842594 4267 Q W 92640375 + 8 [kjournald] 8,5 2 30 0.504844133 4267 G W 92640375 + 8 [kjournald] 8,5 2 31 0.504845233 4267 P N [kjournald] 8,5 2 32 0.504845703 4267 I W 92640375 + 8 [kjournald] 8,5 2 33 0.504846958 4267 U N [kjournald] 1 8,5 2 34 0.504848547 4267 D W 92640375 + 8 [kjournald] 8,5 2 35 0.504879109 0 C W 92640375 + 8 [0] CPU2 (8,5): Reads Queued: 0, 0KiB Writes Queued: 6, 24KiB Read Dispatches: 0, 0KiB Write Dispatches: 3, 24KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 5, 48KiB Read Merges: 0, 0KiB Write Merges: 3, 12KiB Read depth: 0 Write depth: 2 IO unplugs: 3 Timer unplugs: 0 CPU13 (8,5): Reads Queued: 0, 0KiB Writes Queued: 1, 4KiB Read Dispatches: 0, 0KiB Write Dispatches: 1, 4KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB Read Merges: 0, 0KiB Write Merges: 0, 0KiB Read depth: 0 Write depth: 2 IO unplugs: 1 Timer unplugs: 0 CPU21 (8,5): Reads Queued: 0, 0KiB Writes Queued: 5, 20KiB Read Dispatches: 0, 0KiB Write Dispatches: 1, 20KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB Read Merges: 0, 0KiB Write Merges: 4, 16KiB Read depth: 0 Write depth: 2 IO unplugs: 1 Timer unplugs: 0 Total (8,5): Reads Queued: 0, 0KiB Writes Queued: 12, 48KiB Read Dispatches: 0, 0KiB Write Dispatches: 5, 48KiB Reads Requeued: 0 Writes Requeued: 0 Reads Completed: 0, 0KiB Writes Completed: 5, 48KiB Read Merges: 0, 0KiB Write Merges: 7, 28KiB IO unplugs: 5 Timer unplugs: 0 Throughput (R/W): 0KiB/s / 95KiB/s Events (8,5): 61 entries Skips: 0 forward (0 - 0.0%)
利用這些資訊我們可以很清楚的知道我們IO裝置在做什麼,花了多少時間,透過它瞭解我們系統的運作。如何解讀這些資訊我們可以看手冊有詳細的解釋:
$ man blkparse
同時如果你覺得這些資訊太原始,類似btt, seekwatcher這樣的工具在blktrace的資訊的基礎上更深入的挖掘了系統的行為,使用起來也更簡單。
我們在實際工作的過程中用blktrace定位了很多問題,比如fsync的延時問題和IO排程器的問題,確實是很實用的一個工具。
祝大家玩的開心。
Post Footer automatically generated by wp-posturl plugin for wordpress.
No related posts.
相關推薦
系統技術非業餘研究 » blktrace 深度瞭解linux系統的IO運作
我們在Linux上總是要儲存資料的,資料要麼儲存在檔案系統裡(如ext3),要麼就在裸裝置裡面。我們在使用這些資料的時候都是通過檔案這個抽象來訪問的,作業系統會把我們需要的資料給我們,我們通常無需和塊裝置打交道。 從下圖我們可以很清楚的看到: 我們會發現IO是個層次很深的子系統,有很複雜的資料流
系統技術非業餘研究 » latencytop深度瞭解你的Linux系統的延遲
我們在系統調優或者定位問題的時候,經常會發現多執行緒程式的效率很低,但是又不知道問題出在哪裡,就知道上下文切換很多,但是為什麼上下文切換,是誰導致切換,我們就不知道了。上下文切換可以用dstat這樣的工具檢視,比如: $dstat ----total-cpu-usage---- -dsk/tot
系統技術非業餘研究 » 給你的Linux系統上點stress
《debug hacks》 這本書介紹了非常多的除錯手段和工具, 其中提到了stress這個簡單的壓力測試工具,在我們的日常工作中很有用。利用它可以給我們的系統施加CPU,記憶體,IO和磁碟的壓力,在模擬極端場景給應用系統造成的壓力方面很有幫助。 主頁見這裡:http://weather.ou.e
系統技術非業餘研究 » whatsapp深度使用Erlang有感
這麼多年過去了,社群還在討論erlang是不是小眾語言,各種懷疑的時候,whatsapp已經把erlang用到了極致。 whatsapp是什麼? 參見它的 官網 WhatsApp Messenger is a cross-platform mobile messaging app which a
系統技術非業餘研究 » blktrace未公開選項網路儲存擷取資料
我們透過blktrace來觀察io行為的時候,第一件事情需要選擇目標裝置,以便分析該裝置的io行為。具體使用可以參考我之前寫的幾篇:這裡 這裡 這裡 blktrace分為核心部分和應用部分,應用部分收到我們要捕捉的裝置名單,傳給核心。核心分佈在block層的各個tracepoint就會開始工作,把
系統技術非業餘研究 » Fio壓測工具和io佇列深度理解和誤區
Fio 是個強大的IO壓力測試工具,我之前寫過不少fio的使用和實踐,參見 這裡。 隨著塊裝置的發展,特別是SSD盤的出現,裝置的並行度越來越高。利用好這些裝置,有個訣竅就是提高裝置的iodepth, 一把餵給裝置更多的IO請求,讓電梯演算法和裝置有機會來安排合併以及內部並行處理,提高總體效率。
系統技術非業餘研究 » dets在64位系統還是有可恥的2G限制
原本以為在 64位作業系統下 檔案的讀寫指標都改成64位的 避免了2G的限制。經過測試 disk_log和file都支援超過2G的資料檔案,但是 dets還是可恥的失敗了。 經過檢視原始碼 有2個問題: 1. key segment的問題。 dets在設計的時候 是針對32位的 那麼它的空間限
系統技術非業餘研究 » gen_tcp:send的深度解刨和使用指南(初稿)
在大家的印象中, gen_tcp:send是個很樸素的函式, 一呼叫資料就喀嚓喀嚓到了對端. 這是個很大的誤解, Erlang的otp文件寫的很不清楚. 而且這個功能對於大部分的網路程式是至關重要的, 它的使用對否極大了影響了應用的效能. 我聽到很多同學在抱怨erlang的效能低或者出了很奇怪的問
系統技術非業餘研究 » itop更方便的瞭解Linux下中斷情況
乘著公司搬家的功夫,寫點東西! 在作網路程式的時候, 經常需要了解interrupts和軟中斷的平衡情況, 需要知道每秒有多少中斷髮生,發生在哪個cpu上. Linux下中斷來源可以從 /proc/interrupts 中瞭解到: $ cat /proc/interrupts
系統技術非業餘研究 » 深度剖析告訴你irqbalance有用嗎?
irqbalance專案的主頁在這裡 irqbalance用於優化中斷分配,它會自動收集系統資料以分析使用模式,並依據系統負載狀況將工作狀態置於 Performance mode 或 Power-save mode。處於Performance mode 時,irqbalance 會將中斷儘可能均勻
系統技術非業餘研究 » Linux下Fio和Blktrace模擬塊裝置的訪問模式
我們在做塊裝置調優的時候, 我們關心的是塊裝置是如何被訪問的,也就是訪問模式(比如說每次從什麼地方讀,每次讀多少塊,熱點在哪裡等),至於每次讀寫的什麼資料我們並不關心. 這些模式當然可以自己去構造,但是如果能把真實應用的訪問模式記錄下來,並且在調優的時候能重放,我們就可以一遍又一遍的除錯直到達到最
系統技術非業餘研究 » 瞭解系列之
您好!我看了您寫的瞭解CPU和了解記憶體,但是發現兩者在cpu訪問快取的速度上資料不一致,瞭解記憶體裡面您的資料二級快取的時間大概是一級快取的10倍了,但是瞭解CPU裡面只有3倍的樣子。我記得之前在微博裡面見你們討論過,好像應該是3倍左右才對。然後我在i7的機器上實測了一下,大概是4倍 Rep
系統技術非業餘研究
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » MySQL資料庫架構的演化觀察
MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql
系統技術非業餘研究 » inet_dist_connect_options
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 推薦工作機會
最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗: 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海
系統技術非業餘研究 » 新的工作和研究方向
和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w
系統技術非業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 2017升的最快的幾個資料庫無責任點評
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » Erlang 17.5引入+hpds命令列控制程序預設字典大小
Erlang 17.5釋出引入控制程序預設字典大小的命令列引數: Erlang/OTP 17.5 has been released Written by Henrik, 01 Apr 2015 Some highlights of the release are: ERTS: Added co