磁盘 IO 真的比网络 IO 快吗?

戳蓝字“码农的荒岛求生”关注我 b65de8ef65813faff51ea5bf4993b5c3.gif 

Google大神 Jeff Dean在之前的一次演讲中展示了这样一张表,非常有意思:

c0347d34c09e91c7b91f931c506f9c49.png

从这张图里我们可以清楚的看到,计算机系统中各种关键操作其典型耗时到底有多少(注意,各种不同的系统架构精确的数据可能与此不同,但数量级上差别应该不会很大)。

访存与cache

访问L2 cache的时延大概是访问L1 cache的10几倍左右,而访问一次内存的时延则高达访问L2 cache的20倍,是访问L1cache耗时的200倍

这一部分清楚的告诉每个程序员,编写出对cache友好的程序是至关重要的,尤其你的场景如果对性能要求很高则更是如此。

690e22469884362adc7b90b6ad58db3a.png

分支预测失败的惩罚大概只有5ns这个量级,博主在之前的文章《特斯拉遇上CPU:程序员的心思你别猜

分支预测

该功能主要针对 if 语句,由于现代CPU内部采用流水线方式来处理机器指令,因此在 if 对应的机器指令还没有执行完时后续指令就要进到流水线中,此时CPU就必须猜测到底 if 语句是否为真,如果CPU猜对了,那么流水线照常运行,但如果猜错了流水线中已经被执行的一部分指令就要作废。

70bca5f7053228281159aa9bbd55ba9c.png

很多同学看到这篇文章后表示if语句是不是尽量少用,从这张表可以看出,分支预测失败的惩罚不高,并且现代CPU的分支预测成功率很高,根本不必在意这点性能损失。

内存、SSD与磁盘

程序员都知道访问内存的速度比SSD块,访问SSD速度比磁盘快,那么到底能快多少呢?

同样顺序读取1MB数据,内存花费的时间为250,000 ns,SSD为1,000,000 ns,磁盘为20,000,000 ns。

我们可以看到,同样读取1MB数据,磁盘花费的时间是 SSD 的 20 倍,是内存的80倍

3ea88b94b4684c1168cb719c888f613f.png

同样读取1MB数据,SSD耗时是内存的4倍。

这组数据告诉我们,相对内存来说磁盘真的很慢,如果你的经费充足就用SSD吧,如果你是土豪,那么就把数据库直接放到内存吧。

网络与磁盘

一般来说我们认为内存比磁盘快,磁盘比网络快,但这这张表告诉我们用1Gbps网络发送1K数据仅仅需要20,000 ns,而磁盘的一次寻道则高达10,000,000ns(10ms),网络IO可不一定比磁盘IO慢

当然,这也要看网络两端距离有多远。

网络

想测量数据包在网络两端来回一趟需要耗时多少?ping命令再简单方便不过了。

首先,博主在数据中心内部ping一台主机(注:ip地址用*来代替):

f57eb2917be494df83693cb5c07f0422.png

一圈下来耗时仅在100 us左右,速度非常快,在数据中心内部空间距离几乎可以忽略不计。

cdaeb4e332c18245a1fe80c386d50487.png

我的坐标在北京,接下来我们ping一下清华大学,哈哈,注意现在由于云服务商的存在,清华大学的官网服务器主机可不一定在清华大学里,为简单起见我们认为所ping的机器都在相应的地理位置上

f0d242bfde47ee0341a9f7f51868ed12.png

这个耗时就很可观了,我们姑且用市中心到清华大学的直线距离评估一下数据包路径长度(实际数据包的路径肯定和这里不同),可以看到大概在10公里左右的数量级,用时将近10ms,不要觉得10ms很耗时,磁盘一次seek就是这个量级。

8c29cd4f0e861233423463d6a3d293aa.png

接下来出个省,ping一下浙大:

0f242f21e1c78390b25da000caeec2cf.png

出了省就是不一样,北京与浙江的直线距离大概在1200公里,网络上走一圈耗时来到了将近15ms。

957552fc34a65237bf8cb61d63b9190b.png

接着我们出趟国吧,去英国转一圈,ping下牛津大学:

f20ea89c7048a396cf62ca207ed72d80.png

出了国就更不一样了,北京与英国直线距离(球体表面)大概在7000公里,网络耗时将近50ms。

05c4c7da62fea7aea27c6dc6a3fe6558.png

最后让我们去趟美国,ping下斯坦福大学:

fb2efebdfcc9c533db1a67aedb038a67.png

和预想的差不多,北京与斯坦福直线距离大概在10000公里,耗时也在50ms左右。

3d335c317262d8cea351af1b298b5465.png

从这组测试我们可以看出,网络的耗时和空间距离有很大关系,但在数据中心内部网络其实是非常快的,这一点在进行系统设计时需要意识到。

总结

系统设计一种工程实践,不是艺术遐想,每一个关键决策都要有依据而不能拍脑袋,本文的这张表就是你的依据(之一)。

希望这篇文章对大家理解系统时间有所帮助。

 
 
热门内容:

fa0fae429b18b94020bfe5de14c7293f.png

 
 
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值