摘要: 带宽是存储系统一个的一个非常重要的衡量指标,内存带宽指的是CPU从内存读取或写入数据到内存的速率。我们今天来思考一个问题,在你的应用程序里内存的访问带宽能够达到多少? 各代内存带宽规格 理论上内存带宽的计算公式是:Band Width = Speed * Data Width。在这个公式的基础上,我 阅读全文
posted @ 2020-11-03 08:26 zhangyanfei01 阅读(1201) 评论(0) 推荐(0) 编辑
摘要: 在《内存随机也比顺序访问慢,带你深入理解内存IO过程》一文中,我们理解了内存IO的内部实现过程,知道了内存的随机IO比顺序IO要慢,并对延迟时间进行了大概的估算。那么我们今天来用代码的方式来时间一下,看看在我们的项目工程中,内存访问的在不同的访问场景下延时究竟是个什么表现。 先测顺序情况 测试原理就 阅读全文
posted @ 2020-11-02 09:15 zhangyanfei01 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 平时大家都知道内存访问很快,今天来让我们来把刨根问底的精神发挥到极致,来思考两个问题 问题1: 内存访问延时到底是多少?你是否会进行大概的估算? 例如笔者的内存条的Speed显示是1066MHz,那是否可以推算出内存IO延时是1s/1066MHz=0.93ns? 这种算法大错特错。 问题2: 内存存 阅读全文
posted @ 2020-11-02 09:04 zhangyanfei01 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 从2001年DDR内存面世以来发展到2019年的今天,已经走过了DDR、DDR2、DDR3、DDR4四个大的规格时代了。内存的工作频率也从DDR时代的266MHz进化到了今天的3200MHz。这个频率在操作系统里叫Speed、在内存术语里叫等效频率、或干脆直接简称频率。这个频率越高,每秒钟内存IO的 阅读全文
posted @ 2020-11-02 08:53 zhangyanfei01 阅读(1178) 评论(0) 推荐(0) 编辑
摘要: 相信绝大多数的人都了解内存对齐,都知道变量应该按8字节去对齐,这样性能高。但是其最最底层的原理是啥呢? 有的人可能会说,因为高速缓存是以8字节为单位进行的。读者你很聪明,这是原因之一。但我今天想挖的是更底层一点的原理,让我们去内存的物理构成里找找答案! 内存物理结构 前面我们说过内存是由chip构成 阅读全文
posted @ 2020-11-01 19:55 zhangyanfei01 阅读(324) 评论(0) 推荐(1) 编辑
摘要: 函数开销困惑 在现代的开发工作中,相信绝大部分的同学手头的项目都不是从第零行代码开始搭建的。各个语言都有自己流行的代码框架,如PHP的有Laravel、CodeIgniter、ThinkPHP等等。大家都是在自己的框架的基础上添加自己的业务代码逻辑,开启开发工作。还记得我们团队有位开发同学当时问过我 阅读全文
posted @ 2020-11-01 19:32 zhangyanfei01 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 我问大家一个问题,下图中一个最简单的例子,会导致哪些CPU开销产生?你是否能够说清楚? <?php ... $redis->get('test'); ... 这个例子一下子就把大家在我的文章里学到的东西和你的实际工作结合起来了。怎么样,是不是足够简单?就是一句php代码从redis实例中获取一个ke 阅读全文
posted @ 2020-11-01 19:23 zhangyanfei01 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 前面的几篇文章里讨论过了进程上下文切换和系统调用对系统性能的影响,我们今天再来看另外一个CPU吃货,那就是软中断。 你在用vmstat或者其他一些工具查看系统CPU消耗的时候,发现有两列是单独列出来的,分别是是hi和si。他们分别是硬中断和软中断。既然vmstat把中断的开销单独列出来了,就说明一个 阅读全文
posted @ 2020-11-01 13:22 zhangyanfei01 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 前面我们讨论系统调用的时候结论是耗时200ns-15us不等。不过我今天说的我的这个遭遇可能会让你进一步认识系统调用的真正开销。在本节里你会看到一个耗时2.5ms的connect系统调用,注意是毫秒,相当于2500us! 问题描述 当时是我的一个线上云控接口,是nginx+lua写的。正常情况下,单 阅读全文
posted @ 2020-11-01 13:10 zhangyanfei01 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 首先说说系统调用是什么,当你的代码需要做IO操作(open、read、write)、或者是进行内存操作(mmpa、sbrk)、甚至是说要获取一个系统时间(gettimeofday),就需要通过系统调用来和内核进行交互。无论你的用户程序是用什么语言实现的,是php、c、java还是go,只要你是建立在 阅读全文
posted @ 2020-10-31 10:47 zhangyanfei01 阅读(428) 评论(0) 推荐(0) 编辑