/dev/zero에서 읽은 데이터가 IO_RBYTES로 계산되지 않는 이유는 무엇입니까?

/dev/zero에서 읽은 데이터가 IO_RBYTES로 계산되지 않는 이유는 무엇입니까?

다음 명령을 사용하여 일부 Linux 4.x 운영 체제에서 하드 드라이브를 지우고 있습니다.

sudo sh -c 'pv -pterb /dev/zero > /dev/sda'

나는 또 다른 tty를 열고 시작 sudo htop하고 이것을 발견했습니다.

  PID USER      PRI  NI CPU%   RES   SHR   IO_RBYTES   IO_WBYTES S   TIME+  Command
 4598 root       20   0 15.5  1820  1596        4096    17223823 D  1:14.11 pv -pterb /dev/zero

값은 IO_WBYTES정상으로 보이지만 IO_RBYTES4KiB로 유지되며 절대 변경되지 않습니다.

나는 다음과 같은 다른 프로그램을 실행했습니다.

dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero

IO_RBYTES그리고 그들 중 어느 것도 많은 성과를 내지 못했다 는 사실에 놀랐습니다 IO_WBYTES.

이것이 특정 프로그램에만 해당되는 것은 아닌 것 같은데, 읽기 및 쓰기가 I/O 바이트로 계산 /dev/zero되지 않는 이유는 무엇입니까?/dev/{zero,null}

답변1

I/O로 계산되지만 보고 있는 필드로 측정된 유형은 아닙니다.

블록 레이어를 통과하는 바이트를 측정하는 htop, IO_RBYTES및 의 및 필드를 IO_WBYTES표시합니다 . read_bytes블록 레이어는 관련되지 않으므로 해당 레이어에서 읽은 내용은 표시되지 않습니다.write_bytes/proc/<pid>/io/dev/zero

의 I/O를 보려면 /dev/zero의 및 필드를 확인해야 합니다. 해당 필드 rchar는 및 와 같이 나타납니다.wchar/proc/<pid>/iohtopRCHARWCHAR

문자 유형: 읽은 문자

이 작업으로 인해 스토리지에서 읽은 바이트 수가 나타났습니다. 이는 단순히 프로세스에 전달된 바이트의 합계입니다.read(2)그리고 유사한 시스템 호출. 여기에는 터미널 I/O 등이 포함되며 실제 물리적 디스크 I/O가 필요한지 여부에 영향을 받지 않습니다(읽기는 페이지 캐시에서 이미 충족되었을 수 있음).

문자 유형: 쓰여진 문자

이 작업으로 인해 디스크에 기록되었거나 기록되어야 했던 바이트 수입니다. rchar와 유사한 경고가 여기에 적용됩니다.

바라보다man 5 proc그리고man 1 htop더 알아보기.

관련 정보