Cacheline技术浅析

2023-11-03

最近组内有个同事在做cacheline相关的特性,向其学习了一下,对原来的cacheline的理解更近了一步。这里总结一下。请彭超大侠有空的话帮忙在斧正一下
Cache就是对内存的内容进行缓存的一个硬件。cache和内存的逻辑关系结构如下图所示。从左往右,从上到下逐个说明
首先物理内存又是通过物理地址PA(physical address)标识的,内存块用PA+SIZE表示,在读取内存的时候,CPU会将内存块load到cache中,但是并不是按照SIZE的大小load内存块,而是按照cacheline的大小load一个内存块,指定的物理内存块将被包含在这段被load的内存中(如上图黄色+蓝色部分所示,黄色代表了内存块在cacheline大小的内存块中的位置)。所以在编程的时候,尽量将结构设计为cacheline对其的,一次可以加载完成,访问下个结构体的时候,就可以直接访问另一个cacheline,而不发生冲突了。
物理地址又被分为三个部分,tag+index+offset。index就是物理地址在cache这个大数组中的位置,相当于数组索引,索引到了后,offset说明了PA所在的内存在cacheline中的偏移量。
这样看来,就会发现很可能两个物理地址中见的index很有可能发生重复,这就是cacheline冲突。这样的情况下,就要先废除cacheline上前一个的内容后重新加载新的内存才会有效。这样的冲突会大大降低内存的访问效率,所以intel有提出了一种更新的架构,如下图所示
在每个cacheline的下一级又多了way的概念,每个cacheline的下一级又被分为4WAY或8WAY,每个way都相当于一个cacheline。这样即使index冲突,也可以将内存内容放到不同的way中减少冲突。tag就是用来表示是那个way上的。上面的结构就是所谓的4路组相连或8路组相连的概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cacheline技术浅析 的相关文章

  • “calloc”不会自动消耗 RAM 中的内存

    根据这个问题的回答 malloc 和 calloc 之间的区别 https stackoverflow com questions 1538420 difference between malloc and calloc answer 15
  • 为什么在32位armv7l上mmap 4GB文件成功?

    我的印象是来自mmap 2 手册页和搜索结果 mmap仅限于系统可用的地址空间 减去系统保留的地址空间 所以在 32 位 armv7l 上 我假设它大约是 3GB 4GB 1GB 但似乎我实际上可以mmap5 GB 文件没有任何问题 int
  • 用python控制风扇速度并检测电脑内部温度?

    由于我的电脑风扇噪音很大 我想为自己编写一个程序 在不需要全速运行时 关闭它 我想用python制作它 那么有没有任何模块可以检测温度和 或设置风扇速度 不要使用 python 或 WMI 如果您使用的是 Windows 并且无法使用 sp
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视
  • VBA Excel 大数据操作需要很长时间

    我有两个Excel文件 第一个 Excel 文件包含 人员姓名 和 出席总天数 列 前任 PersonName TotalDays xyz abcd 另一个 Excel 文件包含人员姓名 日期和状态 出席 缺席 PersonName Dat
  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 限制 Java 进程的总内存消耗(在 Cloud Foundry 中)

    与这两个问题相关 如何设置JVM的最大内存使用量 https stackoverflow com questions 1493913 how to set the maximum memory usage for jvm 什么会导致 jav
  • 以编程方式获取 Android 设备的所有 RAM 内存,而不仅仅是分配给用户进程的内存

    我有一台设备 我确信它的 RAM 内存为 512 MB 希望能够以编程方式检索该值 512 MB 到目前为止 我在互联网上遇到的主要是这两种方式 https stackoverflow com a 16143065 1521264 http
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C++使用太多CPU

    好的 我正在创建一个游戏 但它使用了太多的 cpu 但它没有使用太多的内存 cpu确实增加和减少 我的游戏中有太多计时器 当我不再使用计时器时 我会杀死计时器 因此这应该会导致问题 但我认为导致问题的原因是我的消息队列中有太多消息 我有一台
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 如何使用 PySpark 有效地将这么多 csv 文件(大约 130,000 个)合并到一个大型数据集中?

    我之前发布了这个问题并得到了一些使用 PySpark 的建议 如何有效地将这一大数据集合并到一个大数据框中 https stackoverflow com questions 60259271 how can i merge this la
  • 我可以分配多少内存?

    如果我的机器上有16 GB的RAM 我可以将多少分配给我正在执行的Java命令行计划 我假设java Xmx 16g 会让我的系统崩溃吗 EDIT 根据评论 我尝试了java Xmx16g 并且它没有使我的机器崩溃 程序仍然内存不足 我试过
  • Process Explorer 报告的进程虚拟内存大小不合理

    在寻找内存泄漏时 我最近注意到 Process Explorer Microsoft Sysinternals v16 26 的 procexp exe 报告的虚拟内存值非常高 就像大约 2 1TB 其中我的笔记本电脑具有运行 Win 10
  • iOS 内存占用的正确统计数据是什么?活字节?真实记忆?其他?

    我在这一点上肯定很困惑 我有一个 iPad 应用程序 在对象分配工具中显示 6 12mb 的 实时字节 使用情况 如果我调出内存监视器或活动监视器 在严重使用后 实际内存 列会持续攀升至 80 90mb 左右 那么我的内存占用是正常的还是高

