《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——2.6 全相联高速缓存

简介: 在高速缓存内,组的大小可以增加到使组内的行数等于高速缓存内的全部行数。此时的高速缓存就称为全相联高速缓存(fully associative cache)。在全相联高速缓存中只有一组,它包含高速缓存中所有的行。不需要散列计算或者索引机制,因为只有一组要检查。

本节书摘来自异步社区《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》一书中的第2章,第2.6节,作者:【美】Curt Schimmel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.6 全相联高速缓存

在高速缓存内,组的大小可以增加到使组内的行数等于高速缓存内的全部行数。此时的高速缓存就称为全相联高速缓存(fully associative cache)。在全相联高速缓存中只有一组,它包含高速缓存中所有的行。不需要散列计算或者索引机制,因为只有一组要检查。采用任何n路组相联高速缓存时,都是并行搜索组内所有的高速缓存行。顾名思义,全相联高速缓存在每次查找的时候都要在全部高速缓存内进行搜索。

之所以需要全相联高速缓存,是因为它能够把高速缓存颠簸(thrashing)的现象减到最少,原因是在高速缓存中的任何位置都可以保存数据的任何部分。于是,从理论上来说,如果一个程序具有局部引用性的地方小于或者等于高速缓存的大小,那么它就会获得100%的命中率,并从高速缓存得到最大可能的性能提升。

全相联高速缓存构建起来要比同等大小、但每组行数较少的高速缓存成本高,因为必须并行搜索高速缓存中的所有行。这就是全相联高速缓存很少用于指令和数据的主要原因。在使用它们的时候,通常是小规模、有特殊用途且有高度时间局部性的高速缓存,比如转换后备缓冲器(translation lookaside buffer,TLB)。TLB高速缓存最近在MMU内使用过虚拟地址到物理地址的转换。小规模、全相联的TLB比较实用,因为大多数程序都体现出了局部引用特性,这意味着工作集的转换会被多次使用。此外,因为每一次转换都映射了完整的一页数据,所以只需几个转换就能提供良好的性能。例如,TI MicroSPARC使用一个有32项的全相联TLB,而SuperSPARC有64项。Motorola 88200和所有MIPS处理器上的TLB也都是全相联高速缓存。

相关文章
|
16天前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
|
1月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
25天前
|
存储 缓存 前端开发
缓存技术在软件开发中的应用与优化策略
缓存技术在软件开发中的应用与优化策略
|
1月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
317 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
1月前
|
缓存 应用服务中间件 nginx
[nginx]proxy_cache缓存系统
[nginx]proxy_cache缓存系统
|
27天前
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
56 0
|
1月前
|
缓存 架构师 数据库
缓存系统稳定性 - 架构师峰会演讲实录
缓存系统稳定性 - 架构师峰会演讲实录
|
2月前
|
存储 缓存 算法
深入了解Memcached:缓存技术的利器
Memcached是一个开源的高性能分布式内存缓存系统,用于加速动态Web应用。它通过将数据库查询结果、API调用结果或其他数据缓存到内存中,减少对数据库的访问频率,从而提高应用的响应速度。本文详细介绍了Memcached的基本原理、架构、安装配置、使用方法、测试方法以及应用场景。通过Memcached,开发者可以有效提升Web应用的性能,减少数据库负载,改善用户体验。
47 5
|
1月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
39 0
|
2月前
|
存储 缓存 NoSQL
深入理解分布式缓存在后端系统中的应用与实践
【7月更文挑战第20天】 本文将探讨分布式缓存技术在后端系统设计中的关键角色,并揭示其如何优化性能和扩展性。文章不仅剖析了分布式缓存的基本原理和工作机制,而且提供了实际案例分析,展示了其在处理大规模数据时的优势。我们将深入了解几种流行的分布式缓存解决方案,并讨论它们在不同场景下的适用性。最后,文章将指导读者如何在真实世界的应用中实施分布式缓存,包括架构设计、性能调优以及故障排除的最佳实践。