지난 한 시간 동안 블록 장치에 대한 읽기/쓰기 요청의 양을 추적할 수 있는 도구가 Linux에 있습니까?

지난 한 시간 동안 블록 장치에 대한 읽기/쓰기 요청의 양을 추적할 수 있는 도구가 Linux에 있습니까?

입력 데이터를 가져와서 처리하고 블록 장치에 데이터를 쓰는 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- 장치 보고서만 표시됩니다. (이 보고서가 없으면 iostatCPU 사용률도 표시됩니다.)
  • -y- 시스템 시작 후 첫 번째 통계 보고서를 생략합니다. 간격 사이의 활용도만 보고됩니다.
  • -h- 장치 사용률 보고를 사람이 더 읽기 쉽게 만듭니다(필요한 경우 kB뿐만 아니라 MB/GB).
  • 10- 간격은 초 단위이며, 이 경우에는 10초마다입니다. 매시간 확인하고 싶다면 3600을 사용하세요.

관련 정보