linux kernel物理内存概述(七)

目录

一、内核中小内存、频繁分配和释放场景

二、slab是内存池化技术

三、内核中使用slab对象池的地方

四、slab内核设计


        使用比页小的内存,内核的处理方式使用slab

一、内核中小内存、频繁分配和释放场景

  1. slab首先会向伙伴系统一次性申请一个或者多个物理内存页面,正是这些物理内存页组成了slab内存池。
  2. slab内存池会将这些连续的物理内存页面划分成多个大小相同的小内存块,同一种slab内存池下,划分出来的内存块尺寸是一样的。
  3. 比如内核经常使用的核心数据结构

        task_struct mm_struct ,struct page ,struct file socket对象等。

二、slab是内存池化技术

  1. 当内核需要频繁分配和释放内核对象时,就可以直接从相应的slab对象池中申请和释放内核对象,避免了链路较长的内存分配与释放技术,极大的提升性能。
  2. 利用CPU高速缓存 提高访问速度。当一个对象被直接释放回slab时,这个内核对象还是热的,仍然驻留在CPU高速缓存中。如果这时,继续向SLAB对象池申请对象,SLAB对象池就会把这个刚刚释放,驻留在高速缓存中的对象分配给内核使用,访问起来速度会更快。
  3. 伙伴系统只能分配2^ORDER物理内存页,这会引起占用高速缓存以及TLB的空间较大,导致一些不重要的数据驻留在CPU高速缓存行中占用宝贵的缓存空间,而重要的数据被置换中内存中,slab对象池针对小内存分配场景。可以有效的避免这一点。
  4. 调用伙伴系统的操作会对CPU高速缓存L1CACHE中的Instruction Cache和 Data Cache有污染,因为伙伴系统的长链路调用,相关的一些指令和数据必然会填充到Instruction Cache 和 Data Cache 中,从而将频繁使用的一些指令和数据挤压出去,造成缓存污染。
  5. 使用slab对象池可以充分利用CPU高速缓存,避免多个对象同一cache line的征用。


三、内核中使用slab对象池的地方

  • fork 内核需要使用task_struct专属的slab对象池分配task_struct对象

tsk = alloc_task_struct_node(node)
  • 为进程创建虚拟内存空间是,内核使用mm_struct专属的slab对象池分配mm_struct对象。

struct mm_struct * mm = allocate_mm()
  • 向高速缓存page cache查找对应的文件缓存页时,内核需要使用struct page专属的slab对象池分配

 struct page *page = __page_cache_alloc(gfp_mask)
  • 使用open打开文件时,内核需要使用struct file 专属的slab对象池分配 struct file对象

 struct file *flip = alloc_empty_file()
  • socket对象

newsock = sock_alloc();

四、slab内核设计

  • slab对象池可根据情况向伙伴系统一次性申请一页或多个内存页。 
  • 对象的object size可以是任意的,并不是内存对齐的,CPU访问没有对齐的内存比访问对齐的内存速度要慢一倍。不能简单按照尺寸object size来划分内存块,需要考虑对象内存地址要按照 word size进行对齐。
  • 内核为了应对内存读写越界场景,在内存周围插入了一段不可访问的内存区域,这些内存区域使用特定字节0xbb填充,当进程访问到内存是0xbb时,表示已经越界访问了,这段内存区域在slab术语为 red zone。可以理解为红色警戒区。
     

学习参考

https://course.0voice.com/v1/course/intro?courseId=2&agentId=0


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学大数据|文献阅读|有关“肠癌+机器学习”的研究记录

目录 1.机器学习算法识别结直肠癌中的免疫相关lncRNA signature 2.基于机器学习的糖酵解相关分子分类揭示了结直肠癌癌症患者预后、TME和免疫疗法的差异,2区7 3.整合深度学习-病理组学、放射组学和免疫评分预测结直肠癌肺转移患者术后结局 4.最新7.4分纯生信&am…

二叉树的前、中、后序遍历

