处理Cache alias
来源:互联网 发布:国际数据公司 收购 编辑:程序博客网 时间:2024/05/16 17:21
如果cache只有4k,和物理页一样大,那么其实进行index还是相当于用物理地址进行的.
所以只有cache大于系统物理页的大小的时候才会出现cache alias,如果cache是8k,
那么cache alias只可能出现在两个地方.所以,如果我们要避免cache alias,
只需要保证多个virtual addr 产生的index一样就可以了. 比如,系统物理页是4k,
cache是8k,那么我们只要保证虚拟地址的0到13bit一样就可以保证这么多个virtaul addr不会产生cache alias,
因为他们的index都一样所以,如果我们要申请虚拟地址,这些虚拟地址有可能会有cache alias的情况,
那么我们就只需要保证这些虚拟地址是cache大小的modulo. 比如cache是8k,我们取虚拟地址只需要保证vaddr = (vaddr +((8k -1))) &(~(8k-1))
我们来看linux是怎么做的 :
1.在probe_pcache 根据处理器类型初始化cache sets和cache line size
2.在r4k_cache_init 里面初始化 shm_align_mask = max_t( unsigned long, c->dcache.sets * c->dcache.linesz - 1, PAGE_SIZE - 1); 计算出cache的大小,然后减去1,得到mask
3.看linux如何保证不会有cache alias的发生.(注意,cache alias只是在多个虚拟地址映射同一个物理page的时候才会发生,所以,我们看看do_mmap是怎么避免cache alias的发生的)
第一个地方:
if (flags & MAP_FIXED) {
}
第二个地方:
........
if (do_color_align)
....... 注意:当mmap的时候强制指定addr的时候,linux是不会检查cache alias的
- 处理Cache alias
- cache alias
- [转]关于VIPT cache alias 的一封经典邮件
- 关于VIPT cache alias 的一封经典邮件
- alias
- alias
- alias
- alias
- alias
- alias
- alias
- HttpContext处理 cache
- 文件Cache处理
- google guava cache 处理
- Bitmap的cache处理,包括memory cache和disk cache
- cache/Ensemble中的异常处理
- 浏览器缓存处理cache control
- linux alias 引用 alias
- [若有所悟]七步,改变你的纯文本报告面目
- Cloudera Manager (centos)安装详细介绍
- 自学 iOS 开发的一些经验
- Eclipse Mars集成Tomcat插件
- 微信公众号开发JSSDK上传图片(多图上传)
- 处理Cache alias
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- FFT bzoj2179: FFT快速傅立叶
- MySQL两表联查,三表联查
- Python: range()与xrange()区别
- Oracle 安装OEM 报错: 无法对所有EM 相关账户解锁 解决方法
- linux 账号管理
- Linux入门基础
- Android:ListView 多布局,加头部,尾部