内存性能的正确解读

一台服务器,不管是物理机还是虚拟机,必不可少的就是内存,内存的性能又是如何来衡量呢。

1. 内存与缓存

现在比较新的CPU一般都有三级缓存,L1 Cache(32KB-256KB),L2 Cache(128KB-2MB),L3 Cache(1M-32M)。缓存逐渐变大,CPU在取数据的时候,优先从缓存去取数据,取不到才去内存取数据。

2. 内存与时延

显然,越靠近CPU,取数据的速度越块,通过LMBench进行了读数延迟的测试。

从上图可以看出:

  1. Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 这款CPU的L1D Cache,L1I Cache为32KB,而L2 Cache为1M,L3为32M;
  2. 在对应的Cache中,时延是稳定的;
  3. 不同缓存的时延呈现指数级增长;

所以我们在写业务代码的时候,如果想要更快地提高效率,那么使得计算更加贴近CPU则可以获取更好的性能。但是从上图也可以看出,内存的时延都是纳秒为单位,而实际业务中都是毫秒为单位,优化的重点应该是那些以毫秒为单位的运算,而内存时延优化这块则是长尾部分。

3. 内存带宽

内存时延与缓存其实可谓是紧密相关,不理解透彻了,则可能测的是缓存时延。同样测试内存带宽,如果不是正确的测试,则测的是缓存带宽了。
为了了解内存带宽,有必要去了解下内存与CPU的架构,早期的CPU与内存的架构还需要经过北桥总线,现在CPU与内存直接已经不需要北桥,直接通过CPU的内存控制器(IMC)进行内存读取操作:

那对应的内存带宽是怎样的呢?测试内存带宽有很多很多工具,linux下一般通过stream进行测试。简单介绍下stream的算法:

stream算法的原理从上图可以看出非常简单:某个内存块之间的数据读取出来,经过简单的运算放入另一个内存块。那所谓的内存带宽:内存带宽=搬运的内存大小/耗时。通过整机合理的测试,可以测出来内存控制器的带宽。下图是某云产品的内存带宽数据:

-------------------------------------------------------------
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:          128728.5     0.134157     0.133458     0.136076
Scale:         128656.4     0.134349     0.133533     0.137638
Add:           144763.0     0.178851     0.178014     0.181158
Triad:         144779.8     0.178717     0.177993     0.180214
-------------------------------------------------------------

内存带宽的重要性自然不言而喻,这意味着操作内存的最大数据吞吐量。但是正确合理的测试非常重要,有几个注意事项需要关注:

  1. 内存数组大小的设置,必须要远大于L3 Cache的大小,否则就是测试缓存的吞吐性能;
  2. CPU数目很有关系,一般来说,一两个核的计算能力,是远远到不了内存带宽的,整机的CPU全部运行起来,才可以有效地测试内存带宽。当然跑单核的stream测试也有意义,可以测试内存的延时。

4. 其他

  1. 内存与NUMA的关系:开启NUMA,可以有效地提供内存的吞吐性能,降低内存时延。
  2. stream算法的编译方法选择:通过icc编译,可以有效地提供内存带宽性能分。原因是Intel优化了CPU的指令,通过指令向量化和指令Prefetch操作,加速了数据的读写操作以及指令操作。当然其他C代码都可以通过icc编译的方法,提供指令的效率。

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年技术盘点云数据库篇(一):UCloud专家谈云数据库:千锤百炼 云之重器

作者 | 刘丹 出品 | CSDN云计算(ID:CSDNcloud) 公有云逐渐成为企业运行 IT 设施的新趋势,那么作为企业最核心的系统—数据库,数据上云也成为大数据时代的必然选择。对企业来说,数据可视为其命脉&#xff0…

wxpython富文本_去除富文本编辑器中的标签

