很多基礎(chǔ)的概念,將跨越軟件的層次而存在。比如slab,對(duì)于內(nèi)核人員,我們都知道slab是buddy之上的一層。
因?yàn)閎uddy作為Linux內(nèi)核最底層的內(nèi)存管理器,它分配1頁,2頁,4頁,2^n頁,但是作為內(nèi)核的堆用戶本身,經(jīng)常只是調(diào)用kmalloc()申請(qǐng)一個(gè)小內(nèi)存,或者調(diào)用kmem_cache_alloc()申請(qǐng)一個(gè)數(shù)據(jù)結(jié)構(gòu),2^n頁給它,會(huì)形成大量碎片浪費(fèi)。所以slab找buddy要了2^n頁后,內(nèi)部切割為同樣size的object,再給kmalloc和kmem_cache_alloc()拿走。

它的邏輯如下:

這樣一種軟件本質(zhì)意義上的需求,不會(huì)因?yàn)橹皇莾?nèi)核就需要。比如同樣的slab算法,也被著名的用戶態(tài)軟件Memcached需要著。
Memcached是一種分布式內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web等應(yīng)用以減輕數(shù)據(jù)庫的負(fù)載。它在內(nèi)存中緩存數(shù)據(jù)和對(duì)象,使用key-value對(duì)形式存儲(chǔ)。它的網(wǎng)站首頁(https://memcached.org/)顯示了它的基本用法邏輯:
Memcached的原理也類似內(nèi)核態(tài)page cache的原理:

比如你查詢一個(gè)數(shù)據(jù)庫,可以先看看Memcached里面有沒有命中,命中就直接從Memcached的內(nèi)存里面拿到值了,沒有的時(shí)候才需要去查數(shù)據(jù)庫。查到后,可以把結(jié)果放入Memcached,這樣下次再訪問同樣數(shù)據(jù),不再需要進(jìn)行數(shù)據(jù)庫的查詢動(dòng)作。
Memcached也同樣采用slab分配算法來組織數(shù)據(jù)的存放,里面可以組織不同大小的chunks:
正如Linux內(nèi)核的每一種不同slab里面的object的大小不一樣。
我們安裝1個(gè)Memcached:
$ sudo apt-get install memcached
然后啟動(dòng)起來,你馬上看到memcached打印說自己創(chuàng)建了各種不同chunk size的slab:

當(dāng)然,還有更多的相似性,比如Memcached里面的對(duì)象,也是LRU算法替換。所以LRU這種,也是一種本質(zhì)上的事情。
編輯:jq
-
Web
+關(guān)注
關(guān)注
2文章
1304瀏覽量
74465 -
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219021 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
4020瀏覽量
68342 -
管理器
+關(guān)注
關(guān)注
0文章
265瀏覽量
19518
原文標(biāo)題:宋寶華:slab在內(nèi)核內(nèi)存管理和用戶態(tài)Memcached的雙重存在
文章出處:【微信號(hào):gh_6fde77c41971,微信公眾號(hào):FPGA干貨】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Redis內(nèi)存管理、持久化策略與慢查詢排查分析
Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)
【「Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配
rk基于linux/android內(nèi)存管理
Linux內(nèi)核模塊的加載機(jī)制
飛凌嵌入式ElfBoard-文件I/O的了解探究之Linux系統(tǒng)的文件管理機(jī)制
探索操作系統(tǒng)底層的關(guān)鍵接口
RusT-Thread:基于Rust面向資源受限嵌入式設(shè)備的操作系統(tǒng)的實(shí)踐 | 技術(shù)集結(jié)
求助,關(guān)于rt-smart用戶態(tài)線程實(shí)時(shí)性差的問題求解
qkey軟件包在內(nèi)核V5.02下運(yùn)行出錯(cuò)是哪里的問題?
靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作庫:優(yōu)化內(nèi)存管理的利器
探究slab在內(nèi)核內(nèi)存管理和用戶態(tài)Memcached的雙重存在
評(píng)論