不少项目管理员抱怨存储设备的性能不佳。其实根据笔者的了解,大部分项目的症结在于设计。存储项目的设计对于系统性能的影响很大。在实际工作中,我们给用户评估优化方案,往往首先考虑的就是存储项目的设计。简单的说,如果一个存储项目,其设计本身就不是很合理,那么任何的调优方案都会打折扣。对于存储项目的设计,笔者有如下几个建议。
一、什么决定I/O的大小?
存储设备I/O的大小对于系统的性能起着非常关键的因素。不同的项目,对于I/O的要求都是不同的。笔者认为,在系统设计时,主要从以下几个方面来评估所需要I/O的大小。
首先需要注意,每个I/O其实可以分为两部分,分别为固定的开销和变量的开销。通常情况下,变量的开销跟I/O本身的大小有关。而固定开销则跟I/O本身无关。虽然说大的I/O能够提供更少的固定开销,不过这是相对而言的。笔者打一个形象的比喻。如果将固定开销当作一个分子,而将I/O当作分母。在分子不变的情况下,分母变大,其最后的结果自然而燃会降低。但是分子自身是不变的。这里需要注意,对于存储系统而言,大的I/O比小快的I/O能够提供更大的带宽。所以在有条件的企业中,执行大的I/O的时候,后段总线的速度将会成为系统的性能瓶颈。而小块的随机访问应用的瓶颈在于磁盘的个数,并且很少能够达到后端总线速率。
其次,I/O并不是越大越好。对于大部分存储系统,他们在设计时,出于一些因素的考虑,对于I/O的大小有一定的限制。当I/O到了某一个特定的大小的时候,有些操作就会被BYPass掉。如写入缓存的操作。为此I/O决不是越大越好。在应用系统设计时,最好能够预先了解一下各个厂商对这个I/O的限制。否则的话,过度追求I/O的大小,最后却发现是多余的。那就得不偿失了。
最后笔者需要提醒的是,在设计I/O时,最好要使用基于磁盘的个数的IOP来衡量,而不要采用使用基于总线的带宽来衡量。如果各位读者还不明白为什么要这么做,那么请大家回过头去,多看几遍上面两段文字。
二、如何考虑峰值对系统性能的影响?
在马路上,上班和下班的时候(一天大概3到4个小时左右)特别的堵。这是不是说政府就要扩大道路了?显然不是。政府并不会为这些偶然性的事件投入巨额的资金。存储系统每天或者每个月也会有特别忙的一段时间。如每天进行数据备份或者每个星期执行一些批量作业时,此时存储系统的使用就会达到峰值。我们在存储系统设计时,虽然不用将这些特殊的情况考虑进去,但是却需要关注,如何将这些特殊的作业对用户的影响降低到最地的程度。如在用户不繁忙的时候,执行这些特殊的作业,等等。
首先需要考虑执行的时机。对于大部分企业来说,上午8点到晚上8点,是作业的高峰时期(娱乐企业除外)。如果这些企业部署存储系统,那么对于数据的备份或者一些大批量的任务(如数据的导入导出)就要有针对性的避开这段时间。如可以在晚上12点之后对数据进行备份等等。
其次是考虑是否要启用并发访问机制。通常情况下,当有更高的并发处理能力的时候, 存储系统会获得更高的吞吐量。但是,并发访问,也意味了相关的资源(如存储设备的带宽)会成倍的使用。如果具有足够的资源,并发访问固然可以提高数据处理的能力。但是当资源不足时,这突然而到的信息流量很可能导致服务器崩溃。一般来说,笔者会建议使用异步I/O来获取更高的并发处理能力,而且这种方式可以有效避免上面谈到的这个问题。因为对于带宽来说,如果采取单线程的应用几乎都不能够有效的利用四块硬盘以上所带来的收益(此时硬盘的I/O没有没最大程度的利用)。此时采用异步的I/O往往是一个不错的选择。
第三,需要解决怎么样去操作的问题。条条道路同罗马。同一个任务,采取不同的方式,虽然得到的结果可能是相同的,但是由于中间过程不同,其时间或者对于性能的影响是不同的。在给客户解释这个问题时,笔者往往会以一个出租车的案例给客户做比喻。一个人打出租车,赶时间。这个出租车司机也比较有意思,问这个人:“你要走最近的路,还是要走时间最短的路?”有些情况下,路程虽然短,但并不表示时间少。有时候,大家都走近的路。反而容易导致拥塞,从而可能要花更多的时间到目的地。所以项目管理员来系统设计时,也要考虑到峰值所带来的拥塞问题。通常情况下,除了选择合适的时间之外,采取正确的方式,也能够在一定程度上降低拥塞问题,如选择一个不拥塞、但是相对较远的路,反而可能在更多的时间内到达目的地。
三、顺序访问与随机访问的差异化设计。
存储系统的访问可以分为两种情况:顺序访问和随机访问。如果从系统调优的角度看,这两种访问方式对于系统的设计要求是不同的。在不考虑其他因素的情况下,增加带宽对顺序访问来说,能够比较明显的提高其访问性能。这主要是因为存储系统在顺序I/O方面更加有效率。而对于随机访问的方式来说,效果不会很明显。如果要提高随机访问的效率,那么就绪要改善存储设备的吞吐量以及更快的响应时间。如此的话,就会缩短用户所等待的时间。
另外这里还需要特别主要一点,读作业与写作业对于资源消耗的差异性。从理论上来将,写作业比读作业更加消耗系统的资源。为了保障数据的有效性,通常存储系统会对写入的数据采用一定的校验机制,如需要同时将冗余的信息写入到磁盘中等等。同时由于读的作业没有数据校验,为此读比写作业更加的节省资源。
不过这是理论上的分析,实际情况与这个有一定的差异。因为在写数据的时候,一般都不是直接写入到硬盘,而是写入到缓存。然后系统每隔一段时间再将这个数据写入到存储截至中。由于缓存的速度要比硬盘快的多,为此写作业的效率反而比读作业要高许多。读作业从另一方面来说,可能命中缓存(从缓存中读数据),也可能不命中缓存(直接从硬盘中读数据)。而对大部分随机的工作情形来说,读比写会有更高的响应时间,因为数据还是需要从磁盘里面抓取(随机访问的缓存命中率普遍比较低)。如果要达到比较高的随机读取吞吐量就需要更好的系统设计。如利用块以上的硬盘来设计磁盘阵列或者提高数据缓存的空间等等。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。