chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

zRAM內(nèi)存壓縮機制詳解

Linux愛好者 ? 來源:Linux內(nèi)核那些事 ? 2023-11-13 14:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

內(nèi)存是計算機系統(tǒng)最重要的資源之一,當操作系統(tǒng)內(nèi)存不足時,進程申請內(nèi)存將會失敗,從而導致其運行異?;蛘弑罎?。

Linux 內(nèi)核提供swap機制來解決內(nèi)存不足的情況,其原理是:

當系統(tǒng)內(nèi)存不足時,內(nèi)核會將進程不常用的內(nèi)存交換(寫入)到磁盤中,然后將這些內(nèi)存歸還給系統(tǒng),系統(tǒng)可以將這些內(nèi)存繼續(xù)分配給其他需要使用內(nèi)存的進程。

通過 swap 機制,系統(tǒng)可以將內(nèi)存分配給需求更迫切的進程。但由于 swap 機制需要進行 I/O 操作,所以一定程度上會影響系統(tǒng)性能。那么是否存在一種能夠節(jié)省內(nèi)存,而且對性能影響較少的機制呢?

在 Linux-3.14 引入了一種名為zRAM的技術(shù),zRAM 的原理是:將進程不常用的內(nèi)存壓縮存儲,從而達到節(jié)省內(nèi)存的使用。如下圖所示:

16aca5c2-81ef-11ee-939d-92fbcf53809c.png

zRAM 機制建立在 swap 機制之上,swap 機制是將進程不常用的內(nèi)存交換到磁盤中,而 zRAM 機制是將進程不常用的內(nèi)存壓縮存儲在內(nèi)存某個區(qū)域。所以 zRAM 機制并不會發(fā)生 I/O 操作,從而避免因 I/O 操作導致的性能下降。

zRAM原理

由于 zRAM 機制是建立在 swap 機制之上,而 swap 機制需要配置文件系統(tǒng)或塊設備來完成的。所以 zRAM 虛擬一個塊設備,當系統(tǒng)內(nèi)存不足時,swap 機制將內(nèi)存寫入到這個虛擬的塊設備中。也就是說,zRAM 機制本質(zhì)上只是一個虛擬塊設備。

zRAM 的原理如下圖所示:

16cd491c-81ef-11ee-939d-92fbcf53809c.png

從上圖可以看出,在開啟了 zRAM 機制的情況下,當系統(tǒng)內(nèi)存不足時,內(nèi)核會進行如下操作:

通過 swap 機制從系統(tǒng)中查找一些進程不常用的內(nèi)存。

將這些不常用的內(nèi)存交換到 zRAM 塊設備中,而 zRAM 塊設備首先會對這些不常用的內(nèi)存進行壓縮,然后存儲起來。

把不常用的內(nèi)存壓縮存儲到 zRAM 塊設備后,swap 機制會把這些不常用的內(nèi)存歸還給內(nèi)核。

當進程訪問到這些被交換到 zRAM 塊設備的內(nèi)存時,swap 機制將會通過 zRAM 塊設備解壓這些內(nèi)存,并且重新建立與進程的地址映射關(guān)系。

啟用zRAM

1. 創(chuàng)建 zRAM 塊設備

要啟用 zRAM,首先需要創(chuàng)建 zRAM 塊設備。要創(chuàng)建 zRAM 塊設備,可以使用以下命令:

modprobezramnum_devices=1

num_devices參數(shù)可以指定創(chuàng)建 zRAM 塊設備的個數(shù),上面命令創(chuàng)建了一個 zRAM 塊設備,可以通過路徑/dev/zram0來訪問這個塊設備。

2. 設置 zRAM 塊設備的大小

創(chuàng)建完 zRAM 塊設備后,可以通過以下命令來設置其空間大?。?/p>

echo512M>/sys/block/zram0/disksize

上面命令設置了zram0的大小為 512MB,也就是說,zram0能夠存儲 512MB 壓縮后的數(shù)據(jù)。

3. 壓縮算法選擇

zRAM 機制支持多種壓縮算法,不同的壓縮算法有不同的壓縮比率和壓縮速度,用戶可以按照自身的需求來選擇不同的壓縮算法。

要更改 zRAM 的壓縮算法,可以使用下面命令:

echolzo>/sys/block/zram0/comp_algorithm

上面命令將 zRAM 的壓縮算法更改為lzo,我們也可以通過下面命令來查看內(nèi)核支持哪些壓縮算法:

cat/sys/block/zram0/comp_algorithm
lzo[lz4]

從上面命令的輸出可知,內(nèi)核支持lzo和lz4兩種壓縮算法。

4. 將 swap 交換設備設置為 zRAM

要將 swap 的交換設備設置為 zRAM 塊設備,可以使用以下命令:

mkswap/dev/zram0

當執(zhí)行完上面這條命令后,內(nèi)核將會使用zram0作為 swap 的交換設備。

zRAM實現(xiàn)

zRAM 塊設備驅(qū)動的實現(xiàn)代碼主要在drivers/block/zram/zram_drv.c文件中,下面我們主要圍繞此文件進行分析。

