반응형

blktrace는 사용자 큐까지 요청 큐 조작에 대한 자세한 정보를 제공하는 블록 계층 IO 추적 메커니즘입니다.

  • 커널 패치 커널 이벤트 로깅 인터페이스를 포함하는 Linux 커널에 대한 패치와 이벤트 추적을 생성하기 위해 블록 계층 내의 영역에 패치합니다.
  • blktrace 커널에서 이벤트 추적을 장기 온 디스크 스토리지로 전송하거나 blkparse를 통해 직접 형식화 된 출력을 제공하는 유틸리티입니다.
  • blkparse 파일에 저장된 이벤트를 형식화하거나 라이브 모드에서 실행할 때 blktrace에 의해 수집 된 데이터를 직접 출력하는 유틸리티입니다.

blktrace  개념도

보이는 바와 같이 Block I/O Layer 단에서 발생하는 이벤트를 CPU 단위로 tracing을 하게 되고 blktrace -> blkparse -> btt -> seekwatcher로 이용해서 분석하게 됩니다. 

 

blkparser : blktrace를 통해 발생하는 CPU별 바이너리 코드 Parsing 해주는 도구 입니다.

btt : btt는 blktrace라는 블록 계층 IO 추적 도구의 사후 처리 도구입니다.

seekwatcher : blktrace내용을 그림(png) 형냍로 분석해주는 도구

 

blktrace 사용법

# blktrace -d /dev/sdp -o trace -w 10
=== sdp ===
  CPU  0:                 8780 events,      412 KiB data
  CPU  1:                 3173 events,      149 KiB data
  CPU  2:                 3600 events,      169 KiB data
  CPU  3:                 1445 events,       68 KiB data
  CPU  4:                 4604 events,      216 KiB data
  CPU  5:                 3764 events,      177 KiB data
  CPU  6:                 1152 events,       54 KiB data
  CPU  7:                 1142 events,       54 KiB data
  CPU  8:                  335 events,       16 KiB data
  CPU  9:                  936 events,       44 KiB data
  CPU 10:                 1470 events,       69 KiB data
  CPU 11:                  385 events,       19 KiB data
  Total:                 30786 events (dropped 0),     1444 KiB data

Blkparsing 사용법

#blkparse -i trace.blktrace.* -d sdp.bin

  ...
Total (trace):
 Reads Queued:       4,833,  117,316KiB     Writes Queued:           0,        0KiB
 Read Dispatches:    4,833,  117,316KiB     Write Dispatches:        0,        0KiB
 Reads Requeued:         0         Writes Requeued:         0
 Reads Completed:    4,828,  116,829KiB     Writes Completed:        0,        0KiB
 Read Merges:            0,        0KiB     Write Merges:            0,        0KiB
 IO unplugs:             0             Timer unplugs:           0

Throughput (R/W): 11,692KiB/s / 0KiB/s
Events (trace): 28,993 entries
Skips: 0 forward (0 -   0.0%)

 

 

Btt 사용법

# btt -i sdp.bin | more
==================== All Devices ====================

            ALL           MIN           AVG           MAX           N
--------------- ------------- ------------- ------------- -----------

Q2Q               0.000002693   0.002064896   0.224947065        4832
Q2G               0.000000289   0.000010970   0.010791768       57996
G2I               0.000000214   0.000000961   0.000033457       57996
I2D               0.000000160   0.000005564   0.005938405       57108
D2C               0.000135164   0.003013303   0.035674715        4805
Q2C               0.000168496   0.003040692   0.035678620        4828

==================== Device Overhead ====================

       DEV |       Q2G       G2I       Q2M       I2D       D2C
---------- | --------- --------- --------- --------- ---------
 (  8,240) |   4.3338%   0.3797%   0.0000%   2.1643%  98.6272%
---------- | --------- --------- --------- --------- ---------
   Overall |   4.3338%   0.3797%   0.0000%   2.1643%  98.6272%

==================== Device Merge Information ====================

       DEV |       #Q       #D   Ratio |   BLKmin   BLKavg   BLKmax    Total
