시스템에서 수신한 쓰기 대역폭 값이 있고 BW를 사용하여 쓰기 IOPS를 계산해야 합니다.
Bandwidth = amount of data / second
http://rickardnobel.se/storage-performance-iops-latency-throughput/
위의 링크에 따라 다음 공식을 관찰했습니다.
Average IO Size * IOPS = Bandwidth
따라서 내 이해가 정확하다면 평균 IO 크기가 있으면 IOPS를 계산할 수 있습니다.
예:
평균 IO 크기는 4KB, 대역폭 = 32KB,
IOPS = Bandwidth / Average IO Size
IOPS = 32KB / 4KB
IOPS = 8
두 가지 질문이 있습니다.
1) 맞나요?
2) 정의에 따르면,평균 IO 크기실행 중인 OS 및 애플리케이션/서비스에 따라 다르므로 이 평균 IO 크기를 얻는 방법에 대해 자세히 설명할 수 있는 사람이 있습니까? 이렇게 하면 IOPS를 얻을 수 있습니다.
답변1
IOPS - 초당 입력/출력 작업
따라서 실제로는 매우 대략적으로 다음과 같이 추정될 수 있습니다.
대역폭/(평균 트랜잭션 블록 크기 + 통신 오버헤드)
모든 체크섬과 프로토콜 캡슐화가 포함된 페이로드는 매우 클 수 있으며 실제 I/O 트랜잭션은 하드웨어 수준에서 일괄 처리되므로 소프트웨어 관점에서 이러한 작업이 보이지 않게 됩니다.
AHCI 모드와 PATA 모드를 비교해 보면 ATA 명령 세트를 추가로 캡슐화하는 것만으로도 약 2.5의 오버헤드가 발생합니다. 명령 대기열이 동기식이므로 추가 드라이브 헤드 이동을 최적화할 수 없습니다. 일부 AHCI NCQ 최적화가 실패할 수 있습니다.
SSD인 경우 SSD는 대략적인 데이터만 저장하여 시간이 지남에 따라 성능이 저하되고 하드웨어 컨트롤러의 IO 실행 계획을 예측해야 하며 그 중 일부는 실패할 수 있으므로 상황을 더욱 예측할 수 없습니다.
요즘에는 블록 디바이스에서 실제 IOPS를 측정하는 것이 상당히 번거로워졌습니다. 따라서 블록 장치에 IOPS 카운터의 하드웨어 구현이 없으면 소프트웨어 수준에서 이를 측정하는 것이 사실상 불가능합니다.
대략적인 추정치에 대해 이야기하는 경우 NVMe 컨트롤러 IOPS 계산 정확도는 현재 약 +/- 10K IOPS일 것입니다.