在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(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)存將會失敗,從而導致其運行異?;蛘弑罎ⅰ?/p>

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)或塊設(shè)備來完成的。所以 zRAM 虛擬一個塊設(shè)備,當系統(tǒng)內(nèi)存不足時,swap 機制將內(nèi)存寫入到這個虛擬的塊設(shè)備中。也就是說,zRAM 機制本質(zhì)上只是一個虛擬塊設(shè)備。

zRAM 的原理如下圖所示:

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

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

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

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

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

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

啟用zRAM

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

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

modprobezramnum_devices=1

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

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

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

echo512M>/sys/block/zram0/disksize

上面命令設(shè)置了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 交換設(shè)備設(shè)置為 zRAM

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

mkswap/dev/zram0

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

zRAM實現(xiàn)

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

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

壓縮內(nèi)存

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

當 swap 機制將不常用的內(nèi)存交換到 zRAM 塊設(shè)備時,會調(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塊設(shè)備的表格中
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ù)復(fù)制到新申請的內(nèi)存塊中。

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

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

一圖勝千言:

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

zRAM驅(qū)動有個數(shù)據(jù)塊表,用來記錄原始內(nèi)存數(shù)據(jù)對應(yīng)的壓縮數(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

    文章

    595

    瀏覽量

    27442
  • SWAP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    12841
  • zram
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    77

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    OpenHarmony3.1 Release關(guān)鍵特性解析——Enhanced SWAP內(nèi)存管理

    關(guān)鍵技術(shù)就介紹完了,我們來總結(jié)一下:● 定制的 ZRAM 和交換分區(qū):將數(shù)據(jù)通過關(guān)聯(lián)性、冷熱順序進行存放,保證了數(shù)據(jù)的存取速度,提升了 IO 性能?!?動態(tài)的內(nèi)存回收機制:從回收優(yōu)先級、可用內(nèi)
    發(fā)表于 05-17 17:24

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

    壓縮機油主要用于潤滑壓縮機的汽缸、活塞環(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)中的應(yīng)用
    發(fā)表于 03-11 12:43 ?1154次閱讀
    嵌入式系統(tǒng)中的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>壓縮</b>技術(shù)

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

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

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

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

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

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

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

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

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

    滾動轉(zhuǎn)子式壓縮機又稱滾動活塞壓縮機或固定滑片壓縮機,是回轉(zhuǎn)式壓縮機的一種。
    的頭像 發(fā)表于 12-06 09:37 ?1.4w次閱讀
    滾動轉(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 ?6487次閱讀

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

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

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

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

    虛擬機:linux Kernel 添加 ZRAM 支持

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

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

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

    如何選擇壓縮機

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

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

    壓縮機的類型和區(qū)別? 壓縮機是一種用于提高氣體壓縮和輸送能力的機械設(shè)備。根據(jù)不同的工作原理和應(yīng)用需求,壓縮機可分為多種類型,包括離心壓縮機、
    的頭像 發(fā)表于 02-01 14:36 ?3551次閱讀
    主站蜘蛛池模板: 男女刺激性视频大片| 九色 在线| 中文字幕在线视频第一页| 久久久久久久久女黄| 久久久久久久综合色一本| 毛色毛片免费观看| 国外精品视频在线观看免费| 国产精品电影一区| 免费观看三级毛片| 三级在线网站| 新天堂| 精品一区二区三区在线视频| 一区二区三区在线看| v视界影院最新网站| 天天射天天干天天色| 给我一个可以看片的www日本| 欧美黄色一级片视频| 久久黄色精品视频| 国产20岁美女一级毛片| 天天躁日日躁狠狠躁一级毛片 | 色噜噜在线视频| 五月婷婷综合基地| 日本三级在线观看免费| 色视频在线免费| 欧美另类69xxxxx性欧| 国产高清不卡一区二区| 午夜黄色一级片| 天天久久综合| www.激情五月| 精品国产成人三级在线观看| 日本不卡一区在线| 五月婷婷六月婷婷| 看全色黄大色大片免费久久| 毛片的网站| 99se亚洲综合色区| 伊人久久影视| 国产免费的野战视频| 亚洲精品资源| 国产一区二区在线视频播放| 四虎影视免费看| 青娱乐啪啪|