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

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

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

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

主流內(nèi)存壓縮技術(shù)那些事

Linux閱碼場 ? 來源:Linuxer ? 2020-06-03 15:11 ? 次閱讀

1. 技術(shù)背景

說到壓縮這個詞,我們并不陌生,應(yīng)該都能想到是降低占用空間,使同樣的空間可以存放更多的東西,類似于我們平時常用的文件壓縮,內(nèi)存壓縮同樣也是為了節(jié)省內(nèi)存。

盡管當(dāng)前android手機6GB,8GB甚至12GB的機器都較為常見了,但內(nèi)存無論多大,總是會有不夠用的時候。當(dāng)系統(tǒng)內(nèi)存緊張的時候,會將文件頁丟棄或回寫回磁盤(如果是臟頁),還可能會觸發(fā)LMK殺進程進行內(nèi)存回收。這些被回收的內(nèi)存如果再次使用都需要重新從磁盤讀取,而這個過程涉及到較多的IO操作。就目前的技術(shù)而言,IO的速度遠(yuǎn)遠(yuǎn)慢于這RAM操作速度。因此,如果頻繁地做IO操作,不僅影響flash使用壽命,還嚴(yán)重影響系統(tǒng)性能。內(nèi)存壓縮是一種讓IO過程平滑過渡的做法, 即盡量減少由于內(nèi)存緊張導(dǎo)致的IO,提升性能。

2. 主流內(nèi)存壓縮技術(shù)

目前linux內(nèi)核主流的內(nèi)存壓縮技術(shù)主要有3種:zSwap, zRAM, zCache。

2.1 zSwap

zSwap是在memory與flash之間的一層“cache”,當(dāng)內(nèi)存需要swap出去磁盤的時候,先通過壓縮放到zSwap中去,zSwap空間按需增長。達(dá)到一定程度后則會按照LRU的順序(前提是使用的內(nèi)存分配方法需要支持LRU)將就最舊的page解壓寫入磁盤swap device,之后將當(dāng)前的page壓縮寫入zSwap。

zswap本身存在一些缺陷或問題:

1) 如果開啟當(dāng)zswap滿交換出backing store的功能, 由于需要將zswap里的內(nèi)存按LRU順序解壓再swap out, 這就要求內(nèi)存分配器支持LRU功能。

2) 如果不開啟當(dāng)zswap滿交換出backing store的功能, 和zRam是類似的。

2.2 zRram

zRram即壓縮的內(nèi)存, 使用內(nèi)存模擬block device的做法。實際不會寫到塊設(shè)備中去,只會壓縮后寫到模擬的塊設(shè)備中,其實也就是還是在RAM中,只是通過壓縮了。由于壓縮和解壓縮的速度遠(yuǎn)比讀寫IO好,因此在移動終端設(shè)備廣泛被應(yīng)用。zRam是基于RAM的block device, 一般swap priority會比較高。只有當(dāng)其滿,系統(tǒng)才會考慮其他的swap devices。當(dāng)然這個優(yōu)先級用戶可以配置。

zRram本身存在一些缺陷或問題:

1) zRam大小是可靈活配置的, 那是不是配置越大越好呢? 如果不是,配置多大是最合適的呢?

2) 使用zRam可能會在低內(nèi)存場景由于頻繁的內(nèi)存壓縮導(dǎo)致kswapd進程占CPU高, 怎樣改善?

3) 增大了zRam配置,對系統(tǒng)內(nèi)存碎片是否有影響?

要利用好zRam功能, 并不是簡單地配置了就OK了, 還需要對各種場景和問題都做好處理, 才能發(fā)揮最優(yōu)的效果。

2.3 zCache

zCache是oracle提出的一種實現(xiàn)文件頁壓縮技術(shù),也是memory與block dev之間的一層“cache”,與zswap比較接近,但zcache目前壓縮的是文件頁,而zSwap和zRAM壓縮是匿名頁。

zcache本身存在一些缺陷或問題:

1) 有些文件頁可能本身是壓縮的內(nèi)容, 這時可能無法再進行壓縮了

2) zCache目前無法使用zsmalloc, 如果使用zbud,壓縮率較低

3) 使用的zbud/z3fold分配的內(nèi)存是不可移動的, 需要關(guān)注內(nèi)存碎片問題

3.內(nèi)存壓縮主流的內(nèi)存分配器

3.1 Zsmalloc