本文并不會介紹塊設備驅(qū)動的編寫流程,只會分析 swap 機制在進行內(nèi)存交換時,與 zRAM 塊設備驅(qū)動的交互。

壓縮內(nèi)存

當系統(tǒng)內(nèi)存不足時,內(nèi)核將會觸發(fā)swap機制。swap 機制首先會從系統(tǒng)中選擇一些進程不常用內(nèi)存,然后將這些不常用的內(nèi)存交換到zRAM塊設備中(使用 zRAM 塊設備作為交換設備的情況下)。

當 swap 機制將不常用的內(nèi)存交換到 zRAM 塊設備時,會調(diào)用zram_make_request()函數(shù)處理請求。而zram_make_request()最終會通過調(diào)用zram_bvec_write()函數(shù)來壓縮內(nèi)存,調(diào)用鏈如下:

zram_make_request()
->__zram_make_request()
->zram_bvec_rw()
->zram_bvec_write()

我們來分析一下zram_bvec_write()函數(shù)的實現(xiàn),其代碼如下:

staticint
zram_bvec_write(structzram*zram,structbio_vec*bvec,u32index,intoffset)
{
...
//1.獲取需要進行壓縮的內(nèi)存
page=bvec->bv_page;
...
user_mem=kmap_atomic(page);
uncmem=user_mem;

...
//2.對內(nèi)存進行壓縮
ret=zcomp_compress(zram->comp,zstrm,uncmem,&clen);
...

//3.獲取壓縮后的數(shù)據(jù)
src=zstrm->buffer;
...

//4.申請一個內(nèi)存塊保存壓縮后的數(shù)據(jù)
handle=zs_malloc(meta->mem_pool,clen);
...
cmem=zs_map_object(meta->mem_pool,handle,ZS_MM_WO);

//5.將壓縮后的數(shù)據(jù)保存到新申請的內(nèi)存塊中
memcpy(cmem,src,clen);
...

//6.將壓縮后的數(shù)據(jù)登記到zRAM塊設備的表格中
meta->table[index].handle=handle;
...
returnret;
}

為了簡化分析過程,我們對代碼進行精簡。從上面的代碼可以看出,zRAM 機制對內(nèi)存進行壓縮的步驟如下:

獲取需要進行壓縮的內(nèi)存,需要進行壓縮的內(nèi)存由 swap 機制提供。

通過zcomp_compress()函數(shù)對內(nèi)存進行壓縮,src指針指向壓縮后的內(nèi)存地址。

通過zs_malloc()和zs_map_object()函數(shù)申請一塊新的內(nèi)存塊,大小為壓縮后數(shù)據(jù)的大小。

將壓縮后的數(shù)據(jù)復制到新申請的內(nèi)存塊中。

將壓縮后的數(shù)據(jù)記錄到zRAM塊設備的表格中。

由于 zRAM 塊設備是建立在內(nèi)存中的虛擬塊設備,所以其并沒有真實塊設備的特性。真實塊設備會將存儲空間劃分成一個個塊,而zram_bvec_write()函數(shù)的index參數(shù)就是數(shù)據(jù)塊的編號。此參數(shù)有 swap 機制提供,所以 zRAM 塊設備驅(qū)動通過 index 參數(shù)作為原始內(nèi)存數(shù)據(jù)的編號。

一圖勝千言:

16ebdbfc-81ef-11ee-939d-92fbcf53809c.png

zRAM驅(qū)動有個數(shù)據(jù)塊表,用來記錄原始內(nèi)存數(shù)據(jù)對應的壓縮數(shù)據(jù),此表的索引就是數(shù)據(jù)塊的編號。swap 機制會維護此表格的使用情況,如哪個塊是空閑的,哪個塊被占用等。

當內(nèi)存頁被壓縮后,swap 機制將會把原來的內(nèi)存頁釋放掉,并且把所有映射到此內(nèi)存頁的進程解除映射,細節(jié)可以參考 swap 機制相關(guān)的資料。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    611

    瀏覽量

    29730
  • SWAP
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    13611
  • zram
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    133

