首页
学习
活动
专区
圈层
工具
发布

体系结构复习笔记

6.11 MIPS MIPS:每秒数百万条指令 7. cache 命中率:命中/访问 未命中:1 - 命中率 未命中时从较低存储级别复制块 7.1 直接映射缓存 (块地址)%(#缓存中的块)...7.2 缓存命中与否 未命中:停顿CPU流水线,从下一层次结构中获取块 指令缓存未命中:重新启动指令获取 数据缓存未命中:完整的数据访问 7.3 直写(Write Through) 命中:数据写入命中时...未命中: 分配未命中(Allocate on miss):更新该缓存块。...(Compulsory misses)(冷启动未命中):首次访问块 容量缺失(Capacity misses):由于缓存大小有限,稍后再次访问替换的块 冲突未命中(Conflict misses):在非完全关联的缓存中...对于同一源文件中未初始化的全局变量, 从实验来看, 它们是按照字母顺序分配内存的, 不论定义顺序。对于不同源文件间全局变量, 是按照链接器处理的顺序。

2.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    缓存设计问题杂谈

    如果这些 key 在同一时间失效, 那么失效的时候,大量的请求过来。就会直接打到 DB 上, 这个时候 DB 很可能被打垮,即使马上重启也会被新的流量打垮。...这种同一时间大量缓存的失效,导致请求直接打到 DB 上的情况, 就是缓存雪崩。...优点: 简单公平, 易于实现 缺点: 缓存命中率低, 常用数据容易被淘汰掉 LRU 最近最久未使用: 如果一个数据最近很少被访问到,那么被认为在未来被访问的概率也是最低的,当规定空间用尽且需要放入新数据的时候...其实一个hash函数会冲突是比较低的,布隆过滤器 的优化之一,设置多个hash函数,多个hash函数,个个都冲突的概率就微乎其微了。...Count-Min Sketch算法将一个hash操作,扩增为多个hash,这样原来hash冲突的概率就降低了几个等级,且当多个hash取得数据的时候,取最低值,也就是Count Min的含义所在。

    13810

    缓存设计问题杂谈

    如果这些 key 在同一时间失效, 那么失效的时候,大量的请求过来。就会直接打到 DB 上, 这个时候 DB 很可能被打垮,即使马上重启也会被新的流量打垮。...这种同一时间大量缓存的失效,导致请求直接打到 DB 上的情况, 就是缓存雪崩。...优点: 简单公平, 易于实现 缺点: 缓存命中率低, 常用数据容易被淘汰掉 LRU 最近最久未使用: 如果一个数据最近很少被访问到,那么被认为在未来被访问的概率也是最低的,当规定空间用尽且需要放入新数据的时候...其实一个hash函数会冲突是比较低的,布隆过滤器 的优化之一,设置多个hash函数,多个hash函数,个个都冲突的概率就微乎其微了。...Count-Min Sketch算法将一个hash操作,扩增为多个hash,这样原来hash冲突的概率就降低了几个等级,且当多个hash取得数据的时候,取最低值,也就是Count Min的含义所在。

    15400

    腾讯会议10秒编译百万代码|鹅厂编译加速标杆案例公开

    可能一个 module 代码冲突还好,但如果是 module API 的修改了呢?那就是所有 module 都需要更新了,这是非常机械且令人头疼的!...当 xx_plugins 未命中增量时,由于 lib_app 依赖了 xx_plugins 源码库,cmake 会同时编译 lib_app 与 xx_plugins; 当 xx_plugins 命中增量时...gradle 本身就是脚本,那么我们可以在增量脚本执行后,根据脚本的执行结果,命中产物的模块则以 maven 方式依赖,未命中的则以源码依赖。...比如模块 B 命中增量、模块 C 未命中时,由于 B 使用 projectWm 替换成了 maven 依赖,而模块 C 会因为模块的 maven 产物中 pom.mxl 定义的依赖关系给带过来,也就是模块...下方关注腾讯云开发者并点亮星标 第一时间看腾讯方案和学习资源

    2K80

    进程内缓存助你提高并发能力!

    比如key的上限设置等 基础操作缓存 // 1. add/update 增加/修改都是该API cache.Set("first", "first element") // 2. get 获取key下的...有几个选择: 开一个定时器,不断循环所有key,等到了预设过期时间,执行回调函数(这里是删除map中过的key) 惰性删除。访问时判断该键是否被删除。缺点是:如果未访问的话,会加重空间浪费。...而设计其实也很简单,就是:Get() 命中,就在统计 count 上加1即可。...hit+1 c.stats.IncrementHit() } else { // 未命中miss+1 c.stats.IncrementMiss() } return...value, ok } 多线程存取 当多个协程并发存取的时候,对于缓存来说,涉及的问题以下几个: 写-写冲突 LRU 中元素的移动过程冲突 并发执行写入缓存时,造成流量冲击或者无效流量 这种情况下,写冲突好解决

    73130

    腾讯会议10秒编译百万代码|鹅厂编译加速标杆案例公开

    可能一个 module 代码冲突还好,但如果是 module API 的修改了呢?那就是所有 module 都需要更新了,这是非常机械且令人头疼的!...,lib_app link 源码库; 命中增量时,通过 add_library 导入这个预编译的产物作为 library,lib_app link 预编译库; 未命中增量时,通过 add_subdirectory...当 xx_plugins 未命中增量时,由于 lib_app 依赖了 xx_plugins 源码库,cmake 会同时编译 lib_app 与 xx_plugins; 当 xx_plugins 命中增量时...gradle 本身就是脚本,那么我们可以在增量脚本执行后,根据脚本的执行结果,命中产物的模块则以 maven 方式依赖,未命中的则以源码依赖。...比如模块 B 命中增量、模块 C 未命中时,由于 B 使用 projectWm 替换成了 maven 依赖,而模块 C 会因为模块的 maven 产物中 pom.mxl 定义的依赖关系给带过来,也就是模块

    83730

    mysql各种锁,一篇文章讲明白

    虽然 SQL 非常简单,但是针对不同类型的列,我们还是会面对各种情况: 聚簇索引,查询命中:UPDATE students SET score = 100 WHERE id = 15; 聚簇索引,查询未命中...= 'Tom'; 二级非唯一索引,查询未命中:UPDATE students SET score = 100 WHERE name = 'John'; 无索引:UPDATE students SET...如果查询未命中纪录,在 RC 和 RR 隔离级别下加锁是不一样的,因为 RR 有 GAP 锁。...二级非唯一索引,查询未命中 如果查询未命中纪录,RR 隔离级别会加 GAP 锁,RC 无锁。...; 4.避免在同一时间点运行多个对同一表进行读写的脚本,特别注意加锁且操作数据量比较大的语句;我们经常会有一些定时脚本,避免它们在同一时间点运行; 5.设置锁等待超时参数:innodb_lock_wait_timeout

    2.2K52

    计算机结构 cheatsheet

    高速缓存 命中时直接对cache存储器寻址,时间tc 未命中时,主存寻址并且读入cache,时间tm 平均访存时间ta在tc和tm之间,取决于命中率 提高命中率:替换算法 LRU最近最少使用 地址映像:...冲突概率高,多个主存块竞争一个Cache行时命中率会下降 全相联映像(Fully Associative Mapping) 主存的任何块都可以映射到Cache的任何行,没有固定的映射关系。...CPU访问主存时,Cache控制器会检查所有Cache行,看是否有与主存块匹配的标记 冲突概率最低,实现复杂,硬件开销大,因为需要比较所有Cache行的标记。...,通过页表查找物理地址 段式segment:段长不固定,段间不连续存在碎片 段页式:逻辑分段,主存分页,每个段管理页表 页面替换:LRU 磁盘阵列 RAID 冗余独立磁盘阵列Redundant Independent...,从而同时处理多个任务,多处理机系统和陈列式处理机属于资源重复 资源共享:通过软件方法使多个任务轮流使用同一套硬件设备,操作系统任务调度属于资源共享 计算机安全 信息安全的基本要素: 保密性:信息不被未授权的第三方获取

    30710

    锁等待分析:事务隔离级别与锁粒度优化

    一、事务隔离级别对锁等待的影响事务隔离级别定义了并发事务间的可见性规则,不同级别通过锁机制实现数据一致性,但会引发不同层级的锁竞争: 隔离级别与锁机制关系READ UNCOMMITTED:无共享锁,允许脏读...当多个事务同时更新同一账户余额时: UPDATE accounts SET balance = balance - 100 WHERE id = 123; -- 排他锁阻塞后续事务在REPEATABLE READ级别下,事务A未提交时...降低隔离级别可快速缓解锁冲突,但必须评估业务风险。...五、索引优化:消除隐藏锁陷阱不合理的索引设计会意外扩大锁范围: 聚集索引锁升级问题:当更新非索引列时,若WHERE条件未命中索引,InnoDB会将行锁升级为表锁 UPDATE orders SET...间隙锁避坑指南触发条件:REPEATABLE READ下范围查询未命中唯一索引 规避方案: 查询使用SELECT ...

    16821

    小白入门——哈希算法

    ② 处理碰撞冲突的过程 Hash函数 一个好的Hash函数应满足下列两个要求: 一致性 —— 等价(equal)的key必然产生相等的hash code 高效性 —— 高效的计算 均匀性 —— 均匀地散列所有的...这样的线性探测可能会产生三种结果: a)命中,该位置的键和被查找的键相同; b)未命中,键为空(该位置没有键) c)继续查找,该位置的键和被查找的键不同。...,如果遇到空元素则未命中。...命题 M :在一张大小为 M 并含有 N = α * M 个键的基于线性探测的哈希表中,基于假设 J ,命中和未命中的查找所需的探测次数分别为: 特别是当 α 约为 1/2 时,查找命中所需要的探测次数约为...3/2,未命中所需要的约为 5/2。

    1.2K20

    mysql和redis数据一致性

    读缓存(未命中) B->>DB: 4. 查询新数据 DB-->>B: 返回新数据 B->>Cache: 5....线程 B 在数据库更新前读取缓存(未命中),转而查询数据库旧数据并写入缓存。线程 A 更新数据库,但此时缓存已被线程 B 写入旧数据,导致数据不一致。...2.为什么需要5秒时间限制?1. 数据库操作延迟数据库更新操作(尤其是高并发场景)可能耗时较长。5秒限制:确保数据库有足够时间完成更新,避免缓存提前删除。2....错开时间差,避免冲突核心逻辑:先标记缓存失效 → 更新数据库 → 延时删除缓存。5秒限制:让其他线程有时间从数据库读取新数据并更新缓存。代码实现示例1....延时删除缓存通过Redis的过期机制实现延时删除,避免直接删除导致的冲突。

    13000

    算法基础9:散列表

    使用散列表的查找算法分为两步 第一步用散列函数将被查找的键转化为数组的一个索引。理想情况下,不同的键都可以变为不同的索引,但有时有特殊情况,这就涉及到我们的第二步处理碰撞冲突的过程。...一、散列函数键值转换 散列算法有很多种实现,在java中没中类型都需要相应的散列函数,例如;在正整数 最常用的是除留余数法(k%M)。...大家一致用的java的HashMap 就是按这种方式来处理碰撞冲突问题的。 ?...基于线性探测法来处理碰撞问题,开放寻址法中最简单的是线性探测法:当碰撞发生时即一个键的散列值被另外一个键占用时,直接检查散列表中的下一个位置即将索引值加1,这样的线性探测会出现三种结果: 命中,该位置的键和被查找的键相同...未命中,键为空 继续查找,该位置和键被查找的键不同。

    73220

    Linux 性能优化之CPU 多级缓存认知

    用一个简单的规则(哈希函数)来决定每个小盒子应该放进大柜子的哪个抽屉里。这种方式很简单很快,需要考虑哈希冲突。 原理: 每个缓存行只能存储来自主内存中特定地址范围的数据。...ILmr: 低级别指令缓存未命中 Dr: 数据引用 D1mr: L1 数据缓存未命中 DLmr: 低级别数据缓存未命中 Dw: 数据写入引用 D1mw: L1 数据缓存写入未命中 DLmw: 低级别数据缓存写入未命中...: 4,109,未命中率为 0.12% L1 数据缓存未命中: 43,676(34,627 + 9,049),未命中率为 3.6% 涉及到的函数的统计 -------------------------.../elf/dl-minimal-malloc.c:__minimal_malloc 具体函数分析 输出的下半部分列出了各个函数的缓存使用情况,包括命中和未命中情况。...以下是几个关键函数的分析: do_lookup_x: 数据未命中率最高的函数 指令引用: 760,995 L1 指令未命中: 38 (0.92%) 数据引用: 262,542 + 89,152 L1 数据未命中

    99510

    24张图7000字详解计算机中的高速缓存

    高速缓存中有数据,将内存中的数据块放置到高速缓存中时,发生了冲突,这叫做冲突不命中 。 放置策略中最常用的是:第k+1层的块i必须放在第k层的块(i mod 4)中。...如果不匹配,则表示未命中。在未命中时,高速缓存必须从内存中重新取数据块, 在行中覆盖此块。 ?...后面的文章我会详细讲解如何用C语言模拟高速缓存,欢迎关注我的公众号【嵌入式与Linux那些事】,第一时间获取更新。...一般来讲,L1缓存的命中时间为:4个时钟。L2缓存的命中时间为:10个时钟。 8.4 未命中惩罚   未命中需要的额外时间。对于主存来说,一般为 50 ~ 200个时钟周期。...举个例子: 假设缓存命中时间为1个时钟周期,缓存未命中惩罚为100个时钟周期。 下面计算下97%缓存命中率和99%的缓存命中率的平均访问时间为多少?计算公式为命中时间加上未命中处罚乘以百分系数。

    1.9K20

    NodeJS中的LRU缓存(CLOCK-2-hand)实现

    (高速缓存大小、高速缓存未命中的关键字和回调、高速缓存要素生命周期)来构造CLOCK高速缓存。...回调结束时,将回调函数的回调返回到LRU缓存中 4....只要访问到高速缓存命中都会更新time字段,把它保留在高速缓存中。 用户使用callback函数给get()函数提供用于检索高速缓存插槽的数据。...我们都知道高速缓存命中就是RAM的速度,但因为高速缓存未命中可以隐藏,所以对于命中和未命中而言,总体性能看起来的时间复杂度都是O(1)。...输出: 1 benchmark: 1127 miliseconds 由于每个高速缓存未命中都有1000毫秒的延迟,因此同步加载1000个元素将花费15分钟,但是重叠的高速缓存未命中会更快。

    73730
    领券