zsmalloc是為ZRAM設(shè)計的一種內(nèi)存分配器。內(nèi)核已經(jīng)有slub了, 為什么還需要zsmalloc內(nèi)存分配器?這是由內(nèi)存壓縮的場景和特點決定的。zsmalloc內(nèi)存分配器期望在低內(nèi)存的場景也能很好地工作,事實上,當(dāng)需要壓縮內(nèi)存進行zsmalloc內(nèi)存分配時,內(nèi)存一般都比較緊張且內(nèi)存碎片都比較嚴(yán)重了。如果使用slub分配, 很可能由于高階內(nèi)存分配不到而失敗。另外,slub也可能導(dǎo)致內(nèi)存碎片浪費比較嚴(yán)重,最壞情況下,當(dāng)對象大小略大于PAGE_SIZE/2時,每個內(nèi)存頁接近一般的內(nèi)存將被浪費。

Android手機實測發(fā)現(xiàn),anon pages的平均壓縮比大約在1:3左右,所以compressed anon page size很多在1.2K左右。如果是Slub,為了分配大量1.2K的內(nèi)存,可能內(nèi)存浪費嚴(yán)重。zsmalloc分配器嘗試將多個相同大小的對象存放在組合頁(稱為zspage)中,這個組合頁不要求物理連續(xù),從而提高內(nèi)存的使用率。

需要注意的是, 當(dāng)前zsmalloc不支持LRU功能, 舊版本內(nèi)核分配的不可移動的頁, 對內(nèi)存碎片影響嚴(yán)重, 但最新版本內(nèi)核已經(jīng)是支持分配可移動類型內(nèi)存了。

3.2 Zbud

zbud是一個專門為存儲壓縮page而設(shè)計的內(nèi)存分配器。用于將2個objects存到1個單獨的page中。zbud是可以支持LRU的, 但分配的內(nèi)存是不可移動的。

3.3 Z3fold

z3fold是一個較新的內(nèi)存分配器, 與zbud不同的是, 將3個objects存到1個單獨的page中,也就是zbud內(nèi)存利用率極限是1:2, z3fold極限是1:3。同樣z3fold是可以支持LRU的, 但分配的內(nèi)存是不可移動的。

4.內(nèi)存壓縮技術(shù)與內(nèi)存分配器組合對比分析

結(jié)合上面zSwap / zRam /zCache的介紹, 與zsmalloc/zbud/z3fold分別怎樣組合最合適呢?

下面總結(jié)了一下, 具體原因可以看上面介紹的時候各類型的特點。

5.zRAM技術(shù)原理

本文重點介紹zRam內(nèi)存壓縮技術(shù),它是目前移動終端廣泛使用的內(nèi)存壓縮技術(shù)。

5.1 軟件框架

下圖展示了內(nèi)存管理大體的框架, 內(nèi)存壓縮技術(shù)處于內(nèi)存回收memory reclaim部分中。

再具體到zRam, 它的軟件架構(gòu)可以分為3部分, 分別是數(shù)據(jù)流操作,內(nèi)存壓縮算法 ,zram驅(qū)動。

數(shù)據(jù)流操作:提供串行或者并行的壓縮和解壓操作。

內(nèi)存壓縮算法:每種壓縮算法提供壓縮和解壓縮的具體實現(xiàn)回調(diào)接口供數(shù)據(jù)操作調(diào)用。

Zram驅(qū)動:創(chuàng)建一個基于ram的塊設(shè)備, 并提供IO請求處理接口。

5.2 實現(xiàn)原理

Zram內(nèi)存壓縮技術(shù)本質(zhì)上就是以時間換空間。通過CPU壓縮、解壓縮的開銷換取更大的可用內(nèi)存空間。

我們主要描述清楚下面這2個問題:

1) 什么時候會進行內(nèi)存壓縮?

2) 進行內(nèi)存壓縮/解壓縮的流程是怎樣的?

進行內(nèi)存壓縮的時機:

1) Kswapd場景:kswapd是內(nèi)核內(nèi)存回收線程, 當(dāng)內(nèi)存watermark低于low水線時會被喚醒工作, 其到內(nèi)存watermark不小于high水線。

2) Direct reclaim場景:內(nèi)存分配過程進入slowpath, 進行直接行內(nèi)存回收。

下面是基于4.4內(nèi)核理出的內(nèi)存壓縮、解壓縮流程。

內(nèi)存回收過程路徑進行內(nèi)存壓縮。會將非活躍鏈表的頁進行shrink, 如果是匿名頁會進行pageout, 由此進行內(nèi)存壓縮存放到ZRAM中, 調(diào)用路徑如下:

在匿名頁換出到swap設(shè)備后, 訪問頁時, 產(chǎn)生頁訪問錯誤, 當(dāng)發(fā)現(xiàn)“頁表項不為空, 但頁不在內(nèi)存中”, 該頁就是已換到swap區(qū)中,由此會開始將該頁從swap區(qū)中重新讀取, 如果是ZRAM, 則是解壓縮的過程。調(diào)用路徑如下:

