磁盘 IO 真的比网络 IO 快吗?
架构师修行之路
共 1639字,需浏览 4分钟
· 2021-10-22
Google大神 Jeff Dean在之前的一次演讲中展示了这样一张表,非常有意思:
访存与cache
访问L2 cache的时延大概是访问L1 cache的10几倍左右,而访问一次内存的时延则高达访问L2 cache的20倍,是访问L1cache耗时的200倍。这一部分清楚的告诉每个程序员,编写出对cache友好的程序是至关重要的,尤其你的场景如果对性能要求很高则更是如此。分支预测失败的惩罚大概只有5ns这个量级,博主在之前的文章《特斯拉遇上CPU:程序员的心思你别猜》这篇文章中专门讲解过CPU的分支预测功能。分支预测
该功能主要针对 if 语句,由于现代CPU内部采用流水线方式来处理机器指令,因此在 if 对应的机器指令还没有执行完时后续指令就要进到流水线中,此时CPU就必须猜测到底 if 语句是否为真,如果CPU猜对了,那么流水线照常运行,但如果猜错了流水线中已经被执行的一部分指令就要作废。很多同学看到这篇文章后表示if语句是不是尽量少用,从这张表可以看出,分支预测失败的惩罚不高,并且现代CPU的分支预测成功率很高,根本不必在意这点性能损失。内存、SSD与磁盘
程序员都知道访问内存的速度比SSD块,访问SSD速度比磁盘快,那么到底能快多少呢?同样顺序读取1MB数据,内存花费的时间为250,000 ns,SSD为1,000,000 ns,磁盘为20,000,000 ns。我们可以看到,同样读取1MB数据,磁盘花费的时间是 SSD 的 20 倍,是内存的80倍。同样读取1MB数据,SSD耗时是内存的4倍。这组数据告诉我们,相对内存来说磁盘真的很慢,如果你的经费充足就用SSD吧,如果你是土豪,那么就把数据库直接放到内存吧。网络与磁盘
一般来说我们认为内存比磁盘快,磁盘比网络快,但这这张表告诉我们用1Gbps网络发送1K数据仅仅需要20,000 ns,而磁盘的一次寻道则高达10,000,000ns(10ms),网络IO可不一定比磁盘IO慢。当然,这也要看网络两端距离有多远。网络
想测量数据包在网络两端来回一趟需要耗时多少?ping命令再简单方便不过了。首先,博主在数据中心内部ping一台主机(注:ip地址用*来代替):一圈下来耗时仅在100 us左右,速度非常快,在数据中心内部空间距离几乎可以忽略不计。我的坐标在北京,接下来我们ping一下清华大学,哈哈,注意现在由于云服务商的存在,清华大学的官网服务器主机可不一定在清华大学里,为简单起见我们认为所ping的机器都在相应的地理位置上。这个耗时就很可观了,我们姑且用市中心到清华大学的直线距离评估一下数据包路径长度(实际数据包的路径肯定和这里不同),可以看到大概在10公里左右的数量级,用时将近10ms,不要觉得10ms很耗时,磁盘一次seek就是这个量级。接下来出个省,ping一下浙大:出了省就是不一样,北京与浙江的直线距离大概在1200公里,网络上走一圈耗时来到了将近15ms。接着我们出趟国吧,去英国转一圈,ping下牛津大学:出了国就更不一样了,北京与英国直线距离(球体表面)大概在7000公里,网络耗时将近50ms。最后让我们去趟美国,ping下斯坦福大学:和预想的差不多,北京与斯坦福直线距离大概在10000公里,耗时也在50ms左右。从这组测试我们可以看出,网络的耗时和空间距离有很大关系,但在数据中心内部网络其实是非常快的,这一点在进行系统设计时需要意识到。
总结
系统设计一种工程实践,不是艺术遐想,每一个关键决策都要有依据而不能拍脑袋,本文的这张表就是你的依据(之一)。希望这篇文章对大家理解系统时间有所帮助。评论
堪称最优秀的Docker可视化管理工具——Portainer你真的会用吗?
来源:blog.csdn.net/shark_chili3007/article/details/123366179👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目
小哈学Java
0
超大规模数据中心网络架构及其技术演变
本文所讲的数据中心网络架构和技术范围是针对典型的大型互联网和云计算公司的超大规模数据中心(Hyperscale Data Center),不一定适合其他类型的数据中心网络。业界对于什么规模才算是“超大规模(Hyperscale”并没有一个精确的定义。一般来说,一个数据中心网络集群至少有 5000台服
数据中心运维管理
0
分库分表,可能真的要退出历史舞台了!
来源:https://www.jianshu.com/p/9131edd8fd2c👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦,
小哈学Java
1
知乎高问:程序员有必要知道为什么做某个功能吗?
将Python客栈设为“星标⭐”第一时间收到最新资讯前言知乎上有一个提问:程序员有必要知道为什么做某个功能吗?↓↓↓今天,我们就这个话题一起来做个讨论。不知道程序员的你,在接到产品经理提的一个需求后,是习惯马上动手开始撸代码呢?还是会先暂停一下,认真思考一会如下一些问题,比如这个需求产生的背景是什么
Python客栈
0
React正在杀死Angular吗?
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群作者 |Hassan Trabelsi
策划 & 翻译 |张卫滨这是一个老生常谈的争论(在技术时代,这是在所难免的):Angular 对战 React。这就像“先有鸡还是先有蛋”的难题,不过这个问题是针对 Web 开发
前端Q
0
美团社招一面,比预想的简单。
面试题大全:www.javacn.site面试这件事就很玄学,有时候你觉得他可能很难,但面完之后竟然出奇的顺利,问的问题你都会;有些你觉得这次面试应该很简单,但去了之后就被问懵了,所以面试这件事有很多一部分运气的成分。所以说,在没有 Offer 之前就是多准备、楞怂面,主打一个大力出奇迹。这不,逛牛
Java中文社群
0
你真的理解 devDependencies 和 dependencies 的区别吗?
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群作者:井柏然原文:https://juejin.cn/post/7135795969370619918你是否真的理解 devDependencies 和 dependencies 的区别?如果不能确切的回答、理解还停留在模糊的阶段,
前端Q
0