Linux内核中内存管理相关配置项的详细解析4

news2024/12/25 12:52:59

接前一篇文章:Linux内核中内存管理相关配置项的详细解析3

 

二、SLAB allocator options

1. Choose SLAB allocator

此选项选择一个slab分配器。

此项展开后如下图所示:

  • SLAB

对应配置变量为:CONFIG_SLAB。

内核源码详细解释为:

The regular slab allocator that is established and known to work

well in all environments. It organizes cache hot objects in

per cpu and per node queues.

已建立并已知在所有环境中都能很好地工作的常规slab分配器。它在每个cpu和每个节点队列中组织缓存热对象。

  • SLUB (Unqueued Allocator)

对应配置变量为:CONFIG_SLUB。

此项为“Choose SLAB allocator”的默认选择。

内核源码详细解释为:

SLUB is a slab allocator that minimizes cache line usage

instead of managing queues of cached objects (SLAB approach).

Per cpu caching is realized using slabs of objects instead

of queues of objects. SLUB can use memory efficiently

and has enhanced diagnostics. SLUB is the default choice for

a slab allocator.

SLUB是一个slab分配器,它可以最大限度地减少缓存线的使用,而不是管理缓存对象的队列(slab方法)。每cpu缓存是使用slabs对象而不是对象队列来实现的。SLUB可以有效地使用内存,并具有增强的诊断功能。SLUB是slab分配器的默认选择。

  • SLOB (Simple Allocator)

对应配置变量为:CONFIG_SLOB。

内核源码详细解释为:

SLOB replaces the stock allocator with a drastically simpler

allocator. SLOB is generally more space efficient but

does not perform as well on large systems.

SLOB用一个简单得多的分配器取代了stock allocator。SLOB通常更节省空间,但在大型系统上表现不佳。

2. Allow slab caches to be merged

对应配置变量为:CONFIG_SLAB_MERGE_DEFAULT。

此项只有选中和不选中两种状态,默认为选中。只有当上一项“Choose SLAB allocator”选择为“SLUB (Unqueued Allocator)”时,此项才会出现。

内核源码详细解释为:

For reduced kernel memory fragmentation, slab caches can be

merged when they share the same size and other characteristics.

This carries a risk of kernel heap overflows being able to

overwrite objects from merged caches (and more easily control

cache layout), which makes such heap attacks easier to exploit

by attackers. By keeping caches unmerged, these kinds of exploits

can usually only damage objects in the same cache. To disable

merging at runtime, "slab_nomerge" can be passed on the kernel

command line.

为了减少内核内存碎片,当slab缓存共享相同的大小和其他特性时,可以合并它们。这带来了内核堆溢出的风险——能够覆盖合并缓存中的对象(并且更容易控制缓存布局),这使得攻击者更容易利用此类堆攻击。通过保持缓存不合并,这类漏洞通常只能损坏同一缓存中的对象。要在运行时禁用合并,可以在内核命令行上传递“slab_nomerge”。

3. Randomize slab freelist

对应配置变量为:CONFIG_SLAB_FREELIST_RANDOM。

此项只有选中和不选中两种状态,默认为选中。只有当“Choose SLAB allocator”选择为“SLUB (Unqueued Allocator)”时,此项才会出现。

内核源码详细解释为:

Randomizes the freelist order used on creating new pages. This

security feature reduces the predictability of the kernel slab

allocator against heap overflows.

随机化创建新页面时使用的自由列表顺序。这个安全特性降低了内核slab分配器对堆溢出的可预测性。

4. Harden slab freelist metadata

对应配置变量为:CONFIG_SLAB_FREELIST_HARDENED。

此项只有选中和不选中两种状态,默认为选中。只有当“Choose SLAB allocator”选择为“SLUB (Unqueued Allocator)”时,此项才会出现。

内核源码详细解释为:

Many kernel heap attacks try to target slab cache metadata and

other infrastructure. This options makes minor performance

sacrifices to harden the kernel slab allocator against common

freelist exploit methods. Some slab implementations have more

sanity-checking than others. This option is most effective with

CONFIG_SLUB.

