缓存命中和性能的关系论证

《性能之巅》中关于性能和缓存部分,有两点在读到是有一些困惑,做以下思考。

1. 为什么99%的缓存命中,和98%的缓存命中,两者性能差距,远大于11%和10%的差距

具体的论证仔细思考了一下,可以推导如下:

现做以下变量定义:

k:命中率,[0,1]之间

t:没有命中的处理耗时,[1,max],此处假设命中后的处理时间是1,此处假定命中和不命中的处理速度为固定倍数差异。

A:总的任务量

T:总的开销时间

于是有以下公式:

T = A * k *  1 + A * (1-k)* t

进行推导,就有以下关系:

A/T = 1 / t + (1-t)k

综上,性能可以用A/T来衡量,即:工作总量/总的耗时;

那么很明显,在命中和不命中的速度差异情况下,命中率和耗时呈线性关系,但是和整体的性能呈非线性,斜率会越来越大。

2. 失效率,和命中率的计算思路是有差异的

失效率 = 每秒内,命中失败的次数

命中率 = 命中次数 /(命中次数 + 失效次数)

总的运行时间,要综合考虑命中率,以及失效引起的耗时,以及失效率来衡量,不一定命中率高的的系统就比命中率低的系统要性能好。

原文地址:https://www.cnblogs.com/doctors/p/9986628.html

时间: 2024-10-10 02:25:53

缓存命中和性能的关系论证的相关文章

ATS请求处理状态机流程(缓存命中)

在HttpSM::handle_api_return和HttpSM::set_next_state函数分别打断点,进入函数的时候分别打印t_state.api_next_action和t_state.next_action, 一个缓存命中的请求完整流程的堆栈信息如下. Breakpoint 1 at 0x596c40: file HttpSM.cc, line 1580. Breakpoint 2 at 0x5a8f40: file HttpSM.cc, line 6841. [Switchin

浅析I/O处理过程与存储性能的关系

浅析I/O处理过程与存储性能的关系 https://community.emc.com/docs/DOC-28653 性能”这个词可以说伴随着整个IT行业的发展,每次新的技术出现,从硬件到软件大多数情况下都围绕着性能提升而展开.“摩尔定理”指出CPU的处理速度每18个月会翻一番,但是进入21世纪的第二个十年来,似乎它的速度慢了下来.但是IT行业的各个行业领导者们,还是不断在计算机的性能寻求突破,继续挑战物理极限.细看存储行业,每款新的存储产品的推出,也围绕着如何更快.更好的服务前端服务器的I/O

缓存命中

缓存命中率 终端用户访问加速节点时,如果该节点有缓存住了要被访问的数据时就叫做命中,如果没有的话需要回原服务器取,就是没有命中.取数据的过程与用户访问是同步进行的,所以即使是重新取的新数据,用户也不会感觉到有延时. 命中率=命中数/(命中数+没有命中数), 缓存命中率是判断加速效果好坏的重要因素之一. 缓存命中:是从缓存中能够获取需要的数据就叫命中 不命中:没有从缓存中获取想要的数据,需要再次查询数据库或者执行其他操作,可能的原因是缓存中没有该数据或者缓存过期

报表工具与报表性能的关系

在选择报表工具时,性能指标一向是用户非常关心的,但是,报表工具的性能和整个报表系统的性能会有多大关系呢? 要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,其中有哪些环节容易出现性能问题,如何优化这些环节. 一.报表处理的一般过程分析 1.用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库. 2.数据层负责读取.计算和返回数据.数据层一般都是传统关系数据库:如Oracle.DB2等. 3.数据层通过JDBC等接口将结果数据

充分利用ASP.NET缓存提高站点性能

[简介] ASP.NET提供三种主要形式的缓存:页面级输出缓存.用户控件级输出缓存(或称为片段缓存)和缓存API.输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了.而缓存API则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存.本文全面介绍了这三种缓存技术在系统各层中的应用. 在ASP.NET提供的许多特性中,缓存支持无疑是我最欣赏的特性,我这样说当然是有充分理由的.相比ASP.NET的所有其他特性,缓存对应用程序的性能具有最大的潜在影

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种.NET中特别重要的缓布技术Cache.利用Cache提升程序性能. 1. 缓存Cache的命名空间 .NET中对缓存有两个命名空间 命名空间1:System.Web.Caching 命名空间2:System.Runtime.Caching 引用范围:这两个命名空间,都可以在Web和非WEB应用程序中

大型网站架构演进(3)使用缓存改善网站性能

原文:大型网站架构演进(3)使用缓存改善网站性能 网站的访问也是遵循二八定律:80%的业务访问集中在20%的数据上,如果我们把这20%的数据做缓存,是不是可以减轻数据库的访问压力呢?在项目开发过程中,我们通常将一些基础信息缓存起来,比如商旅系统中的国家,城市,航空公司,机场和航站楼信息. 使用缓存改善网站性能 缓存一般分为两种,本地缓存和分布式缓存,本地缓存指的是应用服务器的本机缓存,分布式缓存一般指专门的缓存服务器,比如memcached和redis.下图是使用缓存后网站的架构: 总结: 使用

如何利用Nginx的缓冲、缓存优化提升性能

使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接速度会影响客户的体验: 从客户机到Nginx代理的连接. 从Nginx代理到后端服务器的连接. Nginx具有优化这些连接调整其行为的能力. 如果没有缓冲,数据从代理的服务器发送并立即开始被发送到客户.如果假定客户端很快,缓冲可以关闭而尽快使数据到客户端,有了缓冲,Nginx 代理将暂时存储后端的响

Redis缓存设计与性能优化

Redis我们一般是用作缓存,扛并发:或者用于某些特定的业务场景,比如前面说到redis各种数据类型的使用场景以及redis的哨兵和集群模式. 这里主要整理了下redis用作缓存,存在的一些问题,以及改善方案. 简单的流程就像这个样子,一般请先到缓存区获取,如果缓存没有再到后端的数据库去查询. 1.缓存穿透 缓存穿透是指,是指查询一个根本不存在数据,这样缓存层里面没有,就会去访问后面的存储层了.如果有大量的这种恶意请求过来,都打向后面的存储层.显然我们的存储层是扛不住这样的压力.这样缓存就失去了