출력을 이해할 수 없습니다 iotop
. 약 1.5MB/s의 디스크 쓰기(오른쪽 상단)가 표시되지만 모든 프로그램은 0.00B/s를 얻습니다. 왜?
이 영상은 수백만 개의 파일이 들어있는 폴더의 내용을 삭제하는 동안 찍은 것입니다.사용 perl -e 'for(<*>){((stat)[9]<(unlink))}'
, 쿠분투 14.04.3 LTS x64.
iotop
을 사용하는 것입니다 sudo iotop
.
답변1
iotop에 표시되는 정보는 개별 프로세스와 전체 시스템에 대해 다르게 수집됩니다. "실제" 전역 데이터는 각 프로세스 데이터의 합계(즉 "전체")가 아닙니다.
모든 정보는 다음에서 수집됩니다.프로세스 파일 시스템.
- 각 프로세스에 대해 iotop은 iotop에서 데이터, 특히 합계 값을 읽습니다. 전달된 바이트 수와 시스템 호출( , , , 등의 변형 포함)입니다.
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- 전역 "실제" 값
/proc/vmstat
, 특히pgpgin
합계pgpgout
값을 읽습니다. 커널과 하드웨어 사이에 교환되는 데이터를 측정합니다(보다 정확하게는 커널의 블록 장치 계층에서 섞인 데이터입니다).
프로세스별 데이터와 블록 장치 계층 데이터가 다른 데는 여러 가지 이유가 있습니다. 특히:
- 캐싱 및 버퍼링은 한 계층에서 발생하는 I/O가 다른 계층에서 동시에 또는 동일한 횟수로 발생하지 않을 수 있음을 의미합니다. 예를 들어, 캐시에서 읽은 데이터는 이에 액세스하는 프로세스에서 읽은 것으로 간주되지만 하드웨어에서는 해당 읽기가 없습니다(이전에는 다른 프로세스를 대신하여 발생했을 수 있음).
- 프로세스 수준 데이터에는 기본 디스크나 기타 블록 장치를 포함하지 않는 파이프, 소켓 및 기타 입력/출력에서 교환되는 데이터가 포함됩니다.
- 프로세스 수준 데이터는 메타데이터가 아닌 파일 콘텐츠만 고려합니다.
이 마지막 차이점은 여기에 표시되는 내용을 설명합니다. 파일을 삭제하면 데이터가 아닌 메타데이터에만 영향을 미치므로 프로세스에서는 아무 것도 기록되지 않습니다. 삭제할 파일을 나열하기 위해 디렉토리 내용을 읽는 것일 수도 있지만, 눈에 띄지 않게 스크롤될 수 있을 만큼 크기가 작습니다.
나는 Linux가 파일 메타데이터 업데이트를 모니터링하는 방법을 제공하지 않는다고 생각합니다. /sys/fs
특정 파일 시스템 아래의 항목을 통해 각 파일 시스템에 대한 I/O를 모니터링 할 수 있습니다 . 특정 프로세스에 대한 메타데이터 I/O를 계산할 수는 없다고 생각합니다. 여러 프로세스로 인해 동일한 메타데이터를 읽거나 변경할 수 있으므로 일반적인 경우 그렇게 하는 것은 매우 복잡할 것입니다.