5.3 內(nèi)存壓縮算法

目前比較主流的內(nèi)存算法主要為LZ0, LZ4, ZSTD等。下面截取了幾種算法在x86機器上的表現(xiàn)。各算法有各自特點, 有以壓縮率高的, 有壓縮/解壓快的等, 具體要結(jié)合需求場景選擇使用。

6.zRAM技術(shù)應(yīng)用

本節(jié)描述一下在使用ZRAM常遇到的一些使用或配置,調(diào)試的方法。

6.1 如何配置開啟zRAM

1) 配置內(nèi)存壓縮算法

下面例子配置壓縮算法為lz4

echo lz4 > /sys/block/zram0/comp_algorithm

2) 配置ZRAM大小

下面例子配置zram大小為2GB

echo 2147483648 > /sys/block/zram0/disksize

3) 使能zram

mkswap /dev/zram0

swapon /dev/zram0

6.2 swappiness含義簡述

swappiness參數(shù)是內(nèi)核傾向于回收匿名頁到swap(使用的ZRAM就是swap設(shè)備)的積極程度, 原生內(nèi)核范圍是0~100, 參數(shù)值越大, 表示回收匿名頁到swap的比例就越大。如果配置為0, 表示僅回收文件頁,不回收匿名頁。默認(rèn)值為60。可以通過節(jié)點“/proc/sys/vm/swappiness”配置。

6.3 zRam相關(guān)的技術(shù)指標(biāo)

1) ZRAM大小及剩余空間

Proc/meminfo中可以查看相關(guān)信息

SwapTotal:swap總大小, 如果配置為ZRAM, 這里就是ZRAM總大小

SwapFree:swap剩余大小, 如果配置為ZRAM, 這里就是ZRAM剩余大小

當(dāng)然, 節(jié)點 /sys/block/zram0/disksize是最直接的。

2) ZRAM壓縮率

/sys/block/zram/mm_stat中有壓縮前后的大小數(shù)據(jù), 由此可以計算出實際的壓縮率

orig_data_size:壓縮前數(shù)據(jù)大小, 單位為bytes

compr_data_size :壓縮后數(shù)據(jù)大小, 單位為bytes

3) 換出/換入swap區(qū)的總量, proc/vmstat中中有相關(guān)信息

pswpin:換入總量, 單位為page

pswout:換出總量, 單位為page

6.4 zRam相關(guān)優(yōu)化

上面提到zRam的一些缺陷, 怎么去改善呢?

1) zRam大小是可靈活配置的, 那是不是配置越大越好呢? 如果不是配置多大是最合適的呢?

zRam大小的配置比較靈活, 如果zRam配置過大, 后臺緩存了應(yīng)用過多, 這也是有可能會影響前臺應(yīng)用使用的流暢度。另外, zRam配置越大, 也需要關(guān)注系統(tǒng)的內(nèi)存碎片化情。因此zRam并不是配置越大越好,具體的大小需要根據(jù)內(nèi)存總大小及系統(tǒng)負(fù)載情況考慮及實測而定。

2) 使用zRam,可能會存在低內(nèi)存場景由于頻繁的內(nèi)存壓縮導(dǎo)致kswapd進程占CPU高, 怎樣改善?

zRam本質(zhì)就是以時間換空間, 在低內(nèi)存的情況下, 肯定會比較頻繁地回收內(nèi)存, 這時kswapd進程是比較活躍的, 再加上通過壓縮內(nèi)存, 會更加消耗CPU資源。改善這種情況方法也比較多, 比如, 可以使用更優(yōu)的壓縮算法, 區(qū)別使用場景, 后臺不影響用戶使用的場景異步進行深度內(nèi)存壓縮, 與用戶體驗相關(guān)的場景同步適當(dāng)減少內(nèi)存壓縮, 通過增加文件頁的回收比例加快內(nèi)存回收等等。

3) 增大了zRam配置,對系統(tǒng)內(nèi)存碎片是否有影響?

使用zRam是有可能導(dǎo)致系統(tǒng)內(nèi)存碎片變得更嚴(yán)重的, 特別是zsmalloc分配不支持可移動內(nèi)存類型的時候。新版的內(nèi)核zsmalloc已經(jīng)支持可移動類型分配的, 但由于增大了zRam,結(jié)合android手機的使用特點, 仍然會有可能導(dǎo)致系統(tǒng)內(nèi)存碎片較嚴(yán)重的情況,因些內(nèi)存碎片問題也是需要重點關(guān)注的。解決系統(tǒng)內(nèi)存碎片的方法也比較多, 可以結(jié)合具體的原因及場景進行優(yōu)化。

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

    關(guān)注

    87

    文章

    11351

    瀏覽量

    210512
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3064

    瀏覽量

    74382
  • 壓縮
    +關(guān)注

    關(guān)注

    2

    文章

    102

    瀏覽量

    19435

