精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從“豐巢”快遞柜看Jemalloc 的內(nèi)存管理

開發(fā) 前端
由于實踐中不同應用程序內(nèi)存負載的千變?nèi)f化,如何衡量分配器好壞本身就是一個非常復雜的問題。很可能一個分配器設計出來后,在某些用戶負載中表現(xiàn)良好、但在另外負載中卻表現(xiàn)極差,此時我們很難說其是一個好的分配器。

引子

在某些工作負載中,隨著時間的推移,內(nèi)存的使用會逐漸增長,直到 OOM。后面發(fā)現(xiàn)是內(nèi)存碎片問題,而將系統(tǒng)默認的內(nèi)存分配器(glibc malloc[1])換成 jemalloc[2] ,能有效控制內(nèi)存的增長上界。

為了解其背后原理,便找來 jemalloc 最初的論文:A Scalable Concurrent malloc(3) Implementation for FreeBSD[3] 來一探究竟。當然,相比 2006 年論文發(fā)表時,當前的 jemalloc 可能已經(jīng)發(fā)生了很大改變,因此本文只對當時論文內(nèi)容負責。更多 jemalloc 機制,大家可以去其 github 倉庫[4]查看文檔和源碼。

背景

在探討論文的主要思路之前,我們先簡單回顧下內(nèi)存分配器(memory allocator)的作用和邊界。簡言之:

  1. 對下,向操作系統(tǒng)申請大塊內(nèi)存(使用 sbrk、mmap 等系統(tǒng)調(diào)用)
  2. 對上,處理應用層的各種尺寸的內(nèi)存申請請求(malloc(size)),并在應用層“表示”不用(free)后進行釋放

往小了說,分配器的功能非常簡單:分配和釋放(malloc 和 free)。想象中,實現(xiàn)也應該很簡單,只需利用一個表來記錄所有已使用內(nèi)存和未分配內(nèi)存( a bit of bookkeeping),然后:

  1. malloc 請求來了,先去空閑表中找,不夠的話就問操作系統(tǒng)要
  2. free 請求來了,還回空閑表中,如果空的多了,就還給操作系統(tǒng)

但為了實現(xiàn)內(nèi)存的高效分配和回收、控制內(nèi)存的利用率,其間的學問就大了去了,CPU 緩存、 RAM 特性和虛擬內(nèi)存都會對其造成影響。其中最核心的點,就是如何進行內(nèi)存組織排布,以便在用戶高并發(fā)、多尺寸、不定時的申請和釋放后,仍然能保證較低的調(diào)用延遲和較高的使用率。當然,對于本論文來說,還要加上一條:越多的核數(shù)能夠支持越高的并發(fā),謂之可擴展(scale)。

需要說明的是,不要將本文的內(nèi)存分配器和各種具有自動 GC 功能的編程語言運行時(比如 Java 的 JVM、Golang 的 Runtime)所混淆。后者是在 malloc/free 的基礎上,往上繼續(xù)封裝了一層,通過對象間的引用關系來追蹤每個對象的生命周期,以自動地回收空間。

可以這么理解,C++/C 等編程語言要用戶自己通過 malloc/free 來管理內(nèi)存;而使用 Java/Golang/Python,用戶無腦新建對象就可以了,什么時候回收是語言“運行時”的工作。而我們本文只討論前者。

但從另外角度來看,存儲引擎中也實現(xiàn)了類似的功能。因為存儲引擎本質上也是要面對用戶 put/delete 的的請求,來進行存儲的的分配和釋放。只不過這里的存儲,就不局限于內(nèi)存(存儲引擎多是 disk-based)。但其主要思想非常相似,比如使用空閑列表(free list)對可分配內(nèi)存進行追蹤。

主要思想

從論文標題可以看出,jemalloc 在提出時,主要為了解決在多核時代下內(nèi)存分配器性能隨核數(shù)而 scale 問題,但其實論文花了相當多的篇幅來闡釋如何進行內(nèi)存排布來解決碎片問題。下面,我們就圍繞這兩個方向來大致窺探下其原理。

