버퍼 캐시 적중을 포함하여 커널에서 전체 블록 장치 IO를 가져옵니다.

버퍼 캐시 적중을 포함하여 커널에서 전체 블록 장치 IO를 가져옵니다.

저는 Linux에서 시스템 통계를 표시하는 도구를 만드는 중입니다. 작동 방식을 이해하기 위해 /sys 및 /proc API를 사용했습니다.

현재 저는 /sys/block/<dev>/stat블록 장치 통계를 얻기 위해 읽고 있습니다(문서). 이는 디스크에서 얼마나 많은 읽기 및 쓰기가 발생하는지 확인하는 데 유용하지만 애플리케이션 관점에서 전체 블록 장치 I/O를 확인하는 것이 가능한지 궁금합니다.

내가 의미하는 바를 보여주는 예는 다음과 같습니다.

> cat somebigfile > /dev/zero # Takes some time, triggers device I/O
> cat somebigfile > /dev/zero # Runs quickly a second time, no device I/O

두 실행 사이의 차이점은 두 번째 읽기를 위해 커널이 디스크 대신 버퍼 캐시로 이동하기 때문이라고 생각합니다. 캐시를 플러시하여 /proc/sys/vm/drop_caches처음처럼 명령을 다시 실행하여 이를 확인했습니다.

일정 기간 동안 블록 장치에서 읽은 총 바이트 수(버퍼 캐시에서 제공되는 바이트 포함)를 확인하는 가장 쉬운 방법은 무엇입니까?

의 값을 합산하는 것도 고려했는데 /proc/<pid>/io, 여기에는 모든 I/O가 포함되며 장치나 유형별로 분할되지 않습니다.

나는 다음과 같은 것을 사용하여 이 작업을 수행할 수 있다는 것을 알고 있습니다.시스템 클릭, 하지만 더 쉬운 방법이 있는지 궁금합니다.

답변1

몇 년 전에 저는 "통계 수집기" 서비스를 작성했습니다.디스크 상태 읽기 및 쓰기.

값을 사용한 /sys/block/<dev>/stat후 바이트로 변환했습니다.

애플리케이션 관점에서 보면,cgroup굉장히 유용하다. 다양한 애플리케이션을 그룹으로 배치할 수 있습니다.블키오'하고 'blkio.io_service_bytes' 카운터를 읽습니다.

관련 정보