---------- | -------- -------- ------- | -------- -------- -------- --------
 (  8,240) |    57996    57996     1.0 |       25       48      256  2830284

==================== Device Q2Q Seek Information ====================

       DEV |          NSEEKS            MEAN          MEDIAN | MODE           
---------- | --------------- --------------- --------------- | ---------------
 (  8,240) |            4833        712982.8               0 | 0(2296)
---------- | --------------- --------------- --------------- | ---------------
   Overall |          NSEEKS            MEAN          MEDIAN | MODE           
   Average |            4833        712982.8               0 | 0(2296)

==================== Device D2D Seek Information ====================

       DEV |          NSEEKS            MEAN          MEDIAN | MODE           
---------- | --------------- --------------- --------------- | ---------------
 (  8,240) |           57996         59415.2               0 | 0(55458)
---------- | --------------- --------------- --------------- | ---------------
   Overall |          NSEEKS            MEAN          MEDIAN | MODE           
   Average |           57996         59415.2               0 | 0(55458)

==================== Plug Information ====================

       DEV |    # Plugs # Timer Us  | % Time Q Plugged
---------- | ---------- ----------  | ----------------

       DEV |    IOs/Unp   IOs/Unp(to)
---------- | ----------   ----------
 (  8,240) |        0.0          0.0

==================== Active Requests At Q Information ====================

       DEV |  Avg Reqs @ Q
---------- | -------------
 (  8,240) |           0.0
...

seekwatcher 

#> ./seekwatcher -t [device]_blktrace.* 

seekwatcher 예제

 

※ btt 분석방법

Q2Q — 요청이 블록 계층으로 전송 된 시간
Q2G — 블록 I / O가 큐에서 대기 한 후 요청이 할당 될 때까지 걸리는 시간
G2I — 요청이 할당 된 시간부터 장치의 대기열에 삽입되는 시간까지 소요되는 시간
Q2M — 블록 I / O가 대기열에있는 시간에서 기존 요청과 병합 될 때까지 걸리는 시간
I2D — 요청이 장치의 대기열에 삽입 된 후 장치에 실제로 발행되는 시간까지 걸리는 시간
M2D — 블록 I / O가 종료 요청과 병합 된 시간부터 요청이 장치에 발행 될 때까지 걸리는 시간
D2C — 장치가 요청한 서비스 시간
Q2C — 요청을 위해 블록 레이어에서 보낸 총 시간

 

※ IO sequence

※ Block IO Tuning Point

1. Q2Q는 Q2C보다 훨씬 큽니다. 즉, 응용 프로그램이 연속적으로 I / O를 발행하지 않습니다. hus, 성능 문제가 I / O 하위 시스템과 전혀 관련이 없을 수도 있습니다.
2. D2C가 매우 높으면 요청을 처리하는 데 시간이 오래 걸립니다. 이는 장치가 단순히 오버로드 된 것 (공유 리소스라는 사실 때문일 수 있음)이거나 장치로 전송 된 작업 부하가 최적화되지 않았기 때문일 수 있습니다.
3. Q2G가 매우 높으면 동시에 대기중인 많은 요청이 있음을 의미합니다. 이는 스토리지가 I / O로드를 유지할 수 없음을 나타낼 수 있습니다.
4. iostat 출력 대기 = Q2C = Q2I + I2D + D2C
5. Q2I + I2D == 스케줄러 시간
6. I2D 시간에는 일정 정렬 대기열 내에서 io의 병합을 개선하는 데 사용되는 플러그 앤 플러그 해제 이벤트 (위에 표시되지 않음)로 인해 많은 추가 시간이 포함될 수 있습니다.
7. D2C 시간은 드라이버 시간, 어댑터 시간, 전송 시간 및 스토리지 서비스 시간 (및 뒤로)을 포함
따라서 D2C / Q2C가 1에 가까워지면 스토리지 구성 요소에 소요되는 시간이 높은 것을 의미합니다.
8. D-> C 시간이 높으면 스위치 카운터 또는 스토리지 박스 자체의 유지 보수 인터페이스와 같은 스토리지의 기본 전송 구조를 검사해야합니다.

 

반응형

+ Recent posts