多核并發(fā)

在多核時代進行內(nèi)存分配時,主要面對的問題有:

  1. 搶鎖競爭
  2. 緩存震蕩

為了保證全局數(shù)據(jù)結構的一致性的問題,就必須引入某種手段(比如鎖)來進行協(xié)調(diào)。但如果多線程搶鎖過于頻繁,就會造成嚴重的性能下降。為了降低對鎖的競爭,自然的想法就是,對主要的全局數(shù)據(jù)結構粒度拆分(比如 Java 的 ConcurrentHashMap 就是將哈希桶分成了多個段進行上鎖)。

分配器中最重要的數(shù)據(jù)結構就是空閑列表,我們可以將空閑列表拆分成多個,每個空閑列表使用單獨的鎖。這樣可以緩解多線程的競爭問題,但卻解決不了多核架構的另外一個問題——緩存震蕩(cache sloshing)。

在多核架構中,如果兩個線程沒有正確的共享緩存。比如線程 A 和線程 B 共享了一個緩存行(Cache Line),且兩線程分別會反復修改緩存行的不同部分。如果 A 和 B 調(diào)度到了不同的 CPU 上,就會造成 Cache Line 所有權的反復競爭。

cache sloshingcache sloshing

為了解決此問題,jemalloc 會將所管理的內(nèi)存分為幾個(通常是 CPU 核數(shù)的四倍)區(qū)域( 稱為 Arena,“競技場”)。在不同線程的 client 到來時,會均勻地(round robin)綁定到某個 Arena,之后該 client 所有內(nèi)存的申請和釋放都發(fā)生在該 Arena。論文還提及了 Larson and Krishnan (1998) 之前使用 hash 的方法進行綁定,但由于哈希過程是偽隨機的(pseudo-random),因此很難保證線程到 Arena 的均勻。

下面我們來討論如何在每個 Arena 內(nèi)排布內(nèi)存來應對用戶對象的申請和釋放。

內(nèi)存排布

在開始討論前,我們首先引入一個衡量內(nèi)存利用率的指標——內(nèi)存碎片(fragments),分為內(nèi)部碎片和外部碎片。為了理解這個概念,我們可以思考下平日中“豐巢寄存柜”的工作原理,借此意象來比對理解分配器如何進行內(nèi)存排布的。

“豐巢”一般是問物業(yè)要一塊地方,來建立一個快遞柜(對應一個 Arena),就近服務小區(qū)居民。對于每個快遞柜,會進一步將其劃分成一個個格子,但如何劃分就是講究之處。

由于快遞通常大小不一,如果將快遞柜等分,會有什么問題?

  1. 對于小快遞,每個格子會浪費很多空間(內(nèi)部碎片)
  2. 對于大快遞,所有格子都放不下(明明總空間夠,但卻放不下,此時整個格子就是外部碎片)

為了解決這個問題,我們?nèi)粘V兴姷目爝f柜多會分成大大小小尺寸不等的格子。但仍然可能有快遞員,選一個大格子卻放一個小快遞。對于真實世界來說,這無解,因為所有格子是在快遞柜出廠時就分好的,也即“靜態(tài)分配”的;但在計算機世界,我們對內(nèi)存的劃分都是“邏輯上的”,因此可以做到“動態(tài)分配”。

如果有人往大格子中放了一個小對象,可以將剩下的空間切出來形成一個新格子,給后面的對象用。且,在后面該小對象被取走后,可以將兩個格子重新合并成一個大格子,以應對更大的對象。

這就是“伙伴分配算法”的基本思想,當然,這并非 jemalloc 原創(chuàng)。但 jemalloc 在“二分伙伴算法”基礎上,通過統(tǒng)計用戶負載,進一步精細化管理內(nèi)存,從而控制了碎片的無節(jié)制增長。

比如 jemalloc 發(fā)現(xiàn),大部分的對象不超過 512 B,因此引入了“量子間距”(quantum-spaced)。對這個尺寸附近及以下的格子并不使用伙伴算法,而是在一個頁內(nèi)進行靜態(tài)分配,讓其全是同樣大小的格子——這樣有什么好處呢?由于每個格子大小固定,就可以使用 bitmap 來充當空閑列表,從而加快了空閑列表的查找。