原文標題:一文讀懂|zRAM 內(nèi)存壓縮機制

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    壓縮機油的特征及應用

    壓縮機油主要用于潤滑壓縮機的汽缸、活塞環(huán)、軸承、增速齒輪、曲柄連桿及曲軸箱潤滑系統(tǒng)。
    發(fā)表于 12-11 14:04 ?9次下載

    嵌入式系統(tǒng)中的內(nèi)存壓縮技術(shù)

    摘要:介紹內(nèi)存壓縮技術(shù)和一個基于硬件的內(nèi)存壓縮系統(tǒng)模型,探討內(nèi)存壓縮技術(shù)在嵌入式系統(tǒng)中的應用
    發(fā)表于 03-11 12:43 ?1524次閱讀
    嵌入式系統(tǒng)中的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>壓縮</b>技術(shù)

    什么是制冷壓縮機,制冷壓縮機的工作原理

    什么是制冷壓縮機,制冷壓縮機的工作原理 制冷壓縮機是制冷裝置中最主要的設備,通常稱為制冷裝置中的主機。制冷劑蒸氣從低壓提高
    發(fā)表于 04-08 17:09 ?1.8w次閱讀

    肖特推出了電動壓縮機標準的壓縮機端子系列產(chǎn)品

    在電動汽車、混合動力汽車和燃料電池汽車中,電動空調(diào)壓縮機的性能和可靠性很大程度上取決于一個部件——壓縮機端子。壓縮機端子必須保持密封,以防止制冷劑泄漏,同時支持大量電能從電池轉(zhuǎn)移到壓縮機
    的頭像 發(fā)表于 11-12 08:51 ?3964次閱讀

    半導體制冷和壓縮機制冷哪個好

    電子半導體制冷電路簡單,整體結(jié)構(gòu)體積小,制冷效率高,速度快,無噪音,無污染,壽命長,但成本高。壓縮機制冷與其相反。 半導體制冷可以做到茶杯里,但壓縮機制冷做不到。壓縮機制冷可以大到冷庫、中央空調(diào)
    的頭像 發(fā)表于 11-13 11:05 ?7.2w次閱讀

    離心壓縮機和往復壓縮機的區(qū)別

    本文主要闡述了離心壓縮機和往復壓縮機的區(qū)別。
    發(fā)表于 12-04 10:53 ?1w次閱讀

    滾動轉(zhuǎn)子式壓縮機優(yōu)點_滾動轉(zhuǎn)子式壓縮機的缺點

    滾動轉(zhuǎn)子式壓縮機又稱滾動活塞壓縮機或固定滑片壓縮機,是回轉(zhuǎn)式壓縮機的一種。
    的頭像 發(fā)表于 12-06 09:37 ?1.5w次閱讀
    滾動轉(zhuǎn)子式<b class='flag-5'>壓縮機</b>優(yōu)點_滾動轉(zhuǎn)子式<b class='flag-5'>壓縮機</b>的缺點

    多滑片式壓縮機結(jié)構(gòu)圖_多滑片式壓縮機的特點

    滑片式制冷壓縮機是一種容積型回轉(zhuǎn)式壓縮機。它可分為單滑片式與多滑片式兩種。多滑片式壓縮機目前主要用作配組雙級壓縮機的低壓級壓縮機。
    的頭像 發(fā)表于 12-06 09:54 ?7306次閱讀

    容積型壓縮機分類_容積型壓縮機的特點

    容積式壓縮機主要分為下面四種:螺桿式壓縮機、活塞式壓縮機、滾動轉(zhuǎn)子式壓縮機、渦旋式壓縮機
    的頭像 發(fā)表于 12-06 10:58 ?1.8w次閱讀

    冰箱壓縮機的作用_冰箱壓縮機修理價格是多少

    本文首先闡述了冰箱壓縮機的作用,其次介紹了冰箱壓縮機的種類,最后介紹了冰箱壓縮機修理價格。
    發(fā)表于 04-01 10:30 ?4593次閱讀

    虛擬機:linux Kernel 添加 ZRAM 支持

    ZRAM, 簡單的說,就是拿一部分內(nèi)存當做交換分區(qū)使用,暫時不用的內(nèi)存頁面壓縮后保存在 zram交換分區(qū)面。因為是
    的頭像 發(fā)表于 06-22 17:09 ?3410次閱讀
    虛擬機:linux Kernel 添加 <b class='flag-5'>ZRAM</b> 支持

    制冷壓縮機的種類_制冷壓縮機的結(jié)構(gòu)

    制冷壓縮機是制冷系統(tǒng)的核心和心臟。壓縮機引的能力和特征決定了制冷系統(tǒng)的能力和特征。某種意義上,制冷系統(tǒng)的設計與匹配就是將壓縮機的能力體現(xiàn)出來。因此,世界各國制冷行業(yè)無不在制冷壓縮機的研
    的頭像 發(fā)表于 08-24 10:52 ?9505次閱讀
    制冷<b class='flag-5'>壓縮機</b>的種類_制冷<b class='flag-5'>壓縮機</b>的結(jié)構(gòu)

    如何選擇壓縮機?

    如何選擇壓縮機? 選擇壓縮機是一個相當復雜的過程,需要綜合考慮多個因素。本文將詳細介紹如何選擇壓縮機,包括了所需的基本知識、市場上常見的壓縮機類型、關(guān)鍵的選擇因素和技術(shù)參數(shù)等。 一、基
    的頭像 發(fā)表于 12-11 11:26 ?2961次閱讀

    壓縮機的類型和區(qū)別

    壓縮機的類型和區(qū)別? 壓縮機是一種用于提高氣體壓縮和輸送能力的機械設備。根據(jù)不同的工作原理和應用需求,壓縮機可分為多種類型,包括離心壓縮機、
    的頭像 發(fā)表于 02-01 14:36 ?6937次閱讀

    蒸汽壓縮機制冷原理與制冷劑、冷凍油

    電子發(fā)燒友網(wǎng)站提供《蒸汽壓縮機制冷原理與制冷劑、冷凍油.pdf》資料免費下載
    發(fā)表于 03-17 18:02 ?0次下載