九浅一深Jemalloc5.3.0 -- ④浅*配置

news2024/11/17 13:44:02

目前市面上有不少分析Jemalloc老版本的博文,但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析最新release版本Jemalloc5.3.0的实现。

另外,单讲实现代码是极其枯燥的,我将尽量每个原理知识点都用一个简简单单的小程序引出,这样便于大家测试和上手调试。另外,我还会用GDB打印数据结构、变量的值,方便理解当时的状态或算法。

jemalloc留了几个口子来配置参数,从而提高性能,我了解到的有以下四种:

  1. 编译选项
  2. 配置文件(链接) /etc/malloc.conf
  3. 环境变量 MALLOC_CONF
  4. 用户程序中调用mallctl动态配置

下面我详细介绍这四种配置方式,因为前面介绍了tcache,它默认是enabled的,本节我将分别用这几种配置方式disable tcache。

 欲了解其它设置项请参考https://jemalloc.net/jemalloc.3.html

前三种方式,都是通过函数obtain_malloc_conf来拿到配置字符串的。

1. 编译选项

还记得编译那一篇中我们用了一个--enable-debug选项吗?

./configure --enable-debug

configure脚本还支持很多选项,都列在了INSTALL.md中,其中有一个--with-malloc-conf可以用来配置参数。


cd jemalloc-5.3.0
./configure --with-malloc-conf="tcache:false"
make
sudo make install

像这样就会关闭tcache功能。

用户所给出的"tcache:false"会作为全局变量config_malloc_conf的初始值。

config_malloc_conf中tcache的值false会赋给全局变量opt_tcache以供后来使用

用户的输入已传递到opt_tcache:

之后调用如下函数在tsd中设置tcache_enabled=flase(实际为设置tsd->cant_access_tsd_items_directly_use_a_getter_or_setter_tcache_enabled=false) 。

call stack:

总结一下,数据流向为:./configure --with-malloc-conf="tcache:false" => config_malloc_conf => opt_tcache => tsd 

 

2. 配置文件(链接) /etc/malloc.conf

ln -sf 'tcache:false' /etc/malloc.conf

执行 以上命令,/etc/malloc.conf的链接内容就变成了tcache:false, 注意:不是指向文件。false会先赋给全局变量opt_tcache,与第一种方式一样之后传给tsd。

3. 环境变量 MALLOC_CONF

环境变量可以设置全局的也可以设置临时的,临时的如下:

MALLOC_CONF="tcache:false" ./a.out

获得环境变量值的代码如下: 

之后也是把值赋值给opt_tcache, 与第一种方式一样之后传给tsd。

4. 用户程序中调用mallctl动态配置

前面的办法对一个程序来讲是静态的,一旦设定,程序中不能更改。与之相反,mallctl函数允许编程者在运行中动态改变参数值。看下面的例子。

$ cat disable_tcache.c
#include <jemalloc/jemalloc.h>
#include <stdbool.h>
#include <stdio.h>

void disable_tcache() {
    bool tcache_enabled = false;
    size_t sz = sizeof(tcache_enabled);
    if (mallctl("thread.tcache.enabled", NULL, NULL, &tcache_enabled, sz) != 0) {
        perror("Error disabling tcache");
    }
}

int main() {
    void *ptr1 = malloc(100); //默认tcache enabled
    disable_tcache(); //关闭tcache
    void *ptr2 = malloc(200); //tcache disabled.

    return 0;
}

实现代码比较直接,都是mallctl调用je_ctl_byname处理不同的设置项的,本例的设置项为"thread.tcache.enabled"。

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

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

相关文章

计算机I/O系统与外围设备详解:从基础概念到实际应用

计算机I/O系统与外围设备详解&#xff1a;从基础概念到实际应用 在计算机世界中&#xff0c;理解I/O系统和外围设备的基本概念对初学者来说至关重要。本文将详细介绍I/O系统的基础知识、I/O接口、计算机外围设备及其工作原理&#xff0c;帮助基础小白更好地理解这些概念。 I/O…

设备调试上位机GUI

C Fast Qt C 前端 原来真的不需要在 design 上画来画去&#xff0c;有chat-gpt 那里不知道问哪里 全是组件拼起来的,不需要画,最后发现其实也是定式模式,跟着AI 学套路

AutoIt和Python之间的加密解密转换

在AutoIt和Python之间进行加密和解密转换&#xff0c;通常涉及使用相同的加密算法和密钥。以下是一个示例&#xff0c;演示如何在AutoIt和Python中使用AES对称加密算法进行加密和解密。 1、问题背景 有一位用户尝试使用 AutoIt 与 Python TCP 服务器进行加密通信&#xff0c;但…

鸽哒IM即时通讯安卓+苹果双系统源码20240701(最新反编译版)

鸽哒IM即时通讯系统源码20240701&#xff08;最新反编译版&#xff09;鸽哒IM即时通讯系统是一款类似于weixin的即时通讯软件&#xff0c;具有独立开发的特点。与网络其他聊天软件相比&#xff0c;即时聊天软件技术难度大&#xff0c;不能轻易对比。带即时语音通话功能 源码下载…

Typora导出为Word

