全部課程
zswap是什么
發(fā)布時(shí)間: 2023-03-10
zswap是Linux內(nèi)核中的一個(gè)虛擬內(nèi)存壓縮功能,為要交換的頁(yè)面提供一個(gè)壓縮的回寫緩存。當(dāng)一個(gè)內(nèi)存頁(yè)要被換出時(shí),zswap不是把它移到交換設(shè)備上,而是把它壓縮并存儲(chǔ)在系統(tǒng)RAM中動(dòng)態(tài)分配的內(nèi)存池中。
寫回實(shí)際交換設(shè)備的時(shí)間被推遲,甚至完全避免,大大減少了Linux系統(tǒng)用于交換的I/O量;副作用是壓縮需要額外的CPU周期。 zSWAP并沒(méi)有虛擬化一個(gè)塊設(shè)備,而是鉤住正常的交換代碼,在實(shí)際寫到/從磁盤操作發(fā)生之前使用自己的管理內(nèi)存 在實(shí)際寫到/從磁盤操作發(fā)生之前,它使用自己的管理內(nèi)存來(lái)?yè)Q出/換入數(shù)據(jù),然后在內(nèi)存耗盡時(shí)使用傳統(tǒng)交換分區(qū)。因此,zSWAP適用于已經(jīng)有交換分區(qū)的系統(tǒng),而zRAM更適合于像Android這樣沒(méi)有交換分區(qū)的嵌入式系統(tǒng)。
zRam實(shí)際上有兩個(gè)大問(wèn)題:zRam本身試圖在內(nèi)存快滿時(shí)將數(shù)據(jù)返回給內(nèi)存,而系統(tǒng)則試圖用數(shù)據(jù)填滿zRam。
zRam的實(shí)現(xiàn)將自己虛擬成一個(gè)交換分區(qū)。另一方面,zSwap介入了內(nèi)核的交換過(guò)程,保留了所有被系統(tǒng)刷過(guò)的數(shù)據(jù),并將其存儲(chǔ)在自己的內(nèi)存中。這個(gè)實(shí)現(xiàn)的優(yōu)點(diǎn)是它可以和硬盤上實(shí)際存在的交換分區(qū)一起使用。它還避免了zRam的兩個(gè)主要問(wèn)題?! ∵@是因?yàn)閦Swap在面臨內(nèi)存不足時(shí)可以寫到交換分區(qū),而不試圖將數(shù)據(jù)返回到內(nèi)存。另一方面,如果一大片內(nèi)存被空閑程序占據(jù),zSwap可以用這些數(shù)據(jù)填充硬盤。由于這部分內(nèi)存很少被使用,存入較慢的硬盤不會(huì)影響運(yùn)行速度。
zSwap實(shí)際上可以在與zRam相同的模式下工作,只要沒(méi)有設(shè)置交換分區(qū)。