原文標(biāo)題:談?wù)剝?nèi)存壓縮那些事

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

收藏 人收藏

    評論

    相關(guān)推薦

    HBM與GDDR內(nèi)存技術(shù)全解析

    在高性能圖形處理領(lǐng)域,內(nèi)存技術(shù)起著至關(guān)重要的作用。本文介紹兩種主要的圖形內(nèi)存技術(shù):高帶寬內(nèi)存(HBM)和圖形雙倍數(shù)據(jù)速率(GDDR),它們在
    的頭像 發(fā)表于 11-15 10:47 ?1503次閱讀
    HBM與GDDR<b class='flag-5'>內(nèi)存</b><b class='flag-5'>技術(shù)</b>全解析

    如何優(yōu)化RAM內(nèi)存使用

    優(yōu)化RAM內(nèi)存使用是一個重要的任務(wù),特別是對于那些擁有有限內(nèi)存資源的用戶。以下是一些優(yōu)化RAM內(nèi)存使用的策略,這些策略可以幫助您更有效地使用內(nèi)存
    的頭像 發(fā)表于 11-11 09:58 ?642次閱讀

    京準(zhǔn)時鐘科普:關(guān)于北斗衛(wèi)星同步時鐘的那些

    京準(zhǔn)時鐘科普:關(guān)于北斗衛(wèi)星同步時鐘的那些
    的頭像 發(fā)表于 10-29 09:28 ?385次閱讀
    京準(zhǔn)時鐘科普:關(guān)于北斗衛(wèi)星同步時鐘的<b class='flag-5'>那些</b><b class='flag-5'>事</b>?

    壓縮算法的類型和應(yīng)用

    壓縮算法是一種通過減少數(shù)據(jù)量來節(jié)省存儲空間或傳輸數(shù)據(jù)的技術(shù)壓縮算法可以分為兩種類型:有損壓縮和無損壓縮
    的頭像 發(fā)表于 10-21 13:50 ?374次閱讀

    壓縮機的秘密:風(fēng)冷、蒸發(fā)冷卻、冷水式,誰更勝一籌?

    在精密空調(diào)領(lǐng)域,制冷壓縮機的選擇至關(guān)重要,壓縮機不僅影響精密空調(diào)的制冷效率,還直接關(guān)系到精密空調(diào)的運行成本與維護便利性。目前市場上主流的精密空調(diào)制冷壓縮機主要包括風(fēng)冷式、蒸發(fā)冷卻式及冷
    的頭像 發(fā)表于 10-12 18:15 ?663次閱讀
    <b class='flag-5'>壓縮</b>機的秘密:風(fēng)冷、蒸發(fā)冷卻、冷水式,誰更勝一籌?

    如何使用gzip壓縮和解壓縮技術(shù)

    Nginx是一款高性能的Web服務(wù)器,它也能夠充當(dāng)反向代理服務(wù)器和負(fù)載均衡器。在Web應(yīng)用開發(fā)中,優(yōu)化網(wǎng)站速度是一個非常重要的工作。使用gzip壓縮和解壓縮技術(shù),可以有效減小傳輸文件的大小,提升網(wǎng)站的訪問速度。
    的頭像 發(fā)表于 09-29 15:57 ?512次閱讀

    先進的鏈接器技術(shù),方便高效地使用內(nèi)存

    電子發(fā)燒友網(wǎng)站提供《先進的鏈接器技術(shù),方便高效地使用內(nèi)存.pdf》資料免費下載
    發(fā)表于 09-06 15:02 ?0次下載
    先進的鏈接器<b class='flag-5'>技術(shù)</b>,方便高效地使用<b class='flag-5'>內(nèi)存</b>

    什么是內(nèi)存通道技術(shù)

    內(nèi)存通道技術(shù)作為計算機系統(tǒng)中的核心組成部分,對于提升數(shù)據(jù)處理能力、優(yōu)化系統(tǒng)性能以及增強系統(tǒng)的穩(wěn)定性與擴展性等方面發(fā)揮著至關(guān)重要的作用。以下是對內(nèi)存通道技術(shù)作用的詳細(xì)闡述,旨在通過多個方
    的頭像 發(fā)表于 09-04 12:47 ?873次閱讀

    芯片設(shè)計流片、驗證、成本的那些

    前言我們聊聊芯片設(shè)計、流片、驗證、制造、成本的那些;流片對于芯片設(shè)計來說就是參加一次大考。流片的重要性就在于能夠檢驗芯片設(shè)計是否成功,是芯片制造的關(guān)鍵環(huán)節(jié),也就是將設(shè)計好的方案交給芯片制造廠生產(chǎn)
    的頭像 發(fā)表于 08-09 08:11 ?2186次閱讀
    芯片設(shè)計流片、驗證、成本的<b class='flag-5'>那些</b><b class='flag-5'>事</b>

    如何檢測內(nèi)存泄漏

    檢測內(nèi)存泄漏是軟件開發(fā)過程中一項至關(guān)重要的任務(wù),它有助于識別和解決那些導(dǎo)致程序占用過多內(nèi)存資源,從而影響程序性能甚至導(dǎo)致程序崩潰的問題。以下將詳細(xì)闡述幾種常見的內(nèi)存泄漏檢測方法,每種方
    的頭像 發(fā)表于 07-30 11:50 ?2303次閱讀

    談?wù)凞DR5技術(shù)規(guī)格的那些

    此文盡量排除高深莫測的DRAM相關(guān)技術(shù)名詞,讓各位迅速了解DDR5相對DDR4的優(yōu)勢與可能的影響,最后再同場加映英特爾Atomx6000系列引進的「In-BandECC」技術(shù),讓大家瞧瞧英特爾如何在
    的頭像 發(fā)表于 05-09 08:27 ?1141次閱讀
    談?wù)凞DR5<b class='flag-5'>技術(shù)</b>規(guī)格的<b class='flag-5'>那些</b><b class='flag-5'>事</b>

    【RTC程序設(shè)計:實時音視頻權(quán)威指南】音視頻的編解碼壓縮技術(shù)

    音視頻所載有的信息在通過傳輸?shù)臅r候就需要壓縮編碼。 其中,文本壓縮是指通過使用各種算法和技術(shù),將文本數(shù)據(jù)表示為更緊湊的形式,以減少存儲空間。 霍夫曼編碼是一種無損壓縮算法,它可以根
    發(fā)表于 04-28 21:04

    壓縮空氣儲能工作原理 壓縮空氣儲能的優(yōu)缺點

    壓縮空氣儲能(CAES)是一種利用空氣的壓縮和膨脹來存儲和釋放能量的技術(shù)
    的頭像 發(fā)表于 04-25 15:18 ?5719次閱讀

    Python壓縮和解壓縮實現(xiàn)代碼分享

    壓縮和解壓縮是日常常用的操作,不管是windows上圖形界面的操作,還是linux上用命令來進行壓縮壓縮,總的而言都還是比較方便的。
    的頭像 發(fā)表于 04-11 11:28 ?1138次閱讀

    輥壓機軸承位磨損修復(fù)你不知道的那些

    電子發(fā)燒友網(wǎng)站提供《輥壓機軸承位磨損修復(fù)你不知道的那些.docx》資料免費下載
    發(fā)表于 03-12 15:10 ?0次下載
    主站蜘蛛池模板: 在线www 天堂网在线 | 久久久美女视频 | 欧美城天堂网 | 国产三级日本三级韩国三级在线观看 | 三级在线观看免播放网站 | 77se77亚洲欧美在线大屁股 | 免费高清特级毛片 | 欧美美女福利视频 | 国产成人精品亚洲日本在线观看 | 日本在线网址 | 亚洲综合在线观看一区www | 国产在线操 | 国产精品资源在线 | 1024国产你懂的日韩 | 美女被猛男躁免费视频网站 | 你懂的在线免费视频 | 一区二区三区网站在线免费线观看 | 4438x五月天 4438x亚洲最大 | 久久国产乱子伦精品免费午夜 | 亚洲swag精品自拍一区 | 欧美另类亚洲一区二区 | 免费黄视频在线观看 | 国产一区中文字幕 | 亚洲国产日韩精品怡红院 | 三级视频网站在线观看 | 最近2018中文字幕2019视频 | 在线观看黄色的网站 | 怡红院网址 | 亚洲国产丝袜精品一区杨幂 | 丁香六月 久久久 | 久久精品国产99精品国产2021 | 天堂网2021天堂手机版 | 婷婷色在线播放 | 六月婷婷导航福利在线 | 国产香港日本三级在线观看 | 五月婷婷爱 | 色综合综合色综合色综合 | 欧美色图狠狠干 | 久久久久久夜精品精品免费 | 四虎影院wwww | 男女一进一出无遮挡黄 |