许多内核堆攻击试图以slab缓存元数据和其它基础设施为(攻击)目标。这些选项在针对常见的自由列表利用开发方法强化内核slab分配器方面做出了较小的性能牺牲。一些slab实现比其它实现具有更多的健全性检查。此选项对于CONFIG_SLUB中最为有效。

5. Enable SLUB performance statistics

对应配置变量为:CONFIG_SLUB_STATS。
此项只有选中和不选中两种状态,默认为不选中。只有当“Choose SLAB allocator”选择为“SLUB (Unqueued Allocator)”时,此项才会出现。

内核源码详细解释为:

SLUB statistics are useful to debug SLUBs allocation behavior in

order find ways to optimize the allocator. This should never be

enabled for production use since keeping statistics slows down

the allocator by a few percentage points. The slabinfo command

supports the determination of the most active slabs to figure

out which slabs are relevant to a particular load.

Try running: slabinfo -DA

SLUB统计信息有助于调试SLUB分配行为,以便找到优化分配器的方法。此项永远不应该为生产使用而启用(也就是说发布的产品中不应该启动此项),因为保持统计数据会使分配器慢几个百分点。slabinfo命令支持确定最活跃的slab,以确定哪些slab与特定荷载相关。

尝试运行:slabinfo-DA

6. SLUB per cpu partial cache

对应配置变量为:CONFIG_SLUB_CPU_PARTIAL。
此项只有选中和不选中两种状态,默认为选中。只有当“Choose SLAB allocator”选择为“SLUB (Unqueued Allocator)”时,此项才会出现。

内核源码详细解释为:

Per cpu partial caches accelerate objects allocation and freeing

that is local to a processor at the price of more indeterminism

in the latency of the free. On overflow these caches will be cleared

which requires the taking of locks that may cause latency spikes.

Typically one would choose no for a realtime system.

每cpu部分缓存加速了处理器本地的对象分配和释放,代价是释放的延迟更不确定。溢出时,这些缓存将被清除,这需要获取可能导致延迟峰值的锁。对于实时系统,通常会选择“否”。

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

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

相关文章

Vue3 + TS + Vite —— 大屏可视化 项目实战

前期回顾 Vue3 Ts Vite pnpm 项目中集成 —— eslint 、prettier、stylelint、husky、commitizen_彩色之外的博客-CSDN博客搭建VIte Ts Vue3项目并集成eslint 、prettier、stylelint、huskyhttps://blog.csdn.net/m0_57904695/article/details/129950163?spm1001.2014…

一年肝4个项目,10万+行代码,面试妥妥的

大家好,我是冰河~~ 最近很多小伙伴私信问我:目前所在的公司工资比较低,已经很久没有涨薪了,想跳槽,找一份工资更高的工作,但是苦于平时所做的项目就是一些简单的CRUD操作,没有什么技术含量&…

习惯了VSCode的快捷键,如何让HbuilderX快捷键也和VSCode一样?

hbuilderX uni-app 自定义快捷键无效、无法生效解决方法(附:好用的常用的快捷键自定义代码片段)_你挚爱的强哥的博客-CSDN博客才能让原有默认的快捷键被覆盖。https://blog.csdn.net/qq_37860634/article/details/131161953

如何在 Python 中给请求设置用户代理 User-Agent

文章目录 了解 HTTP 标头的工作原理在 Python 中获取用户代理数据在 Python 中使用请求设置用户代理值在 Python 中为请求版本 2.12 设置用户代理请求在 Python 中为请求版本 2.13 设置用户代理请求 本文介绍 HTTP 标头用户代理主题以及如何使用 Python 中的请求设置用户代理。…

Python实验: tkinker 的实践

一、实验内容 1、登录界面 2、制作菜单栏 3、实现聊天窗口 4、访问本地一张照片并展示 二、实验过程 1、 import tkinter as tk import tkinter.messagebox import pickleroot tkinter.Tk() root.geometry(400x300) root.title("武理工欢迎你!")# 画布…

2023-6-11-第二式抽象工厂模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

【macbookpro】重装ventura系统

