在给定磁盘卷其他设置参数的情况下,I/O特性决定着整块磁盘的性能。预分配IOPS的EBS卷提供连续性的性能表现,无论I/O操作是随机的还是顺序的,也无论I/O操作是读还是写。由于测量方法的不同,读写操作的块大小也对IOPS表现数值造成影响。为了彻底了解预分配IOPS的EBS和它如何影响你的业务,我们需要知道什么是IOPS以及它是如何测量的。
什么是IOPS以及如何测量它?
IOPS就是每秒的读写操作。
亚马逊EBS使用16KB的快大小来衡量EBS的IO表现。
当你创建一块预设IOPS为4000的EBS磁盘,并把他挂载到优化EBS的实例上(EBS-optimized instance,优化EBS的EC2实例链接EBS的IO通道是是专用的,可以保证足够的IO带宽),你可以每秒传输4000个16KB大小的块。(这样大概IO带宽就是62.5MBps,或者500Mbps)(这个IOPS 4000就是这个衡量出来的)。
这样的性能配置能够每秒传输2000个32KB的块,或者每秒1000个64KB的块,上限应该约等于每秒传输4000个16KB大小的块。(那传输4KB大小的块,是不是就能每秒传输16000个呢?)
当块大小大于16KB是,你的IOPS数值就变小,但是此时实例到EBS的IO带宽还是等于你传输16KB块对应IOPS数值时候的表现。当操作的块大小为16KB或者更小时,你能得到你预设的IOPS数值的表现。对于更小的块操作,你可能会看到超过你预设的IOPS数值的表现(在客户端测量时),这是因为有的客户端会将小的快合并成一个16KB大小的块来传输。
如果你得到的IOPS数值小于你预设的IOPS,这可能是因为你的EC2实例带宽是IO性能的瓶颈:你的实例得是EBS优化型实例,或者是拥有明确标注为10Gbps的网卡的类型的实例,而且你的EBS磁盘的IO带宽至少得超过你预设的IOPS。另一个你没有得到你预设的IOPS数值的原因很可能是因为你读写操作次数根本就没达到磁盘的上限,这样也就没法测量出EBS卷的真实IOPS表现。