随机推荐

  • 并发编程--------JUC集合

    并发集合 一 ConcurrentHashMap 1 1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1 8中是以CAS synchronized实现的线程安全 CAS
  • 不会“卷”,就会被淘汰?3招教你打破职场内卷焦虑

    内卷 这个词对大家来说都已经不新鲜了 时不时就会听到 人人皆在卷 万物皆可卷 从未出生那一刻的胎教到出生后的早教 从幼儿园开始的择校 一路 卷 到大学的名号 绩点 而职场内卷 是大家最熟悉的 战场 职场内卷是指在职场竞争中 为了争夺有限的资
  • 【目标检测】---- 正负样本匹配策略

    1 综述 无论是anchor box 还是anchor free 在训练计算类别 前背景损失时都需用到正负样本匹配 目前分为两大类 第一类 fixed label assignment 常用的主要有MaxIou ATSS focos 第二类
  • Docker loop volume VS direct LVM 选型和分析

    测试准备 测试目的 Docker在DeviceMapper这块支持两种存储模式 分别是docker默认的loop volume和Direct VLM 为了了解其中区别也是为了依据业务进行选型 所以选择了对二者进行性能测试 测试范围 性能指标
  • React 引入antd后启动项目时出现的警告信息

    Compiled with warnings Failed to parse source map webpack antd components config provider style index less URL is not su
  • windows不安装虚拟机如何使用Linux系统作为开发工具?

    哈喽 大家好 我是仲一 作为嵌入式开发程序员 常常需要在Linux环境下编译一些代码 安装虚拟机比较方便 但是 太占用内存了 性能不好的电脑开了一台虚拟机后 可能就干不了其他事情了 安装双系统也比较麻烦 常常需要重启电脑来完成系统的切换 今
  • RHCE第四次作业

    1 判新当前磁盘剩余空间是否有20G 如果小于20G 则将报警邮件发送给管理员 每天检查一次磁盘剩余空间 2 判web服务是否运行 1 查看进程的方式判断该程序是否运行 2 通过查看端口的方式判断该程序是否运行 如果没有运行 则启动该服务并
  • Leetcode刷题c++之575. 分糖果

    题目描述 定一个偶数长度的数组 其中不同的数字代表着不同种类的糖果 每一个数字代表一个糖果 你需要把这些糖果平均分给一个弟弟和一个妹妹 返回妹妹可以获得的最大糖果的种类数 示例 输入 candies 1 1 2 2 3 3 输出 3 解析
  • Python与Excel交互与处理

    一 Python与Excel交互的背景及意义 Excel是很多公司和个人在数据分析和处理中使用的工具 其可以通过公式和条件格式等功能 实现简单的数据分析和处理 但是对于复杂的数据分析和处理来说 Excel的局限性就很大 难以满足需求 而Py
  • Nginx 日志配置、日志切割、日志切割脚本

    文章目录 前言 一 access log 1 语法 2 基本用法 3 作用域 4 log format 自定义日志格式 二 error log 1 语法 2 基本用法 3 作用域 4 rewrite log 指令 三 Nginx变量 1 简
  • 地球人口承载力估计 解析和C++代码

    Description 假设地球上的新生资源按恒定速度增长 照此测算 地球上现有资源加上新生资源可供x亿人生活a年 或供y亿人生活b年 为了能够实现可持续发展 避免资源枯竭 地球最多能够养活多少亿人 Input 一行 包括四个正整数x a
  • docker存储管理及实例

    一 Docker存储概念 1 容器本地存储与Docke存储驱动 容器本地存储 每个容器都被自动分配了内部存储 即容器本地存储 采用的是联合文件系统 通过存储驱动进行管理 存储驱动 控制镜像和容器在 docker 主机上的存储和管理方式 容器
  • 【理解系统】查看Linux系统信息

    一 发行版版本号 方法 1 cat etc issue Ubuntu 18 04 LTS n l 方法 2 红帽系 lsb release a LSB Version core 4 1 amd64 core 4 1 noarch Distr
  • 数据结构java版之大O表示法

    大O表示法使用大写字母O 可以认为其含义为 order of 大约是 我们可以使用大O法来描述线性查找使用了O N 级时间 二分查找使用了O log N 级时间 向一个无序数组中插入使用了O 1 或常数级时间 下面的图总结了算法的运行时间
  • TCP网络编程整理总结

    1 每一个TCP套机字中都存在I O缓冲 该缓冲在创建套接字的时候自动生产 2 即使关闭套接字 I O缓冲中输出缓冲的遗留的数据也会继续传输 3 关闭套接字会导致I O缓冲中输入缓冲中遗留的数据丢失 4 tcp数据包header中的seq表
  • 【深入浅出leveldb】文件类型与文件名

    深入浅出leveldb 文件类型与文件名 leveldb运行一段时间后 系统中会产生一些文件 这些文件有哪些 各个文件又有什么作用 文件名怎么命名的呢 本节来剖析这一块东东 代码在 db filename h db filename cc
  • emWin界面刷新

    1 在对话框回调函数中定时重绘按键 cbDialogHome WM MESSAGE pMsg Switch pMsg gt MsgId Case WM INIT DIALOG WM CreateTimer pMsg gt hWin 0 10
  • python 连接 hive

    我建了一个CentOS的虚拟机 为了验证python连接hive 首先 在服务器端除了安装hive 还需要做以下配置 1 配置当前用户的权限 到hadoop下面的 etc hadoop core site xml 2 配置客户端的权限 增加
  • R语言里面的lag()和diff()函数

    R里面的LAG只适用于时间序列 不适合于dataframe或者向量 因此需要自己写一个小小的函数来实现lag的功能 lagdf lt function x k c rep NA k x 1 length x y lt lagdf x 2 c
  • Cacheline技术浅析

    最近组内有个同事在做cacheline相关的特性 向其学习了一下 对原来的cacheline的理解更近了一步 这里总结一下 请彭超大侠有空的话帮忙在斧正一下 Cache就是对内存的内容进行缓存的一个硬件 cache和内存的逻辑关系结构如下图