关于顺序磁盘IO比内存随机IO快的讨论
这个问题来源于我书中引用的一幅图:

我们从图中明显可以看某性能测试的结果表明普通机械磁盘的顺序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指代的是什么。这是第一个问题。
第二个问题就在于没有分开讨论读和写。很多磁盘的读写TPS差异很大,特别是对于随机I/O来说,不同块大小(block size)的随机IO相差巨大。这张图里面只是笼统地给出了磁盘的顺序I/O和随机I/O性能,没有显式区分出读写来。这是第二个问题。
第三个问题就在于图中的数值与我们平时的印象是矛盾的。一般情况下,我们会认为内存的TPS应该是很高的。即使是随机I/O也不应该比磁盘的要差,但这张图清晰地表明它真的就是差。特别是今天有人拿实际的测试结果反驳了图中的结论。下面我们着重探讨一下第三个问题。
首先是实际测试数据:内存使用的是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_review
那么现在如果用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访问性能的。
关于顺序磁盘IO比内存随机IO快的讨论的更多相关文章
- 说说IO(一)- IO的分层
IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后,瓶颈往往落在数据库:而数据库经过多种优化以后,瓶颈最终会落到IO.而IO性能的发展,明显落后于CPU的发展.Memchached也好, ...
- 【磁盘】顺序IO比随机IO快
假设磁盘每秒可以做100个随机I/O操作,并且可以完成每秒10MB的顺序读取(这大概是消费级磁盘现在能达到的水平).如果每行100字节,随机读每秒可以读100行(相当于每秒10000字节=10KB), ...
- 顺序、随机IO和Java多种读写文件性能对比
概述 对于磁盘的读写分为两种模式,顺序IO和随机IO. 随机IO存在一个寻址的过程,所以效率比较低.而顺序IO,相当于有一个物理索引,在读取的时候不需要寻找地址,效率很高. 基本流程 总体结构 我们编 ...
- mysql在高内存、IO利用率上的几个优化点 (sync+fsync) 猎豹移动技术博客
http://dev.cmcm.com/archives/107 Posted on 2014年10月16日 by liuding | 7条评论 以下优化都是基于CentOS系统下的一些优化整理,有不 ...
- linux下的CPU、内存、IO、网络的压力测试
linux下的CPU.内存.IO.网络的压力测试 要远程测试其实很简单了,把结果放到一个微服务里直接在web里查看就可以了,或者同步到其他服务器上 一.对CPU进行简单测试: 1.通过bc命令计算特 ...
- MySQL在高内存、IO利用率上的几个优化点
以下优化都是基于CentOS系统下的一些MySQL优化整理,有不全或有争议的地方望继续补充完善. 一.mysql层面优化 1. innodb_flush_log_at_trx_commit 设置为2设 ...
- [转帖]linux下的CPU、内存、IO、网络的压力测试
linux下的CPU.内存.IO.网络的压力测试 https://www.cnblogs.com/zhuochong/p/10185881.html 一.对CPU进行简单测试: 1.通过bc命令计算特 ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- 转载: 一、linux cpu、内存、IO、网络的测试工具
来源地址: http://blog.csdn.net/wenwenxiong/article/details/77197997 记录一下 以后好找.. 一.linux cpu.内存.IO.网络的测试工 ...
随机推荐
- U盘用FAT32还是用NTFS格式好
U盘用FAT32还是用NTFS格式好 ● FAT32文件系统 FAT32使用4个字节(也就是32位)的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT32.FAT16的分区容量上限是2 ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- 远程映射错误 “发生系统错误 1312 指定的登录会话不存在。可能已被终止 IIS 访问 远程共享目录”
最近和其他公司做接口,需要将数据上传给对方. 我们发送程序部署在前置机上,文件在内网数据中.需要映射到文件服务器后上传数据.本机vs开发是可以映射成功,但是部署到远程的IIS中,就不能成功. 报错: ...
- Cookies设置,获取,删除
之前的博客,整理了下Session的存储方式和原理http://www.cnblogs.com/chinaagan/p/3200456.html. 本篇再次整理下Cookies的使用和原理. 参考博客 ...
- 【ZOJ4060】 Flippy Sequence(规律)
题意:给定两个长度为n的01序列A和B,要求分别从两个序列中取两段将段中数字取反,使得A和B完全相同,求方案数 n<=1e6,sum(n)<=1e7 思路:现场8Y…… 将A和B异或之后问 ...
- 倒计时 服务器时间 .NET js javascript
原文发布时间为:2011-02-07 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- 图片抓取器web + winform
原文发布时间为:2009-11-21 -- 来源于本人的百度文章 [由搬家工具导入] 请先学习:http://hi.baidu.com/handboy/blog/item/bfef61000a67ea ...
- httpclient与webapi
System.Net.Http 是微软推出的最新的 HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web S ...
- EOJ Monthly 2018.1 F 最小OR路径
题目链接 Description 给定一个有 \(n\) 个点和 \(m\) 条边的无向图,其中每一条边 \(e_i\) 都有一个权值记为 \(w_i\) . 对于给出的两个点 \(a\) 和 \(b ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---15
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: