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

目前市面上有不少分析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 enableddisable_tcache(); //關閉tcachevoid *ptr2 = malloc(200); //tcache disabled.return 0;
}

實現代碼比較直接,都是mallctl調用je_ctl_byname處理不同的設置項的,本例的設置項為"thread.tcache.enabled"。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38559.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38559.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ShareSDK iOS端如何實現小紅書分享

下載SDK 請登陸官網 &#xff0c;找到SDK下載&#xff0c;勾選需要的平臺下載 導入SDK &#xff08;1&#xff09;離線導入將上述下載到的SDK&#xff0c;直接將整個SDK資源文件拖進項目里&#xff0c;如下圖&#xff1a; 并且勾選以下3個選項 在點擊Finish&#xff0c;…

實時跟蹤并顯示Docker容器的最新日志

可以用以下命令實時跟蹤并顯示Docker容器的最新日志 例&#xff1a; 這條命令 docker logs --tail 200 -f docker1 的作用是&#xff1a; docker logs: 這部分指示要查看 Docker 容器的日志。--tail 200: 這個選項指定只顯示最后的200行日志。這意味著你將只看到容器最近生…

JavaSE簡易版掃雷小游戲

描述&#xff1a;用戶輸入二維雷區的高和寬&#xff0c;輸入確定地雷數&#xff0c;隨機在地雷區生成地雷。用戶輸入橫豎坐標進行挖雷&#xff0c;挖到地雷游戲以失敗結束&#xff0c;并讓用戶選擇是否再次游戲&#xff1b;沒挖到雷&#xff0c;顯示該區域8個方向地雷數。如果8…

安徽大學學報-哲學社會科學版

《安徽大學學報》&#xff08;哲學社會科學版&#xff09;簡介 安徽大學學報&#xff08;哲學社會科學版&#xff09;簡要信息 刊 號 CN 34—1040/C ISSN 1001—5019 主 編 張治棟 地 址 安徽省合肥市肥西路3號 郵 編 230039 電 話 &#xff08;0551&#xff09;6…

Spring MVC的高級功能——異常處理(三)異常處理注解

一、ControllerAdvice注解的作用 從Spring 3.2開始&#xff0c;Spring 提供了一個新注解ControllerAdvice&#xff0c; ControllerAdvice有以下兩個作用。 ? 注解作用在類上時可以增強Controller&#xff0c;對Controller中被RequestMapping注解標注的方法加一些邏輯處理。…

uniapp + vue3 + Script Setup 寫法變動 (持續更新)

一、uniapp 應用生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutorial/vue3-composition-api.html 注意&#xff1a; 應用生命周期僅可在App.vue中監聽&#xff0c;在其它頁面監聽無效。 二 、uniapp頁面生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutori…

C語言 輸出所有的水仙花數

輸出所有的“水仙花數”&#xff08;水仙花數指一個三位數&#xff0c;其各位數字立方和等于該數本身。例如153是水仙花數&#xff0c;因為1^35^33^3153&#xff09; 這個程序找出所有的三位水仙花數&#xff0c;并輸出它們。 &#xff08;如果每各數字立方和等于原數字&…

Java SE入門及基礎(62) 線程池 執行器

線程池 1. 執行器 In all of the previous examples, theres a close connection between the task being done by a new thread, as defined by its Runnable object, and the thread itself, as defined by a Thread object. This works well for small applications, but…

Golang | Leetcode Golang題解之第212題單詞搜索II

題目&#xff1a; 題解&#xff1a; type Trie struct {children map[byte]*Trieword string }func (t *Trie) Insert(word string) {node : tfor i : range word {ch : word[i]if node.children[ch] nil {node.children[ch] &Trie{children: map[byte]*Trie{}}}nod…

Zynq系列FPGA實現SDI視頻編解碼,基于GTX高速接口,提供5套工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦本博已有的 SDI 編解碼方案本方案在Xilinx--Kintex系列FPGA上的應用 3、詳細設計方案設計原理框圖SDI 輸入設備Gv8601a 均衡器GTX 解串與串化SMPTE SD/HD/3G SDI IP核BT1120轉RGB圖像緩存視頻讀取控制HDMI輸出RGB轉BT1120Gv8500 驅…

