1.5MB / s의 디스크 쓰기를 보여주는 iotop이지만 모든 프로그램의 0.00 B / s 디스크 쓰기 (오른쪽

iotop출력을 이해하지 못합니다 . ~ 1.5MB / s의 디스크 쓰기 (오른쪽 상단)를 보여 주지만 모든 프로그램에는 0.00B / s가 있습니다. 왜?

여기에 이미지 설명을 입력하십시오

Kubuntu 14.04.3 LTS x64에서을 사용하여 수백만 개의 파일이있는 폴더의 내용을 삭제하면서 비디오가 촬영되었습니다 perl -e 'for(<*>){((stat)[9]<(unlink))}'.

iotop를 사용하여 시작되었습니다 sudo iotop.



답변

iotop으로 표시되는 정보는 개별 프로세스와 시스템 전체에 대해 동일한 방식으로 수집되지 않습니다. “실제”글로벌 수치는 프로세스 별 수치의 합계가 아닙니다 ( “전체”).

모든 정보는 proc 파일 시스템 에서 수집됩니다 .

  • 각 프로세스에 대해 iotop은 및 특히 값 에서 데이터를 읽습니다 . 다음은 전달 된 바이트 수 있습니다 및 시스템 호출 (를 포함하여 같은 변형 , , , , 등)./proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • 전역 “실제”값 /proc/vmstat, 특히 pgpginpgpgout값을 읽습니다 . 이들은 커널과 하드웨어간에 교환되는 데이터를 측정합니다 (보다 정확하게는 커널의 블록 장치 계층에 의해 섞인 데이터입니다).

프로세스 별 데이터와 블록 디바이스 계층 데이터가 다른 많은 이유가 있습니다. 특히:

  • 캐싱 및 버퍼링은 한 계층에서 발생하는 I / O가 다른 계층에서 동시에 또는 같은 횟수로 발생하지 않을 수 있음을 의미합니다. 예를 들어, 캐시에서 읽은 데이터는 액세스하는 프로세스에서 읽은 것으로 간주되지만 하드웨어에서 이미 읽은 것은 없습니다 (이미 다른 프로세스를 대신하여 이미 발생 했음).
  • 프로세스 수준 데이터에는 파이프, 소켓 및 기본 디스크 나 다른 블록 장치와 관련이없는 기타 입력 / 출력에서 ​​교환 된 데이터가 포함됩니다.
  • 프로세스 수준 데이터는 메타 데이터가 아닌 파일 내용 만 설명합니다.

마지막 차이점은 여기서보고있는 것을 설명합니다. 파일을 제거하면 데이터가 아닌 메타 데이터에만 영향을 미치므로 프로세스가 아무것도 쓰지 않습니다. 삭제할 파일을 나열하기 위해 디렉토리 내용을 읽는 중일 수 있지만 눈에 띄지 않게 스크롤 할 수있을 정도로 작습니다.

리눅스가 파일 메타 데이터 업데이트를 모니터링하는 방법을 제공하지 않는다고 생각합니다. /sys/fs일부 파일 시스템의 항목을 통해 파일 시스템 별 I / O를 모니터링 할 수 있습니다 . 특정 프로세스에 대해 메타 데이터 I / O를 설명 할 수 없다고 생각합니다. 여러 프로세스로 인해 동일한 메타 데이터를 읽거나 변경할 수 있기 때문에 일반적인 경우에는 수행하기가 매우 복잡합니다.


답변