1. 程式人生 > >系統技術非業餘研究 » blktrace未公開選項網路儲存擷取資料

系統技術非業餘研究 » blktrace未公開選項網路儲存擷取資料

我們透過blktrace來觀察io行為的時候,第一件事情需要選擇目標裝置,以便分析該裝置的io行為。具體使用可以參考我之前寫的幾篇:這裡 這裡 這裡

blktrace分為核心部分和應用部分,應用部分收到我們要捕捉的裝置名單,傳給核心。核心分佈在block層的各個tracepoint就會開始工作,把相關的資料透過relayfs傳遞到blktrace的應用部分,應用部分把這些資料記到磁碟,以便後續分析。架構參見下圖:

從man blktrace中可以看到:

blktrace stores the extracted data into files stored in the local directory. The format of the file names is (by default) device.blktrace.cpu, where device is the base device name (e.g, if we are tracing /dev/sda, the base device name would be sda); and cpu identifies a CPU for the event stream

這時候問題就來了,如果我的機器只有一個裝置,那麼blktrace存資料檔案這個動作就會影響到我們正常的IO行為。

通常我們的機器會有多個裝置,所以我們會把資料放在不同的裝置上,以避免互相干擾。如果實在只有一個盤,那麼還可以把資料放在ramdisk裡面。 但是ramdisk有大小的限制,還是不夠好。

幸運的是blktrace提供通過網路的方式來儲存資料檔案,只不過文件沒寫明。

通過網路儲存資料的時候,需要2個機器:
1. 一臺執行blktrace server負責儲存資料: blktrace -l
2. 一臺執行blktrace client負責捕獲目標裝置: blktrace -h hostname 可選-s控制是否透過sendfile傳送資料,在大資料量的情況下有效能優勢,預設是透過send一個包一個包的傳送。

我們來演示下,二個終端,一個模擬伺服器,一個模擬客戶端:
伺服器終端上:

$ blktrace -l 
server: waiting for connections...
server: connection from 127.0.0.1
server: end of run for 127.0.0.1:sda
=== sda ===
  CPU  0:                   20 events,        1 KiB data
  CPU  1:                   39 events,        2 KiB data
  Total:                    59 events (dropped 0),        3 KiB data
$ tree 127.0.0.1-2012-02-28-08\:15\:00/
127.0.0.1-2012-02-28-08:15:00/
├── sda.blktrace.0
└── sda.blktrace.1

0 directories, 2 files

客戶端終端上:

$ sudo blktrace -d /dev/sda -h 127.0.0.1
blktrace: connecting to 127.0.0.1
blktrace: connected!
^C=== sda ===
  CPU  0:                   20 events,        1 KiB data
  CPU  1:                   39 events,        2 KiB data
  Total:                    59 events (dropped 0),        3 KiB data

我們來驗證下資料的準確性,在127.0.0.1-2012-02-28-08:15:00目錄下操作:

$ blkrawverify sda
Verifying sda
    CPU 0 
    CPU 1 
Wrote output to sda.verify.out
$ cat sda.verify.out 

---------------
Verifying sda
    ---------------------
    Summary for cpu 0:
             4 valid +          0 invalid (100.0%) processed

    ---------------------
    Summary for cpu 1:
            14 valid +          0 invalid (100.0%) processed

這樣我們就順利的在另外一臺機器上抓到了目標機器上特定裝置的io模式資料,可以進行後續的分析了。

祝玩得開心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

相關推薦

系統技術業餘研究 » blktrace公開選項網路儲存擷取資料

我們透過blktrace來觀察io行為的時候,第一件事情需要選擇目標裝置,以便分析該裝置的io行為。具體使用可以參考我之前寫的幾篇:這裡 這裡 這裡 blktrace分為核心部分和應用部分,應用部分收到我們要捕捉的裝置名單,傳給核心。核心分佈在block層的各個tracepoint就會開始工作,把

系統技術業餘研究 » blktrace 深度瞭解linux系統的IO運作

