입력 데이터를 가져와서 처리하고 블록 장치에 데이터를 쓰는 Linux 프로그램에 대한 성능 실험을 하고 있습니다.
입력에 얼마나 많은 데이터가 있는지(예: 1GB) 알고 있지만, 프로그램이 이를 처리하기 때문에(일부 중간 데이터 삭제, 추가 데이터 쓰기 포함) 블록 장치에 기록되는 데이터의 양을 정확히 알지 못합니다. 따라서 이는 블록 장치의 전체 처리량을 계산하는 데 해롭습니다.
사용해 봤지만 blktrace
쉽게 많은 데이터를 얻을 수 있고 이것이 1시간이 지나도록 작동할지는 잘 모르겠습니다.
IO 장치를 벤치마크하는 것이 가능하다는 것을 알고 있지만 FIO
특히 이 프로그램에서 블록 IO 장치 동작을 테스트하고 싶습니다. 그래서 기본적으로 저는 실제로 블록 IO 장치뿐만 아니라 블록 IO 장치와 프로그램의 조합을 테스트하고 있습니다.
du -sh
이 접근 방식도 고려했지만 du -sh
삭제된 데이터의 양을 캡처할 수 없었습니다. 또한 du -sh
물리적 장치에 기록된 데이터를 캡처할 수 있습니까? 즉, 파일 시스템이 아닙니다.
사용할 수 있는 다른 도구가 있나요?
답변1
시간당 읽기/쓰기 총 바이트가 필요한 경우 iostat
이를 제공할 수 있습니다.
$ iostat sda -tdyh 10
Linux 4.12.14-122.136-default (hostname) 05/22/2023 _x86_64_ (18 CPU)
05/22/2023 12:56:22 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
2.30 0.0k 14.8k 0.0k 148.0k sda
05/22/2023 12:56:32 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
412.00 0.0k 102.5M 0.0k 1.0G sda
05/22/2023 12:56:42 PM
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
420.80 102.4M 104.8k 1.0G 1.0M sda
kB_read
그리고 kB_wrtn
각각 읽거나 쓴 총 블록 수를 표시합니다. 먼저 다음을 보여줍니다.
- ~ 사이12:56:22그리고12:56:32디스크에 1GB가 기록되었습니다.
- ~ 사이12:56:32그리고12:56:42디스크에서 1GB를 읽었습니다.
dd
( 이 숫자를 생성하고 올바른 보고를 보장하기 위해 디스크에 1G 파일을 쓰거나 읽는 명령을 사용했습니다 )
내가 사용한 플래그:
-t
- 각 보고서에 표시된 시간을 인쇄합니다.-d
- 장치 보고서만 표시됩니다. (이 보고서가 없으면iostat
CPU 사용률도 표시됩니다.)-y
- 시스템 시작 후 첫 번째 통계 보고서를 생략합니다. 간격 사이의 활용도만 보고됩니다.-h
- 장치 사용률 보고를 사람이 더 읽기 쉽게 만듭니다(필요한 경우 kB뿐만 아니라 MB/GB).10
- 간격은 초 단위이며, 이 경우에는 10초마다입니다. 매시간 확인하고 싶다면 3600을 사용하세요.