intel 的cpu 的macbook pro 13寸定制版本。 大神们遇到的问题很专业 格式化 mac数据恢复 更新软件 通过“macOS 恢复”重新安装 macOS 大神们说固件是因为时间不对,从美国服务器下载的 打开日志,我看了下我的时间也不对 好像至少要下载2个文件,一…

MATLAB涡度通量数据处理实践技术应用

基于MATLAB语言、以实践案例为主,提供代码、原理与操作结合 1、以涡度通量塔的高频观测数据为例:基于MATLAB开展上机操作 2、涡度通量观测基本概况:观测技术方法、数据获取与预处理等 3、涡度通量数据质量控制:通量数据异常值识…

EPICS boRecord驱动程序编写和使用示例

以下示例程序将展示如何使用gpio的动态链接库编写一个boRecord的驱动程序,并且展示如何使用这个程序,控制一个LED灯的亮灭。 1) 新建这个示例程序的顶层目录,并且用makeBaseApp.pl在新建目录中构建这个IOC程序程序框架&#xff1…

前端项目安全扫描出来的漏洞——解决过程

为什么要升级,如图云桌面(相当于堡垒机-远程桌面)的项目审查是大概基于node16版本进行扫描的,本来我方是通过降版本从14到12绕过大范围更新,但现在躲得过初一躲不过十五,如何更新 package-lock.json 中的一…

HummerRisk获中国开源创新大赛优秀奖

日前,2022中国开源创新大赛落下帷幕,最终HummerRisk 荣获优秀奖。 5月31日,2022中国互联网发展创新与投资大赛暨2022年中国开源创新大赛在京落下帷幕。大赛由中央网信办信息化发展局指导,中国互联网发展基金会、中国网络空间研究院…

聚观早报 |特斯拉11天涨2000亿美元;三星正开发自有大型语言模型

今日要闻:特斯拉11天涨2000亿美元;三星正开发自有大型语言模型;苹果史上最贵新品遇冷;抖音外卖终止1000亿元GMV目标;12306试行在线选铺服务 特斯拉11天涨2000亿美元 特斯拉在 11 天的时间里市值增加了超过 2000 亿美元…

windows 服务程序和桌面程序集成(三)UDP监控工具

系列文章目录链接: windows 服务程序和桌面程序集成(一)概念介绍windows 服务程序和桌面程序集成(二)服务程序windows 服务程序和桌面程序集成(三)UDP监控工具windows 服务程序和桌面程序集成&…

基本线性分组码与性能参数及差错控制

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 基本线性分组码与性…

DAY 73 rsync远程同步

rsync介绍 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前…

回调函数排序异常原因

回调函数排序异常原因 问题所在解决方案 参考我的这篇博文c回调函数排序:回调函数 我之前的代码是这样写的:(存在问题) 问题所在 将数组传递到其他函数中,再使用sizeof(数组名),得到的不是数组的完成长度了(往往会短一些) 解决…

美团、抖音“卷”向本地生活B端

配图来自Canva可画 当美团与大众点评的合并案落下帷幕,美团在本地生活领域的江湖地位就算是基本奠定了。只不过,随着互联网技术的不断发展和创新,本地生活服务又被提供了更多的可能性和新机遇。因此,尽管美团严防死守&#xff0c…

花青素-肠道微生物群-健康轴

谷禾健康 花青素-肠道微生物群-健康轴 经常听到一些专家在介绍食品或保健品时说富含花青素,那么究竟什么是花青素?对我们的健康又有何益处? 花青素是在植物组织中发现的天然水溶性色素,水果、蔬菜、花卉中的呈色物质大部分与之有关…

vue项目中使用html2canvas解决截图不全的问题

话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; <div><el-button click"downloadPicture">下载</el-button><div ref"imageDom"><el-table:data"tableData"style"width: 100%":row…

喜讯 | 华秋电子荣获证券时报年度高成长企业

6月9日&#xff0c;由证券时报社主办的第十一届中国创业投资论坛盛大开启&#xff0c;在论坛上&#xff0c;2023证券时报创投金鹰奖暨创业企业新苗奖评选隆重揭晓。 经过两个多月紧张的申报、投票、评选&#xff0c;近300家机构和企业的激烈比拼&#xff0c;最终一批独具韧劲、…