public static String deRegularExpression(String content) {content deRegularScript(content); // 过滤script标签String regEx_style "/* String regEx_inStyle "style\"([^\";];?)\""; */String regEx_html "<[^>]>&quo…

专访阿里云专有云马劲,一个理性的理想主义者

“我的故事都是和团队技术相关的&#xff0c;自己还真没有什么引人入胜的故事。”当马劲被问到能不能多分享些个人经历故事时他笑着说&#xff0c;我们就干脆怀着好奇聊了聊他和阿里云专有云一路走来的故事。 马劲&#xff0c;花名隆猫&#xff0c;阿里云专有云事业部兼企业应用…

80后阿里P10,“关老板”如何带着MaxCompute一路升级?

我是个幸运的人。虽然幸运不能被复制&#xff0c;但是眼光和努力可以。 关涛/关老板&#xff0c;80后的阿里P10&#xff0c;阿里巴巴通用计算平台负责人&#xff0c;阿里巴巴计算平台研究员。12年职场人生&#xff0c;微软和阿里的选择。 关涛的花名取自谐音&#xff1a;观涛。…

【重磅快讯】T11 2019数据智能技术峰会举办,AI将成为行业颠覆者

当前数据的价值日益凸显&#xff0c;已成为重要的生产要素和社会财富。云计算、人工智能、5G等技术的蓬勃发展&#xff0c;带来了智能化时代算力的提升。以数据为“能源”、以技术为“引擎”&#xff0c;才能将数据转化为智能&#xff0c;产生突破局限、跨越发展的力量。11月25…

java内部类实现方式_Java内部类详解

一 内部类是什么Java类中不仅可以定义变量和方法&#xff0c;还可以定义类&#xff0c;这样定义在类内部的类就被称为内部类。根据定义的方式不同&#xff0c;内部类分为静态内部类&#xff0c;成员内部类&#xff0c;局部内部类&#xff0c;匿名内部类四种。Java为什么要引入内…

如何创建一个数据科学项目?

假如你想要开始一个新的数据科学项目&#xff0c;比如对数据集进行简单的分析&#xff0c;或者是一个复杂的项目。你应该如何组织你的项目流程&#xff1f;数据和代码要放在那里&#xff1f;应该使用什么工具&#xff1f;在对数据处理之前&#xff0c;需要考虑哪些方面&#xf…

Spring boot + mybatis + oracle代码生成器

在pom文件中加入依赖 <build><plugins><!--逆向工程--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration…

i 智慧 | IBM存储:全面贯彻新存储的“智慧之道”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹责编 | 阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;随着移动互联网、信息技术等创新发展&#xff0c;数据量呈指数级爆发式增长并表现在多个方面&#xff0c;即规模扩张、结构多元化的数据新…

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles&#xff0c;手把手教大家如何将阿里云区块链服务与阿里云函数计算服务相结合&#xff0c;并…

java实现rsa欧几里得算法求d_RSA算法中利用欧几里得算法求d详细过程

文章转自新浪博客任家正文&#xff1a;RSA是第一个也是使用的最广泛的公钥加密算法&#xff0c;在1978年由R.Rivest、AdiShamir和Adleman三人发明&#xff0c;并以他们的名字命名。RSA算法的安全性基于大数因子分解的困难性&#xff0c;下面介绍一下它的基本原理&#xff1a;1、…

Spring项目启动加载xml配置文件替换数据库提高响应速度

文章目录1. pom依赖2. xml配置文件3. 获取参数工具类4. 根据beanId从SpringBootIOC获取类实例工具类5. 测试类6. 浏览器控制台验证1. pom依赖 <properties><!--全局版本控制--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><…

目标检测算法图解:一文看懂RCNN系列算法

在生活中&#xff0c;经常会遇到这样的一种情况&#xff0c;上班要出门的时候&#xff0c;突然找不到一件东西了&#xff0c;比如钥匙、手机或者手表等。这个时候一般在房间翻一遍各个角落来寻找不见的物品&#xff0c;最后突然一拍大脑&#xff0c;想到在某一个地方&#xff0…

不懂数据库的码农不是好程序员!

毋庸置疑&#xff0c;现在是“一切皆数”的时代&#xff0c;放眼目前炙手可热的大数据、人工智能等创新技术&#xff0c;如果没有数据加以支撑&#xff0c;一切的一切将毫无用武之地&#xff0c;更不必谈信息化、智能化and so on&#xff0c;而数据库作为存储和承载数据的重要场…

mysql 日期和时间函数_介绍一下mysql的日期和时间函数

介绍一下mysql的日期和时间函数mysql> SELECT PERIOD_DIFF(9802,199703);-> 11DATE_ADD(date,INTERVAL expr type)DATE_SUB(date,INTERVAL expr type)ADDDATE(date,INTERVAL expr type)SUBDATE(date,INTERVAL expr type)这些函数执行日期的算术运算。ADDDATE() 和 SUBDAT…

基于深度学习模型WideDeep的推荐

本实验选用数据为UCI开源数据集&#xff0c;仅用于学习&#xff0c;请勿商用&#xff09; Wide&Deep推荐算法出自一篇论文《Wide&Deep Learning for RecommenderSystems》&#xff0c;Wide&Deep由两部分组成&#xff0c;分别是Wide和Deep。先来说wide&#xff0c;…

RabbitMQ非root用户安装(Linux环境)

文章目录一、用户操作1. 创建fismq用户并设置密码2. 给fismq用户设置目录权限二、Erlang 操作2.1. Erlang下载2.2. Erlang 上传并解压2.3. 验证rabbitmq依赖是否安装2.4. 安装rabbitmq依赖2.5. Erlang 编译、安装2.6. Erlang 配置环境变量2.7. Erlang 验证三、RabbitMQ3.1. Rab…

深度学习目标检测系列:faster RCNN实现|附python源码

目标检测一直是计算机视觉中比较热门的研究领域&#xff0c;有一些常用且成熟的算法得到业内公认水平&#xff0c;比如RCNN系列算法、SSD以及YOLO等。如果你是从事这一行业的话&#xff0c;你会使用哪种算法进行目标检测任务呢&#xff1f;在我寻求在最短的时间内构建最精确的模…

mysql冷热数据LRU_浅析MySQL的lru链表

一、简述传统的lru链表lru&#xff1a;least recently used相信大家对lru链表是不陌生的&#xff0c;它算是一种基础的数据结构吧&#xff0c;而且想必面试时也被问到过什么是lru链表&#xff0c;甚至是让你手写一个lru链表。想必你已经知道了mysql的buffer pool机制以及mysql组…

报应!GitHub上线围剿Python计划,已有4万人跟进,你呢?

人红是非多&#xff0c;最近Python就遇到了这样的问题。与国际技术社区上一片「形势大好」对比鲜明的是&#xff0c;国内技术圈却一直存在对Python&#xff0c;「力挺」和「吃瓜」两派阵营&#xff0c;针锋相对&#xff0c;最近就悄然上线一个争议性疑问&#xff1a;围剿Python…