vuepress使用簡介及個人博客搭建

目錄 一、介紹二、環境準備三、安裝運行vuepress四、目錄結構五、配置文件六、導航欄配置七、導航欄logo八、瀏覽器圖標九、側邊欄配置十、添加 Git 倉庫和編輯鏈接十一、部署到GitHub十二、搭建成功 一、介紹 VuePress 是 Vuejs 官方提供的一個是Vue驅動的靜態網站生成器&…

Qt 配置ASan

Qt 配置ASan 文章目錄 Qt 配置ASan摘要關于ASan&#xff08;AddressSanitizer&#xff09;在Qt中配置 ASan1. 安裝必要的工具2. 修改項目的 .pro 文件3. 重新構建項目4. 運行應用程序5. 分析錯誤報告示例注意事項 關鍵字&#xff1a; Qt、 ASan、 AddressSanitizer 、 GCC …

CTFHUB-SSRF-Redis協議

本題需要用到&#xff1a; 在線編碼網址&#xff1a;https://icyberchef.com/ gopherus工具&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139440201 開啟題目&#xff0c;頁面空白 和上一個題FastCGI協議一樣&#xff0c;還是使用gopherus攻擊redis ./gopheru…

Oracle PL / SQL 插入insert 第二部分

DUAL表 dual是由具有一列和一行的oracle數據庫&#xff08;所有者SYS&#xff09;擁有的表。 要評估1 1的添加&#xff0c;請執行以下SQl SELECT語句&#xff1a; SELECT 1 1 FROM dual; 快速找出oracle如何評估你對內置函數length&#xff08;&#xff09;的使用。 SELE…

vlan基礎相關

7.2以太網交換基礎 數據鏈路層也叫2層網絡&#xff0c;用的是Mac地址&#xff0c;想到Mac地址就要想到交換機。 以太網協議&#xff08;LAN&#xff09;以太網是建立在CSMA/CD載波監聽多路訪問/沖突檢測&#xff0c;機制上的廣播型網絡。CSMA工作原理是先監聽&#xff0c;在介…

110kV以下變電所電力監控-安科瑞電力監控解決方案

一、系統介紹 變電站電力監控系統為110kV及以下用戶變電站提供了完整的SCADA功能。 二、系統硬件 AM5SE系列微機保護裝置 全電參量測量 諧波制動獨立操作回路 可編程出口矩陣&#xff1b;定制化的邏輯設計&#xff1b;故障錄波&#xff1b;事件記錄、故障 錄波數據&#x…

在UniApp中使用Three.js渲染3D模型

在移動應用開發中,3D渲染正變得越來越普遍。本文將介紹如何在UniApp框架中集成Three.js庫來渲染3D模型,為您的應用增添引人注目的視覺效果。 1. 簡介 UniApp是一個跨平臺開發框架,允許開發者使用Vue.js開發一次,就能發布到iOS、Android、Web等多個平臺。Three.js則是一個強大…

3099. 哈沙德數 Easy

如果一個整數能夠被其各個數位上的數字之和整除&#xff0c;則稱之為 哈沙德數&#xff08;Harshad number&#xff09;。給你一個整數 x 。如果 x 是 哈沙德數 &#xff0c;則返回 x 各個數位上的數字之和&#xff0c;否則&#xff0c;返回 -1 。 示例 1&#xff1a; 輸入&a…

高內聚低耦合舉個例子詳細介紹

學習目標&#xff1a; 高內聚低耦合舉個例子詳細介紹 學習內容&#xff1a; 高內聚和低耦合是軟件設計中的兩個重要原則&#xff0c;旨在提高系統的可維護性、可擴展性和靈活性。下面我們通過一個例子詳細介紹高內聚和低耦合的概念及其實現方法。 例子&#xff1a;在線購物系…

聊天交友系統開發專業語聊交友app開發搭建同城交友開發婚戀交友系統相親app開發

1、上麥相親互動:直播間內除了紅娘外&#xff0c;還有男女用戶兩個視頻麥位&#xff0c;直播間符合要求的用戶可以申請上麥 2、公屏聊天:為上麥用戶可以通過在公屏發言的方式參與直播間內的話題互動。 3、私信,異性用戶之間可以發送私信消息&#xff0c;通過付費或開通會員可解…