我們在Linux上總是要儲存資料的,資料要麼儲存在檔案系統裡(如ext3),要麼就在裸裝置裡面。我們在使用這些資料的時候都是通過檔案這個抽象來訪問的,作業系統會把我們需要的資料給我們,我們通常無需和塊裝置打交道。 從下圖我們可以很清楚的看到: 我們會發現IO是個層次很深的子系統,有很複雜的資料流

系統技術業餘研究 » Erlang新新增選項 +zerts_de_busy_limit 控制節點間通訊的資料量

erlang節點間通訊預設是通過tcp通道進行的, 而且每對節點間只有一個tcp連結,所有的rpc和內建的類似monitor這樣的訊息也都是通過這個通道進行的. 當資料量過大的時候, 系統就會發出 busy distribution port警告, 同時限制資料的吞吐. 這個值預設是128k. 現

系統技術業餘研究 » 巧用Netcat方便網路程式開發

首先介紹下NC,這個號稱網路瑞士軍刀的工具。 What is Netcat? Netcat is a featured networking utility which reads and writes data across network connections, using the TC

系統技術業餘研究 » 公開的erlang ports trace

erlang的trace機制非常強大, 在dbg, ttb模組的配合下, 可以非常清楚的瞭解系統的運作, 排錯, 和調優. 但是有個對於做網路程式重要的功能被忽視了, 沒有寫到文件. 那就是trace ports訊息. 我們的gen_tcp,file都是port實現的, 那麼瞭解這麼模組的運作其實

系統技術業餘研究 » 公開的erlang:port_s/get_data

我們通常在使用port的時候, 需要把他同其他的上下文關聯起來, 以便在port給我們發生資料的時候, 我們能根據繫結的上下文, 知道如何處理資料. 有2種辦法: 1. 用ets來儲存{Port, Ctx},這個比較慢, 每次都要查表. 2. 用Port本身的空間來儲存Ctx. erlang:po

系統技術業餘研究 » erts_ use_sender_punish公開的特性

我們知道erlang的VM排程是根據reds的,每個程序初始的時候分配2000個reds, 一旦這個reds用完了,程序就被掛起,放到佇列去排隊,等待下一次排程。OTP R13B04下一個程序給另外一個程序傳送訊息,是需要扣除傳送者一定的reds, 這樣看起來更公平。因為古語說殺敵一千, 自損八百

系統技術業餘研究 » Erlang叢集公開特性:IP網段限制

Erlang叢集二個節點之間的通訊是通過一個tcp長連線進行的,而且是全聯通的,一旦cookie論證通過了,任何一個節點就獲得全叢集的訪問權,可以參考Erlang分佈的核心技術淺析 。erlang的這個授權模式特定搞的這麼簡單,但是在實際使用中還是有安全性的問題。我們退而求其次,來個IP網段限制,

系統技術業餘研究 » 公開的gen_tcp:unrecv以及接收緩衝區行為分析

gen_tcp:unrecv是個未公開的函式,作用是往tcp的接收緩衝區裡面填入指定的資料。別看這小小的函式,用起來很舒服的。 我們先看下它的程式碼實現,Erlang程式碼部分: %%gen_tcp.erl:L299 unrecv(S, Data) when is_port(S) ->

系統技術業餘研究 » Linux下Fio和Blktrace模擬塊裝置的訪問模式

我們在做塊裝置調優的時候, 我們關心的是塊裝置是如何被訪問的,也就是訪問模式(比如說每次從什麼地方讀,每次讀多少塊,熱點在哪裡等),至於每次讀寫的什麼資料我們並不關心. 這些模式當然可以自己去構造,但是如果能把真實應用的訪問模式記錄下來,並且在調優的時候能重放,我們就可以一遍又一遍的除錯直到達到最

系統技術業餘研究

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

系統技術業餘研究 » inet_dist_listen_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 老生常談: ulimit問題及其影響

ulimit最初設計是用來限制程序對資源的使用情況的,因為早期的系統系統資源包括記憶體,CPU都是非常有限的,系統要保持公平,就要限制大家的使用,以達到一個相對公平的環境。以下是典型的機器預設的限制情況: $ ulimit -a core file size (blocks,