我們知道在AIX操作系統(tǒng)中,Paging Space是一項(xiàng)很重要的設(shè)備,AIX kernel(內(nèi) 核)需要利用 Paging Space 來(lái)管理虛擬內(nèi)存。和內(nèi)存頁(yè)面一樣,AIX的 Paging Space也是以4KB為單位,當(dāng)實(shí)際內(nèi)存數(shù)的空閑值低于一定數(shù)量以后,系統(tǒng)需要把 實(shí)際內(nèi)存中的某些計(jì)算頁(yè)面(Computation Page)寫(xiě)回到Paging Space中(page out),以便釋放出實(shí)際內(nèi)存頁(yè)面用于其他程序。在AIX 4.3.2及以后版本中,操作系統(tǒng)提供了3種 Paging Space的管理機(jī)制。分別為:
Early Page Space Allocation (EPSA)
Late Page Space Allocation (LPSA)
Deferred Page Space Allocation (DPSA)
Early Page Space Allocation
在AIX系統(tǒng)中,當(dāng)Paging Space的使用率達(dá)到一定百分比時(shí),系統(tǒng)就無(wú)法將需要 page out的頁(yè)面寫(xiě)到Paging Space中,這時(shí)候,該進(jìn)程就很可能被殺掉。為了避免 這種情況的發(fā)生,EPSA機(jī)制會(huì)保證當(dāng)進(jìn)程被啟動(dòng)時(shí),在Paging Space中先申請(qǐng)一 頁(yè)面空間,該空間大小與該進(jìn)程所需要占用的實(shí)際內(nèi)存的大小一致 (將環(huán)境變量 PSALLOC設(shè)為early,也就是“export PSALLOC=early”)。這樣就保證當(dāng)進(jìn)程使 用malloc()調(diào)用的同時(shí),在Paging Space中有相應(yīng)的空間保留給該進(jìn)程,從而保 證該進(jìn)程的page out 操作。
這種機(jī)制雖然可以保證現(xiàn)有的進(jìn)程安全,但由于很多被保留的頁(yè)面空間并沒(méi)有被用 到,造成了非常大的空間浪費(fèi)。同時(shí),也需要Paging Space的大小比實(shí)際內(nèi)存值要大很多。
Late Page Space Allocation
在AIX 4.2.1之后, 4.3.2之前,操作系統(tǒng)默認(rèn)使用 LPSA 機(jī)制。這種機(jī)制是指當(dāng)進(jìn)程 啟動(dòng)后,系統(tǒng)并不在Paging Space中為該進(jìn)程保留相應(yīng)的頁(yè)面。只有當(dāng)該進(jìn)程的實(shí) 際內(nèi)存頁(yè)面被修改過(guò)后,才會(huì)在Paging Space中為這些被修改過(guò)的頁(yè)面申請(qǐng)空間。
這種機(jī)制在一定程度上減少了Paging Space的空間浪費(fèi),但是對(duì)系統(tǒng)也存在一定的 風(fēng)險(xiǎn)。比如,當(dāng)一些后起的進(jìn)程用了幾乎全部的Paging Space后,由于先起的進(jìn)程 并沒(méi)有保留足夠的Paging Space空間用于進(jìn)程的page out操作,會(huì)導(dǎo)致該進(jìn)程被殺掉。
Deferred Page Space Allocation
在AIX4.3.2之后,DPSA是系統(tǒng)默認(rèn)的Paging Space的管理機(jī)制。在這種機(jī)制下,系 統(tǒng)不會(huì)為進(jìn)程保留任何的 page 頁(yè)面,直到系統(tǒng)確認(rèn)確實(shí)需要將內(nèi)存中的頁(yè)面 page out 到Paging Space中,才會(huì)把Paging Space的頁(yè)面分配給該進(jìn)程。這種機(jī)制不會(huì) 造成Paging Space的空間浪費(fèi),但和LPSA一樣,這種機(jī)制也給系統(tǒng)帶來(lái)了相同的 風(fēng)險(xiǎn)。
DPSA是AIX 432及以后版本中所使用的默認(rèn)機(jī)制,它通常適用于配有很大容量RAM 的系統(tǒng),因?yàn)樗梢詼p少很多Paging Space資源的浪費(fèi)。
對(duì)于RAM容量不是很大(比如小于2GB)的系統(tǒng),用戶可以采用LPSA或EPSA機(jī) 制。用 “/usr/samples/kernel/vmtune -d 0” 命令可以停止使用DPSA,而使用LPSA。 用 “/usr/samples/kernel/vmtune -d 0” 命令加上“export PSALLOC=early”命令可以停止使用DPSA,而使用EPSA。
用 “/usr/samples/kernel/vmtune -d 1” 命令可以激活DPSA。
Paging Space的頁(yè)面釋放
在AIX操作系統(tǒng)中,當(dāng)內(nèi)存中的頁(yè)面被page到了Paging Space中以后,那么這一塊 Paging Space的頁(yè)面空間將被保留給該內(nèi)存頁(yè)面,即使該頁(yè)面已經(jīng)被寫(xiě)回到內(nèi)存 中。因此,用lsps命令看到的Paging Space的使用率可能并不能真實(shí)反映真正位于
Paging Space 中的頁(yè)面數(shù),因?yàn)橛行╉?yè)面可能已經(jīng)寫(xiě)回到了內(nèi)存中。
如果寫(xiě)回到內(nèi)存中的頁(yè)面是線程的工作存儲(chǔ)頁(yè)面(Working Storage),那么隨著該線 程的退出或者是相關(guān)的內(nèi)存被釋放 -- free(),Paging Space中的相應(yīng)頁(yè)面塊也才會(huì) 釋放。