磁盘 IO

Linux 磁盘 IO

磁盘是一个扁平的圆盘(与电唱机的唱片类似),盘面上有许多称为磁道的圆圈,数据就记录在这些磁道上。磁盘可以是单片的,也可以是由若干盘片组成的盘组,每一盘片上有两个面。如下图中所示的 6 片盘组为例,除去最顶端和最底端的外侧面不存储数据之外,一共有 10 个面可以用来保存信息。

IO 类别

不同应用通常具有不同的 IO 类型,了解应用的 IO 类型是为其设计解决方案、排错性能问题的首要工作。那 IO 类型通常包括哪些需要考虑的因素?我们今天就来谈一谈 IO 类型的几个重要方面。

读 vs. 写

 应用程序的读写请求必须量化,了解他们之间的比列,因为读写对存储系统的资源消耗是不通的。了解读写比率直接关系到如何应用缓存、RAID类型等子系统的最佳实践。写通常需要比读更多的资源,SSD的写操作相对读更是慢得多。

顺序 vs. 随机

 传统存储系统通常都是机械硬盘,因此整个系统设计为尽可能顺序化IO,减少由于磁盘寻道所带来的延迟。所以,顺序IO相对随机IO的性能会好很多。随机小IO消耗比顺序大IO更多的处理资源。随机小IO更在意系统处理IO的数量,即IOPS;而顺序大IO则更在意带宽,即MB/s。因此,如果系统承载了多种不同的应用,必须了解它们各自的需求,是对IOPS有要求,还是对带宽有要求。这往往需要在两种之间进行折衷考虑。闪盘是一个例外,它没有机械寻道操作,因此对随机小IO的处理是非常迅速的,由此是读操作。

大 IO vs. 小 IO

 我们通常把<=16KB的IO认为是小IO,而>=32KB的IO认为是大IO。就单个IO来讲,大IO从微观的角度相比小IO会需要更多处理资源,不过对于智能存储系统来说,会尽可能把IO整理为顺序的,以单个操作执行,如此依赖,将多个小IO整理成单个大IO处理后,反而会更快。IO的大小依然取决于应用程序本身,了解IO的大小,影响到后期对缓存、RAID类型、LUN的一些属性的调优。

位置引用

 数据的位置分布影响到后期对二级缓存或存储分层技术的应用,因为这些技术都会根据IO的位置分布来判断是否将IO放置到缓存或快速的层级。位置引用是指那些被频繁的存储位置,我们通常认为最新创建的数据以及最近被访问过的数据,它们周围的数据也同时被访问的可能性会比较大。因此,了解应用程序的IO位置特性,有助于应用正确的性能优化技术。

稳定 vs. 爆发

 IO数量在一天中的不同时段会有不同的表现。例如,早高峰时段的IO数量相比下班后的IO会多出许多。如果能准确预测和估计应用的IO在不同时间段的稳定性和爆发性,可以正确分配资源,提高资源利用率。在前期的设计阶段,就应该考虑系统是否能够处理IO高峰期。

多线程 vs. 单线程

 多线程是实现并发操作的一种方式,同时也意味着对存储系统的资源消耗更多。这种高IOPS的请求方式,在有些情况下会造成磁盘繁忙,进而导致IO排队,增加了响应时间。因此,适度的调整线程数量,不仅可以实现并发,而且能在不拖累整个存储系统的情况下,达到最优的响应时间。

image

Links