디스크 IO 로드 비율을 계산하는 방법은 무엇입니까?

디스크 IO 로드 비율을 계산하는 방법은 무엇입니까?

diskIOLA를 사용할 수 없는 것을 볼 수 있듯이 net-snmp 출력은 다음과 같습니다.

SNMP table: UCD-DISKIO-MIB::diskIOTable

diskIOIndex diskIODevice diskIONRead diskIONWritten diskIOReads diskIOWrites diskIOLA1 diskIOLA5 diskIOLA15 diskIONReadX diskIONWrittenX

      25          sda   845276160     2882477056      576632     42597061         ?         ?          ?   5140243456    883350772736

여기 정의에 따르면http://www.net-snmp.org/docs/mibs/ucdDiskIOMIB.html:

디스크IOLAxx분 단위의 평균 디스크 로드(%)를 나타냅니다.

표의 다른 값은 다음과 같습니다.

  • diskIONRead - 부팅 이후 이 장치에서 읽은 바이트 수입니다.
  • diskIONWritten - 부팅 이후 이 장치에 쓴 바이트 수입니다.
  • diskIOReads - 부팅 이후 이 장치에서 읽기 액세스 횟수입니다.
  • diskIOWrites - 부팅 이후 이 장치에 대한 쓰기 액세스 횟수

그러면 이 부하는 서버에 수집되지 않는데 어떻게 수동으로 계산할 수 있을까요?

마지막으로, 디스크 IO가 사용 중인지 확인할 수 있도록 사용자 그래프를 표시하려고 합니다. 읽기/쓰기 바이트/초 또는 읽기/쓰기 요청/초를 사용하여 표시할 수 있습니다.

초당 읽기/쓰기 요청을 개별적으로 표시하면 많은 I/O가 발생하고 있음을 알 수 있습니다. 그러나 디스크 읽기/쓰기 속도가 이로 인해 영향을 받는지는 알 수 없습니다.

단순히 R/W 속도를 표시하는 것만으로는 속도가 영향을 받는 이유를 알 수 없습니다. I/O 작업이 너무 많기 때문인지, 비동기 쓰기를 위한 버퍼 메모리가 부족하기 때문인지도 알 수 없습니다. 그러므로 우리는 둘 다 표시해야 합니다.

그러나 디스크 ILOad의 다른 값은 무엇을 의미하며 어떻게 계산하며 snmp에서 수집되지 않는 이유는 무엇입니까? 이 기능을 활성화하면 부하가 많이 걸리나요? 이 값을 수집하면 큰 부하가 발생하는 경우 수동으로 계산할 수 있습니다. 그런데 공식이 뭔가요?

답변1

제공하신 정보는 디스크 사용률을 계산하기에 충분하지 않습니다. 디스크 사용률(%)은 다음과 같이 계산됩니다 disk_time_spent_in_io / elapsed_time.
예를 들어, 디스크가 IO 수행에 1초 중 0.25초를 소비한다면 디스크 사용률은 25%입니다.

가동률 측면에서 작업 횟수는 의미가 없습니다. 디스크와 수행 중인 IO 유형(일괄 및 무작위)에 따라 10 IOPS 또는 10,000 IOPS에서 100% 활용도를 얻을 수 있습니다. 알 수 있는 유일한 방법은 디스크가 이러한 IOP를 수행하는 데 걸리는 시간을 살펴보는 것입니다.

답변2

해결책을 찾는 각 사람에 대해 iostat는 백분율을 계산합니다 /sys/block/sda/stat. 공식은 대략 다음과 같습니다.

{now,past}_tot_ticks = total time this block device has been active (/sys/block/sda/stat)
{now,past}_uptime = uptime in /proc/uptime (first value)

percentage = (now_tot_ticks - past_tot_ticks) / (now_uptime - past_uptime) / 10

1초 내에 IO 로드 비율을 가져오는 명령:

$ cat \
    <(cat /sys/block/sda/stat && cat /proc/uptime)            \
    <(sleep 1 && cat /sys/block/sda/stat && cat /proc/uptime) \
    | awk -v RS="" '{printf "%.2f%\n", ($27-$10)/($33-$16) / 10}';

추가 자료:
[1]https://www.kernel.org/doc/Documentation/block/stat.txt
[2]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-uptime
[삼]https://github.com/sysstat/sysstat/blob/v11.4.3/iostat.c

관련 정보