Submitted by droplet on Fri, 2010-12-10 14:58

cache在性能优化里面占有很重要的地位,在性能优化的不同层次上,都会用到与cache相关的知识,下面是一些问题和思考。

1)很显然,cache的容量是有限的,所以就会有cache miss,cache miss一般有三种原因:

a: 当cache为空的时候,需要把内容调入cache。

b: 当超出cache容量的时候,需要淘汰一些旧的内容,腾出空间给新的内容。

c: cache conflict,在有冲突的时候,需要用旧的覆盖新的。

第一种情况对任何cache都是适用的;第二种情况,比如CPU的L2 cache,如果是全关联的cache,那么超出容量是,任何一个旧的都可能被踢出去;第三种情况一般是在N-way 关联的时候,映射到相同cache line的内容之间有冲突。

一般来说CPU有如下的cache类型:

L1 I-cache, L1 D-cache, TLB, L2 cache, L3 cache。L1 cache和TLB cache容量较小,可以做成全关联的,L2, L3 cache一般是N-way关联的。cache在正常情况下,应该是可以提高性能的,但是在cache thrashing (pingpong)的时候,对性能却是有害的。在这种情况下,所有的访问都不能从cache里得到数据,而是需要到Main memory里去拿数据,所以编程的时候要比较cache thrashing。

2)如果避免cache thrashing,如何提高性能?

一般来说,跨边界的数据结构都是有害的。比如一个小于32 bytes的数据结构跨两个cache line,比如程序代码太大,正好在这个路径上,发生了cache conflict。一般来说L1 cache有64k,而L2 cache有1M或者更大。代码路径的长度不太可能有这么大的跨度。但是,最好是把相关的代码放在一起,最好减小代码的体积,最好把数据结构cache line对齐等等一下基本规则还是从一开始就遵守的好。

解决这个问题使用的技巧就是coloring。page coloring比较好理解,相同color的page会映射到相同的cache上去,所以在分配的时候,尽量比较给同一个process分配相同color的page。但是对于slab allocator的color就有点不太明白了。如果color的偏移是cache line大小还好理解,如果是其他的大小,感觉就没什么用。而且在slab allocator的论文里面提到memory channel,这个和cache没什么关系。memory channel是特定的物理地址在特定的内存片里面,如果是dual channel,最好数据地址能够分配到两个channel上,这样就可以并行读入,而不是顺序读入。这个是用来提高内存带宽的(当然可以可以说是避免冲突,因为如果是顺序访问,就说明两次读入是有冲突的)

3)L1 cache或者TLB里面,是虚地址,还是物理地址。这个和cache本身没有关系,这涉及到一个转换的问题。所以我认为在cache里面应该是物理地址,也就是说CPU在访问内存时,MMU是首先执行的,首先解决了TLB miss的问题,才能解决cache miss的问题,顺序不能乱。

The Elements of Cache Programming Style

http://en.wikipedia.org/wiki/Cpu_cache

与cache相关的一些问题和思考相关推荐

  1. Cache相关基本概念理解

    Allocation          在CACHE中发现一个位置,并把新的cache数据存到这个位置的过程.这个处理过程可能包括evicting(驱逐)cache中已存在的数据,从而为新的数据腾出空 ...

  2. spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. @Cacheable是用来声明方法是可缓存的.将结果存储到缓存中以便后续使用相同参数调用时不需执行实 ...

  3. spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict

    Cacheable CachePut CacheEvict annotation CacheConfig 开启缓存注解 @Cacheable @Cacheable是用来声明方法是可缓存的.将结果存储到 ...

  4. 硬核 - Java 随机数相关 API 的演进与思考(上)

    本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...

  5. 对编程相关的某些概念的思考

    文章目录 数据的本质 什么是模型 关系模型 对象模型 问题解决模型 什么是业务 库,包与模块 版本管理 路径 数据的本质 什么是数据? 数据是信息的载体:数据 = 信息 + 冗余 (名称,地址,大小, ...

  6. 计算机中的cache相关知识

    背景 最近在看多线程的内存模型,看的一头雾水,里面的底层硬件绕不开cache,这里对cache好好的捋一下,我们这里讲的概念是狭隘的cache, 就是指计算机cpu里的cache, 其实广义的cach ...

  7. Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置

    select size_for_estimate, buffers_for_estimate ,ESTD_PHYSICAL_READ_factor,ESTD_PHYSICAL_READS from v ...

  8. Spring Boot : Cache相关简介

    1.美图 2.概述 首先了解一下:java : JSR107缓存规范 Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cache和org.spr ...

  9. java cache缓存_Redis缓存失效策略思考

    1 删除过期数据 我们设置Redis元素时可以指定过期时间,那么Redis如何删除这些超时元素?Redis采用了两种策略:定期删除和惰性删除. (1) 定期删除 Redis每隔一段时间就检查哪些KEY ...

  10. cache相关命中率的运算_Linux cache命中率查看

    一.需求与背景 LINUX主机上的内存很为user.buffer.cache这个大的块.经常在使用free -m查看时,会发现cache占去了大头,从理论上我们也一直都知道cache里存放的是系统上访 ...

最新文章

  1. Bzoj1835:[ZJOI2010]基站选址
  2. 每日一皮:重构时总会出现的惊喜.......
  3. myeclipse10.7安装git插件
  4. 嵌入式入门要知道的五个小窍门-心得
  5. 机器学习中的双层规划问题
  6. Spring Cloud Zuul The 'Access-Control-Allow-Origin' header contains multiple values
  7. 测试点2详解:1045 快速排序 (25分)——23行代码满分
  8. python中的logger之一
  9. (转)MapReduce二次排序
  10. 软件dfmea_DFMEA与PFMEA之间不得不说的关系
  11. c# chart 各个属性_C# WINFORM项目Chart控件显示问题
  12. Unity3D动态加载FBX文件
  13. python调用讯飞付费版语音转写
  14. jap里的java文件代码_jap里的java文件代码
  15. 数据挖掘中分类和聚类的区别
  16. APP推广 从零开始
  17. 计算机视觉——三维视觉III:立体视觉与三维建模
  18. 习惯养成app_如何培养优秀的开发人员沟通技巧,养成不良习惯
  19. 小布什逗留香港6小时 赴知名裁缝店做18套西装——中新网
  20. EMNLP 2021信息抽取论文合集

热门文章

  1. android TextView屏蔽复制粘贴文本选择菜单
  2. 深度学习:卷积神经网络之移动网络(MobileNet)
  3. BZOJ3676[APIO2014] 回文串
  4. 计算机管理模糊,电脑显示器显示有点模糊怎么办
  5. python类方法和静态方法_Python 中的方法、静态方法(static method)和类方法(class method)...
  6. python eoferror_Python3:EOFError: Ran out of input
  7. 关于2020idea不能创建web项目问题
  8. linux raid5 nas,free nas 创建软raid5 来做iscsi服务 1
  9. python人名最多数统计_《利用Python进行数据分析》-全美婴儿姓名案例
  10. 计算机仿真的特点,计算机仿真的基本特点与基本流程.doc