IOPS (Input/Output Operation Per Second) 는 초당 처리되는 I/O 의 갯수라고 이해하면 된다.
보통 저장장치의 속도를 나타낼 때의 측정단위이다.
IOPS 가 1000 이라고 하면 1초에 1000 * 블럭크기 만큼의 IO 가 가능하다고 할 수 있다.
디스크가 데이터를 읽고 쓰는 데 걸리는 시간이며, 각 I/O 작업 중에 읽은 정보의 양 이라고 이해하면 된다.
초당 데이터 전송량 = IOPS * 블럭크기(단위 데이터 용량)
IOPS = 초당 데이터 전송량 / 블럭크기(단위 데이터 용량)
여기서 블럭의 크기를 아는것이 중요한 부분이다. 블럭이란 IO 의 최소 단위이다.
Oracle, PostgreSQL, MS-SQL 의 경우 8KB 이며, MySQL, MariaDB 는 16KB 가 기본이다.
8KB * 2000 = 16,000KB = 16,000/1,024 = 15.6MB
1초에 15.6 MB 통신이 가능하다는 이야기가 된다. 이 부분은 인스턴의 타입에 따라 네트워크 대역폭과 EBS 대역폭이 제한이 될 수도 있는 점을 참고 해야한다.
EC2 Instance Type, Spec 설명
EC2 Instance Type, Spec
위 링크에서 각 인스턴스의 네트워크 대역폭과 EBS 의 대역폭을 확인할 수 있음.
Bandwitdh(대역폭)은 네트워크에서 특정 시간 내에 전송 될 수 있는 데이터의 최대 용량을 의미한다.
네트워크의 대역폭이 높을수록, 한번에 더 많은 데이터가 전송 될 수 있다.
주의할 점은 대역폭이 네트워크의 실질적인 성능을 나타내지는 않는다는 것이다.
Bandwidth를 'Data speed(속도)' 및 'Data throughput(처리량)'과 혼동해서는 안된다.
Throughput은 네트워크에서 초당 실제로 처리되는 패킷의 양을 나타내는 실용적인 지표이다.
반면 Bandwidth은 네트워크에서 잠재적으로 동시에 전송될 수 있는 데이터의 최대치를 나타낸다.
% aws ec2 describe-instance-types \
--query 'InstanceTypes[].{InstanceType:InstanceType,"MaxBandwidth(Mb/s)":EbsInfo.EbsOptimizedInfo.MaximumBandwidthInMbps,MaxIOPS:EbsInfo.EbsOptimizedInfo.MaximumIops,"MaxThroughput(MB/s)":EbsInfo.EbsOptimizedInfo.MaximumThroughputInMBps}' \
--filters Name=ebs-info.ebs-optimized-support,Values=default --output=table
위 명령어를 통해 현재 리전에서 EBS 최적화를 지원하는 인스턴스 유형을 확인할 수 있다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-optimized.html