memory layoutmemory layout

這種精細化管理雖然會帶來比較多的外部碎片(很多格子用不了),但卻能更多地減少內(nèi)部碎片(大部分格子能用滿),得可償失。

評估

由于實踐中不同應用程序內(nèi)存負載的千變?nèi)f化,如何衡量分配器好壞本身就是一個非常復雜的問題。很可能一個分配器設計出來后,在某些用戶負載中表現(xiàn)良好、但在另外負載中卻表現(xiàn)極差,此時我們很難說其是一個好的分配器。好的分配器應該是多數(shù)方面表現(xiàn)均衡、某些方面表現(xiàn)突出——因為面對如此復雜的現(xiàn)實世界,不可能所有方面都好,總會有取舍。

因此作者花了很大功夫來設計了一套分配器性能評價工具,來證明 jemalloc 的優(yōu)勢,但這部分就不是本文重點了,感興趣的同學可以去查論文原文。

小結

我們首先鋪墊了內(nèi)存分配器的一些背景,說明了分配器是什么(malloc/free),不是什么(auto gc),和什么相似(存儲引擎 put/get);然后分析了論文中實現(xiàn) jemalloc 的主要目標——多核擴展;繼而討論了其主要實現(xiàn)思路——為了避免競爭和緩存震蕩問題,引入均勻的內(nèi)存分區(qū);為了減少碎片問題,基于伙伴算法對分區(qū)內(nèi)存精細化管理,并以“豐巢快遞柜”比對來幫助理解。

最后提了一嘴如何評估分配器的好壞。需要強調(diào)的是,本文旨在幫你建立直覺,有想要展開查證之處,強烈推薦大家去讀論文原文。

參考資料

[1]glibc malloc: https://github.com/lattera/glibc/blob/master/malloc/malloc.c

[2]jemalloc: https://jemalloc.net/

[3]A Scalable Concurrent malloc(3) Implementation for FreeBSD: https://www.bsdcan.org/2006/papers/jemalloc.pdf

[4]jemalloc github 倉庫: https://github.com/jemalloc/jemalloc

責任編輯:武曉燕 來源: 木鳥雜記
相關推薦

2019-10-21 08:22:36

豐巢刷臉取件

2022-02-17 08:16:23

MMU內(nèi)存管理

2018-10-16 10:42:32

智能快遞柜物業(yè)

2018-12-14 11:22:21

快遞員快遞柜智能

2025-09-03 01:45:00

2019-10-17 10:20:39

人工智能機器學習技術

2022-07-15 13:01:13

Kotlin編程語言Java

2025-09-02 03:33:00

2021-03-07 17:17:07

Java內(nèi)存閉包

2019-10-10 16:20:23

spark內(nèi)存管理

2019-04-17 14:44:42

Spark內(nèi)存源碼

2022-01-12 07:06:42

DPU網(wǎng)卡GPU

2017-04-21 09:30:40

2010-12-21 14:13:25

敏捷開發(fā)Scrum

2021-01-06 05:29:57

虛擬內(nèi)存文件

2024-08-22 08:02:04

OracleSQL語句

2020-12-08 11:32:14

黑客快遞柜攻擊

2011-08-03 11:00:29

IT運維管理ITIL

2014-07-14 15:19:43

IT信息工程運維
點贊
收藏

51CTO技術棧公眾號

