关于顺序磁盘IO比内存随机IO快的讨论

这个问题来源于我书中引用的一幅图:cors

咱们从图中明显能够看某性能测试的结果代表普通机械磁盘的顺序I/O性能指标是53.2M values/s,SSD的顺序I/O性能指标是42.2M values/s,而内存的随机I/O性能指标是36.7M values/s。虽然图中没有给出values的具体含义,但既然使用了相同的单位,应该是它们是能够比较的。由此彷佛能够得出结论:磁盘的顺序I/O性能要强于内存的随机I/O性能。性能

当初引入这幅图的主要目的是想说明Kafka顺序访问磁盘(特别是顺序写入)的性能并不像想象中的那么差。如今看来,这幅图仍是有一些问题的,里面具体的数值也值得推敲。测试

第一就是单位不明确。通常这种测试常见的统计单位应该是MB/s,即磁盘或内存的吞吐量(TPS)或带宽(Bandwidth),但若是这里的values指的就是MB,显然数值又过小了,因此我目前搞不清楚这个values指代的是什么。这是第一个问题。blog

第二个问题就在于没有分开讨论读和写。不少磁盘的读写TPS差别很大,特别是对于随机I/O来讲,不一样块大小(block size)的随机IO相差巨大。这张图里面只是笼统地给出了磁盘的顺序I/O和随机I/O性能,没有显式区分出读写来。这是第二个问题。内存

第三个问题就在于图中的数值与咱们平时的印象是矛盾的。通常状况下,咱们会认为内存的TPS应该是很高的。即便是随机I/O也不该该比磁盘的要差,但这张图清晰地代表它真的就是差。特别是今天有人拿实际的测试结果反驳了图中的结论。下面咱们着重探讨一下第三个问题。ci

 

首先是实际测试数据:内存使用的是DDR3的三星内存,TPS测试结果为2500MB/s,但没有说清楚是读TPS仍是写TPS,也没有说起使用的chunk大小是多少,更没有说是随机IO访问仍是顺序IO访问。不过咱们姑且认为是随机IO吧,毕竟咱们要PK的就是内存的随机IO。磁盘这边使用的是SSD,经测试最大的顺序读写IO大约是63MB/s,一样没有说究竟是读IO仍是写IO。测试结果说明SSD磁盘顺序IO TPS远逊于内存IO TPS。那么到底哪一个是对的呢?为何图中显示磁盘顺序IO是能赛过内存随机IO的呢?产品

 

针对这个矛盾之处,我我的的见解是这里面存在着田忌赛马的情形,也就是说图中用于比较的SSD和内存应该不是同一个等级的,有可能找了一个很好的SSD去与一个普通的内存条进行比较。拿上面实际的例子而言DDR3的三星内存TPS为2500MB/s,但这不算什么太好的成绩。还存在不少更好的内存产品远不止2500MB/s的吞吐量,好比Corsair Vengeance DDR3宣称可以达到5000+MB/s的随机IO TPS(它是以2MB chunk作的测试)。具体的数据来源详见:https://www.storagereview.com/corsair_vengeance_ddr3_ram_disk_review基础

至于SSD,顺序IO TPS超过2500MB/s的也有,好比这款基于MLC的Micron P420m SSD就宣称其顺序IO TPS能到3300MB/s。具体的数据来源详见:https://www.storagereview.com/micron_p420m_enterprise_pcie_ssd_reviewrsa

那么如今若是用Micron P420m SSD和上面的三星内存比,其顺序IO的TPS就超过内存的随机IO TPS。这样看来,这不就是田忌赛马吗?用一个很是好的磁盘去PK一个普通的内存,结果就极可能是图中的那个样子。因此,我的认为不用太纠结图中的数据,只须要了解磁盘顺序读写性能很好或至少不差这个事实就行了:) 引用

 

另外我感受这张图还有其余不太合理的地方,好比对于SSD而言,顺序IO性能几乎是随机IO的40倍。的确,随机IO是要慢于顺序IO的,特别是对于写入而言,但在SSD中这不老是成立的。

若是IO size很小或者说写入数据很小(好比小于32MB),随机写入天然是要慢于顺序写入;但当IO size增长到某个程度后(好比和clustered block同样大或是其整数倍),那么随机写和顺序写的表现是差很少的,由于再也不须要作过多的拷贝擦除,并且SSD内部的并行机制会开始逐渐起做用,抵消随机写和顺序写之间的差别。从这个角度来讲,我以为图中的两组数值对比过于悬殊了,彷佛也有不真实的地方。

 

总之,我对这张图的结论是图中的数字是有一些水分的,至少没有给出完整的测试说明,缺少必要的事实基础,但图要呈现的结论依然是成立的,即在某种程度下,磁盘顺序I/O访问(特别是写操做)是可以匹敌内存的随机I/O访问性能的。

相关文章
相关标签/搜索