女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

Linux愛(ài)好者 ? 來(lái)源:Linux內(nèi)核那些事 ? 2023-11-13 14:59 ? 次閱讀

內(nèi)存是計(jì)算機(jī)系統(tǒng)最重要的資源之一,當(dāng)操作系統(tǒng)內(nèi)存不足時(shí),進(jìn)程申請(qǐng)內(nèi)存將會(huì)失敗,從而導(dǎo)致其運(yùn)行異常或者崩潰。

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

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

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

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

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

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

zRAM原理

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

zRAM 的原理如下圖所示:

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

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

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

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

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

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

啟用zRAM

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

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

modprobezramnum_devices=1

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

2. 設(shè)置 zRAM 塊設(shè)備的大小

創(chuàng)建完 zRAM 塊設(shè)備后,可以通過(guò)以下命令來(lái)設(shè)置其空間大小:

echo512M>/sys/block/zram0/disksize

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

3. 壓縮算法選擇

zRAM 機(jī)制支持多種壓縮算法,不同的壓縮算法有不同的壓縮比率和壓縮速度,用戶(hù)可以按照自身的需求來(lái)選擇不同的壓縮算法。

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

echolzo>/sys/block/zram0/comp_algorithm

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

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

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

4. 將 swap 交換設(shè)備設(shè)置為 zRAM

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

mkswap/dev/zram0

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

zRAM實(shí)現(xiàn)

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

本文并不會(huì)介紹塊設(shè)備驅(qū)動(dòng)的編寫(xiě)流程,只會(huì)分析 swap 機(jī)制在進(jìn)行內(nèi)存交換時(shí),與 zRAM 塊設(shè)備驅(qū)動(dòng)的交互。

壓縮內(nèi)存

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

當(dāng) swap 機(jī)制將不常用的內(nèi)存交換到 zRAM 塊設(shè)備時(shí),會(huì)調(diào)用zram_make_request()函數(shù)處理請(qǐng)求。而zram_make_request()最終會(huì)通過(guò)調(diào)用zram_bvec_write()函數(shù)來(lái)壓縮內(nèi)存,調(diào)用鏈如下:

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

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

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

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

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

//4.申請(qǐng)一個(gè)內(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ù)保存到新申請(qǐng)的內(nèi)存塊中
memcpy(cmem,src,clen);
...

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

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

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

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

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

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

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

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

一圖勝千言:

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

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

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







審核編輯:劉清

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

    關(guān)注

    4

    文章

    603

    瀏覽量

    28292
  • SWAP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    13143
  • zram
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    95

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

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

收藏 人收藏

    評(píng)論

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

    壓縮機(jī)油的特征及應(yīng)用

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

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

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

    什么是制冷壓縮機(jī),制冷壓縮機(jī)的工作原理

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

    肖特推出了電動(dòng)壓縮機(jī)標(biāo)準(zhǔn)的壓縮機(jī)端子系列產(chǎn)品

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

    半導(dǎo)體制冷和壓縮機(jī)制冷哪個(gè)好

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

    離心壓縮機(jī)和往復(fù)壓縮機(jī)的區(qū)別

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

    滾動(dòng)轉(zhuǎn)子式壓縮機(jī)優(yōu)點(diǎn)_滾動(dòng)轉(zhuǎn)子式壓縮機(jī)的缺點(diǎn)

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

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

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

    容積型壓縮機(jī)分類(lèi)_容積型壓縮機(jī)的特點(diǎn)

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

    冰箱壓縮機(jī)的作用_冰箱壓縮機(jī)修理價(jià)格是多少

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

    虛擬機(jī):linux Kernel 添加 ZRAM 支持

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

    制冷壓縮機(jī)的種類(lèi)_制冷壓縮機(jī)的結(jié)構(gòu)

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

    如何選擇壓縮機(jī)

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

    壓縮機(jī)的類(lèi)型和區(qū)別

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

    蒸汽壓縮機(jī)制冷原理與制冷劑、冷凍油

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