99r国产精品视频| 日韩小视频在线| 国产毛片视频网站| 男女网站在线观看| 久久精品国产清高在天天线| 一级做a爰片久久毛片美女图片| 午夜剧场在线免费观看| 成年人视频免费在线播放| 久久精品在这里| 国产在线98福利播放视频| 欧美成人aaaaⅴ片在线看| 欧洲乱码伦视频免费| 欧美xxxx在线观看| 超碰在线公开97| mm视频在线视频| 国产精品久久久久四虎| 精品蜜桃传媒| 99久久精品国产一区色| 日韩国产精品久久| 97香蕉超级碰碰久久免费软件| 亚洲女人毛茸茸高潮| 同性恋视频一区| 日韩一级精品视频在线观看| 三级4级全黄60分钟| 日本在线观看高清完整版| 欧美韩日一区二区三区| 久久草视频在线看| 亚洲精品久久久久久久久久| 日韩精品成人一区二区三区| 欧美精品久久久久久久久| 操她视频在线观看| 第一sis亚洲原创| 亚洲人成五月天| 中文字幕一区二区久久人妻网站| 日韩精品一区二区三区中文| 在线视频综合导航| 国产精品97在线| 蜜桃麻豆影像在线观看| 亚洲香肠在线观看| 蜜桃视频一区二区在线观看| 精品麻豆一区二区三区| 国产农村妇女毛片精品久久麻豆| 看高清中日韩色视频| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | www.99久久热国产日韩欧美.com| 男男做爰猛烈叫床爽爽小说 | 日韩一区二区电影在线| 91亚洲精品久久久蜜桃借种| av成人在线观看| 欧美在线观看视频一区二区 | 国产精品111| 欧美日韩亚洲一区| 精品自在线视频| 五月天丁香激情| 欧美三级视频| 性欧美xxxx交| 天干夜夜爽爽日日日日| 久久蜜桃精品| 国产精品久久综合av爱欲tv| 懂色av蜜臀av粉嫩av喷吹| 免费观看久久久4p| 91牛牛免费视频| 亚洲国产精彩视频| 成人av免费观看| 久久久久久久久久久久久久久久av | 国产精品 日韩| 亚洲av片一区二区三区| 国产亚洲午夜高清国产拍精品| 热舞福利精品大尺度视频| 裸体xxxx视频在线| 中文字幕亚洲一区二区va在线| 中文字幕中文字幕一区三区| 日韩经典av| 精品久久中文字幕| 一区二区成人网| 日韩精品视频在线看| 亚洲国产精品久久| 精品一区二区三区蜜桃在线| 不卡中文字幕| 欧美大秀在线观看| 精品国产乱子伦| 国产一区二区三区美女| 精品国产一区二区三区四区vr| 日韩有码电影| 自拍偷拍欧美精品| 青青青免费在线| 美女视频一区| 精品成人一区二区三区| 国产 欧美 在线| 午夜亚洲福利| 国产精品h在线观看| 国产乱淫a∨片免费视频| 97久久精品人人爽人人爽蜜臀| 亚洲欧美日韩在线综合| 国产偷倩在线播放| 欧洲国内综合视频| 国产午夜在线一区二区三区| 国产aⅴ精品一区二区三区久久| 久久精品久久精品亚洲人| 日韩高清免费av| 精彩视频一区二区三区| 国产在线一区二| 免费黄色电影在线观看| 亚洲一区二区三区四区在线观看| 日本999视频| jizz久久精品永久免费| 中文字幕亚洲欧美一区二区三区| 精品人妻在线播放| 久久国产精品色| 免费看成人午夜电影| 日本天码aⅴ片在线电影网站| 色哟哟国产精品| 动漫美女无遮挡免费| 欧美成人精品一区二区三区在线看| 国内免费久久久久久久久久久 | 欧美亚洲另类在线一区二区三区| 性欧美高清come| 欧美日韩精品综合在线| 精品少妇一区二区三区免费观| 亚洲女同另类| 国产精品亚洲自拍| 免费在线稳定资源站| 亚洲图片欧美综合| 五月天六月丁香| 国产精品福利电影| 91小视频xxxx网站在线| 日本国产一区二区| 国产又黄又粗又猛又爽的视频| 欧美日韩第一区| 91精品一区二区| 免费的黄网站在线观看| 欧洲国产伦久久久久久久| 91av在线免费| 国产日韩欧美三级| 国产伦精品一区二区三| 欧美xxxx免费虐| 日韩一卡二卡三卡国产欧美| 日本黄色片免费观看| 久久国产乱子精品免费女| 神马影院一区二区三区| 天堂久久午夜av| 一区二区三区精品99久久| www.国产毛片| 国产性色一区二区| 九色porny91| 精品av一区二区| 国产精品美女在线观看| 可以在线观看的黄色| 日本精品视频一区二区三区| 久久久久久久久免费看无码| 99人久久精品视频最新地址| 久久影视中文粉嫩av| 国产乱码午夜在线视频| 日韩精品中文字幕视频在线| 中文字幕第四页| 国产午夜亚洲精品理论片色戒 | 日韩成人在线电影网| 国产一级在线播放| www.日韩在线| 日本一极黄色片| 精品国产精品国产偷麻豆| 国产精品亚洲激情| 国产网站在线免费观看| 日韩欧美亚洲国产另类| 日韩 欧美 综合| 国产欧美一区二区精品久导航 | 女人天堂av手机在线| 亚洲另类春色校园小说| 国产精品 欧美在线| 午夜免费福利在线观看| 欧美一级日韩不卡播放免费| 久久久国产精华液| 99在线精品免费| 成年人免费在线播放| 日韩精品四区| 99一区二区| 深夜成人影院| 免费av一区二区| 日韩一二三四| 欧美高清www午色夜在线视频| 免费无码毛片一区二区app| www.欧美日韩| jizz欧美激情18| 在线精品国产| 欧美主播一区二区三区美女 久久精品人| 欧美日韩在线精品一区二区三区激情综合| 日韩在线观看免费av| 理论片中文字幕| 欧美午夜精品一区二区蜜桃| 清纯粉嫩极品夜夜嗨av| 26uuu欧美| 亚洲制服中文字幕| 噜噜噜91成人网| 日本道在线视频| 九九精品在线| 成人av蜜桃| 欧美久久久网站| 2019av中文字幕| v片在线观看| 亚洲色图美腿丝袜| 亚洲国产精品久久久久爰性色| 91成人免费在线视频| 久久丫精品久久丫| 国产精品高清亚洲| 亚洲激情视频小说| 福利一区福利二区| 手机av在线免费| 玖玖在线精品| 成人午夜精品久久久久久久蜜臀| 成人精品亚洲| 欧美二区三区| 日韩深夜福利| 国产精品裸体一区二区三区| 亚洲久草在线| 国产精品黄色av| 三上悠亚一区二区| 欧美性做爰毛片| 丰乳肥臀在线| 精品中文字幕在线观看| 麻豆传媒视频在线| 自拍偷拍亚洲一区| 福利视频在线播放| 精品一区二区亚洲| 日本激情一区二区三区| 日韩欧美一二区| 国产免费av电影| 欧美日韩五月天| 亚洲午夜无码久久久久| 色国产精品一区在线观看| 日韩三级av在线| 亚洲午夜免费视频| 黄色一级片在线免费观看| 中文字幕视频一区| 国产三级aaa| 中文字幕日韩精品一区| 在线观看日本黄色| 亚洲国产高清在线观看视频| 西西444www无码大胆| 99精品国产热久久91蜜凸| 免费看黄色片的网站| 丁香啪啪综合成人亚洲小说 | 欧美激情日韩图片| 美女网站视频在线| 久久久综合av| 国产夫妻在线播放| 欧美一级免费看| 都市激情综合| 国产精品久久久久不卡| 福利一区在线| 91欧美激情另类亚洲| 日韩欧美激情电影| 国产精品久久国产精品| 国产精品一区二区三区美女| 精品免费二区三区三区高中清不卡| 岛国av一区| 欧美亚洲另类久久综合| 不卡中文字幕| 日本精品福利视频| 精品999网站| 凹凸日日摸日日碰夜夜爽1| 奇米影视在线99精品| 手机av在线免费| 成人精品高清在线| 麻豆精品免费视频| 亚洲欧美在线视频| xxxx 国产| 色婷婷av一区二区三区大白胸| 无码一区二区三区| 91精品免费在线观看| 欧洲精品久久一区二区| 精品亚洲国产视频| 免费人成在线观看播放视频 | 中文字幕不卡每日更新1区2区| 亚洲精品一区二区妖精| 欧美日韩视频免费| 米奇777在线欧美播放| www.com黄色片| 粉嫩蜜臀av国产精品网站| 国产呦小j女精品视频| 国产精品国产三级国产| 日干夜干天天干| 欧美日韩国产另类不卡| 成人午夜免费在线观看| 国产亚洲精品久久久久久777| 久久77777| 欧洲中文字幕国产精品| av在线精品| 欧美日韩大片一区二区三区| 91国语精品自产拍| 黄色国产精品视频| 成人综合婷婷国产精品久久免费| 成人黄色免费网址| 亚洲午夜在线视频| 亚洲熟妇无码久久精品| 亚洲第一福利在线观看| 日韩在线观看www| 欧美亚洲在线播放| 麻豆精品久久| 性欧美大战久久久久久久免费观看| 欧美国产精品| 国产精品一区二区小说| 97se亚洲国产综合自在线观| 日韩激情小视频| 一本到不卡精品视频在线观看| 国产a级免费视频| 中文字幕免费精品一区| 成人黄色动漫| 成人av片网址| 久久综合88| 国产精品乱码久久久久| 成av人片一区二区| 唐朝av高清盛宴| 欧美日韩国产高清一区| 欧美女优在线观看| 午夜精品一区二区三区在线播放| 91麻豆精品国产91久久久更新资源速度超快| 精品日韩电影| 亚洲三级色网| 伦伦影院午夜理论片| 国产精品毛片a∨一区二区三区| 日韩av黄色片| 日韩欧美国产精品一区| 日本成人在线播放| 国产精品成熟老女人| 亚洲69av| 亚洲午夜精品久久久久久人妖| 国产麻豆视频精品| 波兰性xxxxx极品hd| 欧美色网一区二区| 国产主播福利在线| 欧美最顶级的aⅴ艳星| a看欧美黄色女同性恋| 国产91porn| 国产美女av一区二区三区| 欧美a级片免费看| 欧美精品第一页| 蜜桃视频在线观看www社区| 国产日产亚洲精品| 日韩电影二区| 国产永久免费网站| 亚洲女爱视频在线| www.av日韩| 欧美福利视频在线观看| 9l亚洲国产成人精品一区二三| 国产 欧美 日韩 一区| 国产91露脸合集magnet| 免费一级特黄特色大片| 日韩av一卡二卡| 日韩免费电影| 日本在线播放不卡| 蜜桃视频在线观看一区二区| 久久免费手机视频| 宅男噜噜噜66一区二区66| av免费在线免费观看| 国产二区一区| 国产精品丝袜xxxxxxx| 国产精品一二三区在线观看| 欧美三日本三级三级在线播放| 日本高清中文字幕在线| 亚洲一区免费网站| 亚洲精品乱码久久久久久蜜桃麻豆| 少妇一级淫片免费放播放| 日韩欧美在线国产| 69久久久久| 成人动漫在线视频| 国产精品一级| 日韩av毛片在线观看| 日韩免费在线观看| 625成人欧美午夜电影| 日韩欧美一区二区三区久久婷婷| 久久国产三级精品| 免费无码毛片一区二区app| 亚洲精品中文字幕有码专区| av成人在线观看| 国产xxxx振车| 国产偷v国产偷v亚洲高清| 一区二区国产欧美| 久久久久久久一区二区三区| 一区二区三区日本久久久 | 欧美精品一二三四区| 中文字幕日韩综合av| 丁香5月婷婷久久| 狠狠热免费视频| 亚洲一区二区av电影| 成人免费视频| 国产精品三区www17con| 秋霞电影一区二区| 久久一二三四区| 国产一区二区三区18| 亚洲一二av| 91极品视频在线观看| 亚洲伊人伊色伊影伊综合网| 国产美女视频一区二区三区 | 情事1991在线| 欧美激情91| 亚洲天堂av中文字幕| 日韩成人在线免费观看| 免费欧美网站| 91激情视频在线| 精品久久久久久国产91|