실제 입력되는 데이터를 포함한 disk trace 얻기
안녕하십니까 현재 디스크와 관련하여 이제 막 연구를 시작한 석사 대학원생입니다
제가 원하는 연구를 하려면 disk IO trace가 필요한데
문제는 timestamp나 address 등 이외에 실제 디스크 블록에 입력되는 데이터도 함께 얻어야 한다는 점입니다.
만 하루 정도 blktrace + blkparse + iozone를 이용하여 trace를 뽑는 방법에 대해 삽질해 보았는데
실제 blkparse로 -f 옵션을 사용하여 출력 형식을 포맷팅 하면 hex형태로 Packet data를 얻을 수 있다고 문서에는 나와있는데
실제로 사용해 보면 출력되지 않습니다...
다른 PID나 timestamp address 등의 정보는 잘 출력 되는데 "%P"포맷을 사용하는 Packet data만 출력이 되지 않습니다.
구현된 소스코드를 살짝 뜯어봐도 얼추 구현은 되어 있는 것고 Packet data의 길이가 0이면 출력하지 않도록 되어 있는데
이제 항상 길이가 0이어서 출력을 안하는 건지 뭔가 구현이 잘못된 건지 확인이 어렵습니다...
trace를 얻기 위해 사용한 명령은 다음 두 줄입니다.
$> sudo blktrace -a issue -d /dev/sda -o - | blkparse -i - -o ./temp/blktrace.sdb.ext4.iozone -f "%s\t%t\t%D\t%a\t%c\t%-12C\t\t%p\t%d\t%S:%n:%N\t\t%P\n" $> iozone -w -e -s 1M -f ./mnt/iozone.dummy -i 0
그리고 문서도 구버전 문서에서는 Packet data라고 나오고 최근 버전에서는 PDU라고 나오던데
disk IO에서 말하는 PDU가 무엇인지도 잘 모르겠습니다...
질문을 정리하자면
1. blktrace 혹은 다른 방법을 통해 실제 입력되는 데이터를 포함한 disk trace 얻을 수 있는 방법이 있습니까?
2. disk IO 상에서 말하는 PDU라는 것은 무엇을 뜻합니까?
조언을 구해 봅니다. 긴 글 읽어주셔서 감사합니다.
자답입니다.
blktrace로는 IO 시에 실제로 입력되는 데이터 정보를 얻을 수 없습니다.
-f 옵션에서 "%P" 포맷으로 출력하는 packet data(PDU)는 SCSI commands 통한 pc request가 전달될 때 해당 패킷을 통채로 읽는 포맷입니다.
보통은 SCSI commands가 아닌 File system command에 의해 fs requests가 발생하기 때문에 출력되지 않는 것이었습니다.
문서를 더 꼼꼼히 읽었으면 금방 파악할 수 있는 내용이었는데 급한 마음에 대충 읽어서 한참을 돌아가는 사태를 낳았네요...
(참조: http://www.cse.unsw.edu.au/~aaronc/iosched/doc/blktrace.html, 140122)
댓글 달기