文章目录 一、场景二、安装1、网址2、解压并验证 三、配置四、重启Typora 一、场景 在使用Typora软件编辑文档时&#xff0c;我们可能需要将其导出为Word格式文件 当然我们可以直接在菜单里进行导出操作 文件-> 导出-> Word(.docx) 如果是第一次导出word文件&#xff0…

解析Linux top 命令输出并生成动态图表

文章目录 0. 引言1. 功能2.使用步骤3. 程序架构流程图结构图 4. 数据解析模块5. 图表绘制模块6. 主程序入口7. 总结8. 附录完整代码 0. 引言 在性能调优和系统监控中&#xff0c;top 命令是一种重要工具&#xff0c;提供了实时的系统状态信息&#xff0c;如 CPU 使用率、内存使…

【MySQL篇】Percona XtraBackup物理备份工具的基础理论概述(第一篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

Python海量数据处理脚本大集合:pyWhat

pyWhat&#xff1a;精简海联数据&#xff0c;直达数据弱点要害- 精选真开源&#xff0c;释放新价值。 概览 pyWhat是Github社区上一款比较实用的开源Python脚本工具。它能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。当你遇到了一串莫名…

【Python实战因果推断】13_线性回归的不合理效果3

目录 Regression Theory Single Variable Linear Regression Multivariate Linear Regression Frisch-Waugh-Lovell Theorem and Orthogonalization Regression Theory 我不打算太深入地探讨线性回归是如何构建和估计的。不过&#xff0c;一点点理论知识将有助于解释线性回归…

申请一张含100个域名的证书-免费SSL证书

挑战一下&#xff0c;申请一张包含100个域名的证书 首先&#xff0c;我们访问来此加密网站&#xff0c;进入登录页面&#xff0c;输入我的账号密码。 登录后&#xff0c;咱们就可以开始申请证书&#xff0c;首先说一下&#xff0c;咱账号是SVIP哦&#xff0c;只有SVIP才可以申…

拍摄的vlog视频画质模糊怎么办?视频画质高清修复

在短视频逐渐成为主流的今天&#xff0c;许多朋友都会通过vlog的形式记录下自己的生活。但我们会发现&#xff0c;自己拍摄的视频与专业博主拍摄的视频&#xff0c;在画质上就会有所差别&#xff0c;拍摄的vlog视频画质模糊不清晰怎么办&#xff1f; 拍摄的vlog视频画质模糊怎么…

Linux-网络安全私房菜

文章目录 前言入门基本指令篇章字符集设置cdlsdatemkdirtouch-d-m 修改主机名rmshredrename重命名mv移动tar打包与压缩打包但是不压缩打包且压缩更新包文件解压对应的包 zip压缩文件命令cat查看显示行号交互写入&#xff08;追加&#xff09;显示空行 more和lesshead和tailhead…

虚拟环境管理

虚拟环境 在使用 Python 时我们一般使用“pip install 第三方包名”来安装第三方包&#xff0c;但是由于pip的特性&#xff0c;系统只能安装每个包的一个版本。而在实际开发中&#xff0c;可能同时开发多个项目&#xff0c;如&#xff1a;上图有三个项目&#xff1b;每个项目需…

【笔记】通过shell脚本自动部署项目(未完成)

然后将gitee仓库上的代码克隆至linux上 如果不知道gitee仓库怎么上传代码移步【笔记】如何在gitee仓库上传idea代码-CSDN博客 写到一半不想写了自己去复习p138-139吧

【QT】输入类控件

目录 Line Edit 核心属性 核心信号 正则表达式 示例&#xff1a;使用正则表达式验证输入框内容 示例&#xff1a;切换输入框密码模式下的显示状态 Text Edit 核心属性 核心信号 示例&#xff1a;获取多行输入框的内容同步显示到label 示例&#xff1a;获取文本的选…

微信小程序template模板引入

如图&#xff1a;temp.wxml是template引入的模板 在two.wxml中&#xff1a; import&#xff1a;是引入temp的页面让template中的内容显示出来在two页面中&#xff1b; include:是显示temp页面内容不在template包裹&#xff0c;template以外的view标签文字和不在view的文字让…

独家首发 | Matlab实现SVM-Transformer多变量回归预测

独家首发 | Matlab实现SVM-Transformer多变量回归预测 目录 独家首发 | Matlab实现SVM-Transformer多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SVM-Transformer多变量回归预测&#xff0c;SVM递归特征消除Transformer多输入单输出回归预测…

GOM引擎源码 完整可编译 带微端 附带基础附件

GOM引擎源码 完整可编译 带微端 附带基础附件 时间紧迫&#xff0c;无暇顾及&#xff0c;无意中得到即公布GameOfMir源码未测试&#xff0c;专业人事自行编译测试&#xff01;非诚勿扰&#xff01;源码下载&#xff1a;极速云

已解决org.omg.CORBA.portable.RemarshalException:在CORBA中需要重新编组的正确解决方法,亲测有效!!!

已解决org.omg.CORBA.portable.RemarshalException&#xff1a;在CORBA中需要重新编组的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 检查网络连接 …

递归----计算P函数

注意运算中的符号不能少&#xff01;&#xff01;&#xff01;&#xff01; * 必须体现出&#xff01;&#xff01;&#xff01;&#xff01; #include <stdio.h>double P( int n, double x );int main() {int n;double x;scanf("%d %lf", &n, &x);pri…