
Linux 交換空間管理計算機(jī)存儲器的層次結(jié)構(gòu)計算機(jī)存儲器速度越快成本較高。 為了獲得好的性能/價格比計算機(jī)中各種存儲器組成一個層狀的塔式結(jié)構(gòu)取長補(bǔ)短協(xié)調(diào)工作。CPU 寄存器是 CPU 內(nèi)部用來存放數(shù)據(jù)的一些小型存儲區(qū)域用來暫時存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果以及一些 CPU 運(yùn)行需要的信息。CPU 高速緩存也就是CPU Cache是一種容量小、速度快的高緩沖存儲器由SRAM組成直接制作在CPU芯片內(nèi)速度幾乎與CPU一樣快。在金字塔式存儲體系中它位于自頂向下的第二層僅次于CPU寄存器。其容量遠(yuǎn)小于內(nèi)存但速度卻可以接近處理器的頻率。主存儲器Main memory簡稱主存或內(nèi)存其作用是存放指令和數(shù)據(jù)并能由中央處理器CPU直接隨機(jī)存取。主存儲器速度比CPU高速緩存慢但存儲容器卻大的多。主存儲器的速度一般用存取時間衡量即每次與CPU間數(shù)據(jù)處理耗費(fèi)的時間以納秒(ns)為單位。大多數(shù)SDRAM內(nèi)存芯片的存取時間為5、6、7、8或10ns。主存儲器的帶寬計算公式帶寬頻率*位寬8。例如DDR4 內(nèi)存頻率是3600 MHz在64位系統(tǒng)雙通道位寬為128以此類推1B8bit,單通道 DDR4-36003600MHz * 64bit / 828800MB/S雙通道 DDR4-36003600MHz * 64bit * 2 / 857600MB/S輔助存儲器速度慢的多優(yōu)點(diǎn)是容量大可持久化存儲。計算機(jī)存儲器的工作原理CPU運(yùn)行程序時先從寄存器中讀取數(shù)據(jù)。如果在寄存器中可以找到數(shù)據(jù)則直接從寄存器中讀取。如果在寄存器中找不到數(shù)據(jù)則從CPU Cache中讀取數(shù)據(jù)并將數(shù)據(jù)緩存在CPU Cache中。如果在CPU cache中可以找到數(shù)據(jù)則直接從CPU Cache中讀取。如果在CPU cache中找不到數(shù)據(jù)則從主存儲器內(nèi)存中讀取數(shù)據(jù)將數(shù)據(jù)緩存在主存儲器中。如果在內(nèi)存中可以找到數(shù)據(jù)則直接從內(nèi)存中讀取。如果在內(nèi)存中找不到數(shù)據(jù)則從輔助存儲器中讀取數(shù)據(jù)例如機(jī)械磁盤、光盤、U盤等并將數(shù)據(jù)緩存在內(nèi)存中。物理內(nèi)存計算機(jī)系統(tǒng)將內(nèi)存劃分為固定大小的塊稱為page標(biāo)準(zhǔn)page 大小為 4 KiB。進(jìn)程并不直接對物理內(nèi)存尋址每個進(jìn)程具有虛擬地址空間virtual address space。當(dāng)進(jìn)程請求內(nèi)存時MMU 將進(jìn)程獲得的虛擬地址VAVirtual Address 映射到物理地址PAPhysical Address 。MMU是Memory Management Unit的縮寫即內(nèi)存管理單元它是CPU中用來管理虛擬存儲器、物理存儲器的控制線路負(fù)責(zé)將虛擬地址映射為物理地址以及提供硬件機(jī)制的內(nèi)存訪問授權(quán)。**思考**為什么CPU不直接訪問物理地址虛擬內(nèi)存的容量是物理內(nèi)存和交換空間的總和而虛擬地址負(fù)責(zé)映射到物理內(nèi)存地址和交換空間地址。進(jìn)程使用內(nèi)存的過程中希望內(nèi)存是連續(xù)的。如果進(jìn)程直接訪問物理地址則內(nèi)核很難保證進(jìn)程獲得的物理地址空間是連續(xù)的因為進(jìn)程存在著運(yùn)行和退出就會出現(xiàn)內(nèi)存碎片化。進(jìn)程的虛擬地址在虛擬內(nèi)存中是連續(xù)的達(dá)到了內(nèi)存連續(xù)的目的而 MMU 會將進(jìn)程的虛擬地址映射到物理地址。Swap 空間Swap意思是“交換”、“實物交易”。Linux Swap交換空間是受Linux內(nèi)核內(nèi)存子系統(tǒng)控制的磁盤區(qū)域。功能1當(dāng)內(nèi)存使用量超過定義的限制時內(nèi)核尋找已分配給進(jìn)程但空閑的內(nèi)存頁將該空閑的內(nèi)存頁寫入到交換空間并向其他進(jìn)程重新分配RAM頁面。功能2如果某個程序需要訪問磁盤上的頁面則內(nèi)核會找到另一個空閑的內(nèi)存頁 將其寫入到磁盤然后從交換區(qū)重新調(diào)用所需的頁面。功能3如果某個程序需要訪問數(shù)據(jù)訪問的數(shù)據(jù)存放在交換空間則該程序直接從交換空間讀取數(shù)據(jù)而不需要從磁盤原始位置讀取進(jìn)而提高速度。簡單地說Linux Swap 空間就是在內(nèi)存不夠的情況下操作系統(tǒng)先把內(nèi)存中暫時不用的數(shù)據(jù)存到硬盤的交換空間騰出內(nèi)存來讓別的程序運(yùn)行和Windows的虛擬內(nèi)存pagefile.sys的作用是一樣的。**交換空間只是臨時的解決辦法。**雖然交換空間能夠作為虛擬內(nèi)存使用但由于交換區(qū)位于磁盤上它的速度比物理內(nèi)存慢的多因此如果需要更快的速度的話最好的辦法仍然是加大物理內(nèi)存。查看內(nèi)存# 默認(rèn)單位是KiB使用-m選項以MiB為單位[rootserver ~10:47:13]# freetotal usedfreeshared buff/cache available Mem:40261165625123045688147604179163203728Swap:406322804063228輸出說明Memtotal物理內(nèi)存空間大小。used使用的內(nèi)存 (total - free - buffers - cache)。free未使用的內(nèi)存空間大小(真正的空閑未被任何程序占用)。shared多個進(jìn)程共享的內(nèi)存空間大小。cached從磁盤讀取的數(shù)據(jù)占用的內(nèi)存空間大小待以后使用數(shù)據(jù)沒有被修改。buffers被更改但未寫回磁盤的數(shù)據(jù)占用的內(nèi)存空間大小。Swap:total交換空間大小。used使用的交換空間大小。free未使用交換空間大小。Swap 空間大小管理員應(yīng)根據(jù)系統(tǒng)的內(nèi)存工作負(fù)載來調(diào)整交換空間大小。應(yīng)用供應(yīng)商有時會提供這方面的建議。根據(jù)物理內(nèi)存總量下表提供了一些指導(dǎo)。物理內(nèi)存(RAM)交換空間允許HIBERNATE時的交換空間2GiB或以下兩倍的RAM三倍的RAM2GiB和8GiB之間同等的RAM兩倍的RAM8GiB和64GiB之間至少4GiB1.5倍的RAM64GiB以上至少4GiB不建議Hibernate筆記本電腦和臺式機(jī)的Hibernate功能會在關(guān)閉系統(tǒng)電源之前使用交換空間來保存RAM內(nèi)容。重新打開系統(tǒng)時 內(nèi)核將從交換空間恢復(fù)RAM內(nèi)容無需完全啟動。 對于這些系統(tǒng)而言交換空間需要超過RAM量。創(chuàng)建交換空間# 使用parted創(chuàng)建所需大小的分區(qū)并將其文件系統(tǒng)類型設(shè)置為linux-swap[rootserver ~11:38:16]# parted /dev/sdb mklabel gpt[rootserver ~12:17:41]# parted /dev/sdb unit MiB mkpart swap01 linux-swap 1 2049[rootserver ~12:17:47]# parted /dev/sdb unit MiB print# 格式化swap空間[rootserver ~12:17:55]# mkswap /dev/sdb1正在設(shè)置交換空間版本1大小2097148KiB 無標(biāo)簽UUID3b4aa4f7-0e5c-48c2-866f-658c09643cc4激活 swap 空間# 激活swap空間[rootserver ~12:18:03]# swapon /dev/sdb1# 查看swap設(shè)備列表[rootserver ~12:18:26]# swapon -s文件名 類型 大小 已用 權(quán)限 /dev/dm-1 partition40632280-2/dev/sdb1 partition20971480-3默認(rèn)情況下多個交換空間具有相同的優(yōu)先級時系統(tǒng)會按順序使用交換空間即內(nèi)核先使用第一個已激活交換空間直至其空間已滿然后開始使用第二個交換空間。在激活交換分區(qū)的時候可以為每個交換空間定義一個優(yōu)先級從而強(qiáng)制按該順序使用交換空間。swapon 命令使用-p選項指定優(yōu)先級優(yōu)先級介于-1和32767之間值越大優(yōu)先級越高。示例[rootserver ~12:18:34]# swapon -p 4 /dev/sdb1取消 swap 空間激活[rootserver ~12:18:54]# swapoff /dev/sdb1[rootserver ~12:19:03]# swapon -s文件名 類型 大小 已用 權(quán)限 /dev/dm-1 partition40632280-2持久化激活 swap 空間修改/etc/fstab文件添加如下類似記錄UUID3b4aa4f7-0e5c-48c2-866f-658c09643cc4 swap swap pri4 0 0使用命令swapon -a激活/etc/fstab中所有交換設(shè)備。使用命令swapoff -a取消/etc/fstab中所有交換設(shè)備激活。[rootserver ~12:21:17]# swapon -a[rootserver ~12:24:50]# swapon -sFilename Type Size Used Priority /dev/dm-1 partition40632280-2/dev/sdb1 partition20971480-3[rootserver ~12:28:03]# swapoff -a[rootserver ~12:28:22]# swapon -s