leetcode144. 二叉树的前序遍历 leetcode94. 二叉树的中序遍历 leetcode145. 二叉树的后序遍历 思路 这里前中后序遍历,其实指的就是中间节点的遍历顺序 前序遍历:中左右 中序遍历:左中右 后序遍历:左右中 self.result.append(r…

复杂业务场景下,如何优雅的使用设计模式来优化代码?

1、引言 本文以一个实际案例来介绍在解决业务需求的路上,如何通过常用的设计模式来逐级优化我们的代码,以把我们所了解的到设计模式真实的应用于实战。 2、背景 假定我们现在有一个订单流程管理系统,这个系统对于用户发起的一笔订单&#…

如何简单使用Java程序的异常捕获

我们在开发中难免会出现程序错误的问题,但是如果出错了的话那么整个程序就会报错,这样在开发中是不允许的,能传递报错消息但是系统不能崩盘,这就需要使用异常区捕获了 如何自己创建一个异常呢,如下 Component public…

HNU-算法设计与分析-甘晴void学习感悟

前言 算法设计与分析,仅就课程而言,似乎是数据结构与算法分析的延续 教材使用: 课程 关于课程,橙学长讲的非常清晰,我深以为然。 HNUCS-大三课程概览-CSDN博客文章浏览阅读1.3k次,点赞5次,收…

安装nginx:手动安装和yum安装

本文在centos7.9下分别尝试了yum安装和手动安装,记录一下试验过程。为后来者少踩点坑。 下载 下载地址:链接 。建议下载稳定版本,也就是Stable Version,这里下载的是 nginx-1.24.0 # 我下载在如下文件夹 mkdir/opt/apps cd /op…

ES入门五:组合查询

带有组合功能的Api有以下几个: Bool Query:布尔查询,可以组合多个过滤语句来过滤文档Boosting Query:在postive块中指定匹配文档的语句,同时降低在negative块中也匹配的文档的得分,提供调整相关性算法的能…

Android调用浏览器打开指定页面

一、启动Android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。 Uri uri Uri.parse("https://www.baidu.com"); …

代码随想录 回溯算法-排序

目录 46.全排序 47.全排列|| 332.重新安排行程 46.全排序 46. 全排列 中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,…

蓝桥杯每日一题:烤鸡dfs

这道题考察了dfs的应用,题干十分有趣,思考过程对以后类似题目也有很强的参考性,一起来学习吧! 题目: # 烤鸡 ## 题目背景 猪猪 Hanke 得到了一只鸡。 ## 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜…

js的运算符

?? 是根据 null 和 undefined 判断的, || 是根据 布尔值 false 判断的, 左侧为true 不看右侧 && 左侧为false 不看右侧 ?. ”可选链操作符“,允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。在引…

蓝桥杯练习题——归并排序

1.火柴排队 思路 1.求最小值的时候,可以直接按升序排序,这样得到的值就是最小值 2.求最小交换次数的时候,不能直接排序,因为只能交换相邻的数,只需要知道他们的相对大小,所以可以先用离散化,把…

清华大学1748页CTF竞赛入门指南,完整版开放下载!

CTF是一种针对信息安全领域的经济性挑战,旨在通过解决一系列的难题来寻找隐藏的“flag”。CTF比赛战队一般是以高校、科研单位、企业、信息安全从业者或社会团体组成。对于网安爱好者及从业者来说,拥有“CTF参赛经验”也是求职中的加分项。 前几天分享的…

什么是智慧公厕?智慧公厕设备有哪些

在现代社会,公共厕所作为城市基础设施的重要一环,承载着城市卫生、居民生活品质的重要责任。然而,传统公厕存在的问题仍然不可忽视:脏乱差、资源浪费、安全隐患等等。 为了解决这些问题,针对公共厕所日常使用、运营管…

密码学——流密码和分组密码

引言: 首先回顾一下一次一密密码的概念:密钥随机产生,而且只使用一次,是一种理想的理论安全的加密方案。这种加密方式无条件安全,且加密和解密均为加法运算,效率较高。但是由于密钥长度与明文长度一样长,密钥共享困难,实用性受限。   那么在实际应用中更具实用性的加…

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题,提出了一种特殊的RNN模型——长短期记忆网络(Long Short-Term Memory networks, LSTM),能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…

ORA/GSA -- 学习记录

brief over-representation analysis(ORA),过表“达”分析,就是我们做多分组的RNAseq数据解析后会得到一些差异表达的gene,有些时候是单独拿出一个差异gene去解释表型,缺点是欠缺证据力度。有些人就把一些相关的差异gene放在一块儿解释&…

网络编程---网络编程入门、UDP通信程序、TCP通信程序

1.网络编程入门 1.网络编程概述 网络编程: 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据传输 计算机网络: 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来&#…

SQL常用函数

Inner join vs left join 当您只想返回两边都有对的记录时,您将使用 INNER JOIN,当您需要“左”表中的所有记录时,您将使用 LEFT JOIN,无论它们是否在“右”表中有对或不。如果您需要两个表中的所有记录,无论它们是否…

J1周-ResNet-50算法

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 我的环境: 1.语言:python3.7 2.编译器:pycharm 3.深度学习框架Tensorflow/Pytorch 1.8.0cu111 一、问题引出 CNN能够提取低、中、…