저는 응용 프로그램이 순차 I/O를 수행하는지 아니면 임의 I/O를 수행하는지 확인하는 방법을 찾고 있습니다. blktrace 캡처를 보고 I/O가 순차적인지 무작위인지 알 수 있습니까? 그렇다면 어떤 패턴을 찾아야 합니까?
답변1
이 정보를 얻으려면 blktrace
+를 사용하는 것이 가능한 것 같습니다 . blkparse
U&L Q&A에 포함된 차트를 살펴보십시오.Linux 커널 및 성능 도구 그래프?, 특히 이 섹션.
blktrace
이런 데이터를 보여드릴 수 있는 위치에 있는 것 같습니다. 매뉴얼 페이지를 보면 출력에 숫자를 포함 blkparse
할 수 있다고 명시되어 있습니다 .sector
OUTPUT DESCRIPTION AND FORMATTING
The output from blkparse can be tailored for specific use -- in
particular, to ease parsing of output, and/or limit output fields
to those the user wants to see. The data for fields which can be
output include:
a Action, a (small) string (1 or 2 characters) -- see table below
for more details
c CPU id
C Command
...
s Sequence numbers
S Sector number
예
$ sudo blktrace /dev/sda
Ctrl + C
그런 다음 다음을 사용하여 분석하십시오 blkparse
.
$ blkparse sda -f "%-10S %D %2c %8s %5T.%9t %5p %2a %3d\n" | head -10
4064336 8,0 3 1 0.000000000 2779 A R
5090384 8,0 3 2 0.000000404 2779 A R
5090384 8,0 3 3 0.000001656 2779 Q R
5090384 8,0 3 4 0.000010042 2779 G R
5090384 8,0 3 5 0.000013714 2779 I R
8,0 3 0 0.000019067 0 m N cfq2779SN / insert_request
8,0 3 0 0.000021085 0 m N cfq2779SN / add_to_rr
8,0 3 0 0.000026848 0 m N cfq2779SN / set_active wl_class:2 wl_type:1
8,0 3 0 0.000029175 0 m N cfq2779SN / fifo= (null)
8,0 3 0 0.000030077 0 m N cfq2779SN / dispatch_insert
보고할 부문이 있는 경우 쉼표 없이 숫자(예: 4064336)로 표시됩니다. 따라서 이론적으로는 섹터 번호가 연속인지 무작위인지 확인할 수 있습니다.
어려운 부분은 어떤 응용 프로그램이 낮은 수준에서 어떤 I/O 이벤트를 발생시켰는지 확인하는 것입니다. 이 문제를 해결하려면 fatrace
이 U&L Q&A에서 자세히 설명한 다음 도구를 사용할 수 있습니다 .높은 I/O를 담당하는 특정 파일 식별.