中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

2021拉新推廣傭金排行榜南通百度seo代理

2021拉新推廣傭金排行榜,南通百度seo代理,今天最新軍事新聞視頻,最火的做網(wǎng)站源碼語(yǔ)言本文討論的 swap基于Linux4.4內(nèi)核代碼 。Linux內(nèi)存管理是一套非常復(fù)雜的系統(tǒng),而swap只是其中一個(gè)很小的處理邏輯。 希望本文能讓讀者了解Linux對(duì)swap的使用大概是什么樣子。閱讀完本文,應(yīng)該可以幫你解決以下問(wèn)題: swap到底是干嘛的&#xf…

本文討論的 swap基于Linux4.4內(nèi)核代碼 。Linux內(nèi)存管理是一套非常復(fù)雜的系統(tǒng),而swap只是其中一個(gè)很小的處理邏輯。

希望本文能讓讀者了解Linux對(duì)swap的使用大概是什么樣子。閱讀完本文,應(yīng)該可以幫你解決以下問(wèn)題:

  1. swap到底是干嘛的?
  2. swappiness到底是用來(lái)調(diào)節(jié)什么的?
  3. kswapd什么時(shí)候會(huì)進(jìn)行swap操作?
  4. 什么是內(nèi)存水位標(biāo)記?
  5. swap分區(qū)的優(yōu)先級(jí)(priority)有啥用?

1、什么是SWAP,到底是干嘛的?

我們一般所說(shuō)的swap,指的是一個(gè)交換分區(qū)或文件。在Linux上可以使用swapon -s命令查看當(dāng)前系統(tǒng)上正在使用的交換空間有哪些,以及相關(guān)信息:

[root@wsip-70-182-133-152 home]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194300 0       -2

從功能上講,交換分區(qū)主要是在內(nèi)存不夠用的時(shí)候,將部分內(nèi)存上的數(shù)據(jù)交換到swap空間上,以便讓系統(tǒng)不會(huì)因內(nèi)存不夠用而導(dǎo)致oom或者更致命的情況出現(xiàn)。

所以,當(dāng)內(nèi)存使用存在壓力,開(kāi)始觸發(fā)內(nèi)存回收的行為時(shí),就可能會(huì)使用swap空間。

內(nèi)核對(duì)swap的使用實(shí)際上是跟內(nèi)存回收行為緊密結(jié)合的。那么關(guān)于內(nèi)存回收和swap的關(guān)系,我們需要思考以下幾個(gè)問(wèn)題:

  1. 為什么要進(jìn)行內(nèi)存回收?
  2. 哪些內(nèi)存可能會(huì)被回收呢?
  3. 回收的過(guò)程中什么時(shí)候會(huì)進(jìn)行交換呢?
  4. 具體怎么交換?

下面我們就從這些問(wèn)題出發(fā),一個(gè)一個(gè)進(jìn)行分析。

為什么要進(jìn)行內(nèi)存回收?

內(nèi)核之所以要進(jìn)行內(nèi)存回收,主要原因有兩個(gè):

  1. 內(nèi)核需要為任何時(shí)刻突發(fā)到來(lái)的內(nèi)存申請(qǐng)?zhí)峁┳銐虻膬?nèi)存。所以一般情況下保證有足夠的free空間對(duì)于內(nèi)核來(lái)說(shuō)是必要的。 另外,Linux內(nèi)核使用cache的策略雖然是不用白不用,內(nèi)核會(huì)使用內(nèi)存中的page cache對(duì)部分文件進(jìn)行緩存,以便提升文件的讀寫(xiě)效率。 所以內(nèi)核有必要設(shè)計(jì)一個(gè)周期性回收內(nèi)存的機(jī)制,以便cache的使用和其他相關(guān)內(nèi)存的使用不至于讓系統(tǒng)的剩余內(nèi)存長(zhǎng)期處于很少的狀態(tài)。
  2. 當(dāng)真的有大于空閑內(nèi)存的申請(qǐng)到來(lái)的時(shí)候,會(huì)觸發(fā)強(qiáng)制內(nèi)存回收。 所以,內(nèi)核在應(yīng)對(duì)這兩類回收的需求下,分別實(shí)現(xiàn)了兩種不同的機(jī)制:

所以,內(nèi)核在應(yīng)對(duì)這兩類回收的需求下,分別實(shí)現(xiàn)了兩種不同的機(jī)制:

  • 一個(gè)是使用 kswapd進(jìn)程對(duì)內(nèi)存進(jìn)行周期檢查 ,以保證平常狀態(tài)下剩余內(nèi)存盡可能夠用。
  • 另一個(gè)是 直接內(nèi)存回收(directpagereclaim) ,就是當(dāng)內(nèi)存分配時(shí)沒(méi)有空閑內(nèi)存可以滿足要求時(shí),觸發(fā)直接內(nèi)存回收。

這兩種內(nèi)存回收的觸發(fā)路徑不同:

  • 一個(gè)是使用 kswapd進(jìn)程對(duì)內(nèi)存進(jìn)行周期檢查 ,以保證平常狀態(tài)下剩余內(nèi)存盡可能夠用。
  • 另一個(gè)是 直接內(nèi)存回收(directpagereclaim) ,就是當(dāng)內(nèi)存分配時(shí)沒(méi)有空閑內(nèi)存可以滿足要求時(shí),觸發(fā)直接內(nèi)存回收。

這兩種內(nèi)存回收的觸發(fā)路徑不同:

  • 一個(gè)是由內(nèi)核進(jìn)程kswapd直接調(diào)用內(nèi)存回收的邏輯進(jìn)行內(nèi)存回收; 參見(jiàn)mm/vmscan.c中的kswapd()主邏輯
  • 另一個(gè)是內(nèi)存申請(qǐng)的時(shí)候進(jìn)入slow path的內(nèi)存申請(qǐng)邏輯進(jìn)行回收。 參見(jiàn)內(nèi)核代碼中的mm/page_alloc.c中的__alloc_pages_slowpath方法

這兩個(gè)方法中實(shí)際進(jìn)行內(nèi)存回收的過(guò)程殊途同歸,最終都是 調(diào)用shrink_zone() 方法進(jìn)行針對(duì)每個(gè)zone的內(nèi)存頁(yè)縮減。

這個(gè)方法中會(huì)再調(diào)用shrink_lruvec()這個(gè)方法對(duì)每個(gè)組織頁(yè)的鏈表進(jìn)程檢查。找到這個(gè)線索之后,我們就可以清晰的看到內(nèi)存回收操作究竟針對(duì)的page有哪些了。

這些鏈表主要定義在mm/vmscan.c一個(gè)enum中:

根據(jù)這個(gè)enum可以看到,內(nèi)存回收主要需要進(jìn)行掃描的鏈表有如下4個(gè):

  • anon的inactive
  • anon的active
  • file的inactive
  • file的active

就是說(shuō),內(nèi)存回收操作主要針對(duì)的就是內(nèi)存中的文件頁(yè)(file cache)和匿名頁(yè)。

關(guān)于活躍(active)還是不活躍(inactive)的判斷內(nèi)核會(huì)使用lru算法進(jìn)行處理并進(jìn)行標(biāo)記,我們這里不詳細(xì)解釋這個(gè)過(guò)程。

整個(gè)掃描的過(guò)程分幾個(gè)循環(huán):

  1. 首先掃描每個(gè)zone上的cgroup組;
  2. 然后再以cgroup的內(nèi)存為單元進(jìn)行page鏈表的掃描;
  3. 內(nèi)核會(huì)先掃描anon的active鏈表,將不頻繁的放進(jìn)inactive鏈表中,然后掃描inactive鏈表,將里面活躍的移回active中;
  4. 進(jìn)行swap的時(shí)候,先對(duì)inactive的頁(yè)進(jìn)行換出;
  5. 如果是file的文件映射page頁(yè),則判斷其是否為臟數(shù)據(jù),如果是臟數(shù)據(jù)就寫(xiě)回,不是臟數(shù)據(jù)可以直接釋放。

這樣看來(lái), 內(nèi)存回收這個(gè)行為會(huì)對(duì)兩種內(nèi)存的使用進(jìn)行回收:

  • 一種是anon的匿名頁(yè)內(nèi)存,主要回收手段是swap;
  • 另一種是file-backed的文件映射頁(yè),主要的釋放手段是寫(xiě)回和清空。

因?yàn)獒槍?duì)filebased的內(nèi)存,沒(méi)必要進(jìn)行交換,其數(shù)據(jù)原本就在硬盤上,回收這部分內(nèi)存只要在有臟數(shù)據(jù)時(shí)寫(xiě)回,并清空內(nèi)存就可以了,以后有需要再?gòu)膶?duì)應(yīng)的文件讀回來(lái)。

內(nèi)存對(duì)匿名頁(yè)和文件緩存一共用了 四條鏈表 進(jìn)行組織,回收過(guò)程主要是針對(duì)這四條鏈表進(jìn)行掃描和操作。

2、swappiness到底是用來(lái)調(diào)節(jié)什么的?

很多人應(yīng)該都知道 /proc/sys/vm/swappiness 這個(gè)文件,是個(gè)可以用來(lái)調(diào)整跟swap相關(guān)的參數(shù)。這個(gè)文件的默認(rèn)值是60,可以的取值范圍是0-100。

這很容易給大家一個(gè)暗示:我是個(gè)百分比哦!

那么這個(gè)文件具體到底代表什么意思呢?我們先來(lái)看一下說(shuō)明

======swappinessThis control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap.A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.The default value is 60.======

這個(gè)文件的值用來(lái)定義內(nèi)核使用swap的積極程度:

  • 值越高,內(nèi)核就會(huì)越積極的使用swap;
  • 值越低,就會(huì)降低對(duì)swap的使用積極性。
  • 如果這個(gè)值為0,那么內(nèi)存在free和file-backed使用的頁(yè)面總量小于高水位標(biāo)記(high water mark)之前,不會(huì)發(fā)生交換。

在這里我們可以理解file-backed這個(gè)詞的含義了,實(shí)際上就是上文所說(shuō)的文件映射頁(yè)的大小。

那么這個(gè)swappiness到底起到了什么作用呢?

我們換個(gè)思路考慮這個(gè)事情。假設(shè)讓我們?cè)O(shè)計(jì)一個(gè)內(nèi)存回收機(jī)制,要去考慮將一部分內(nèi)存寫(xiě)到swap分區(qū)上,將一部分file-backed的內(nèi)存寫(xiě)回并清空,剩余部分內(nèi)存出來(lái),我們將怎么設(shè)計(jì)?

我想應(yīng)該主要考慮這樣幾個(gè)問(wèn)題:

  1. 如果回收內(nèi)存可以有兩種途徑(匿名頁(yè)交換和file緩存清空),那么我應(yīng)該考慮在本次回收的時(shí)候,什么情況下多進(jìn)行file寫(xiě)回,什么情況下應(yīng)該多進(jìn)行swap交換。說(shuō)白了就是平衡兩種回收手段的使用,以達(dá)到最優(yōu)。
  2. 如果符合交換條件的內(nèi)存較長(zhǎng),是不是可以不用全部交換出去?比如可以交換的內(nèi)存有100M,但是目前只需要50M內(nèi)存,實(shí)際只要交換50M就可以了,不用把能交換的都交換出去。

分析代碼會(huì)發(fā)現(xiàn),Linux內(nèi)核對(duì)這部分邏輯的實(shí)現(xiàn)代碼在 get_scan_count() 這個(gè)方法中,這個(gè)方法被 shrink_lruvec() 調(diào)用。

get_sacn_count()就是處理上述邏輯的,swappiness是它所需要的一個(gè)參數(shù),這個(gè)參數(shù)實(shí)際上是指導(dǎo)內(nèi)核在清空內(nèi)存的時(shí)候,是更傾向于清空f(shuō)ile-backed內(nèi)存還是更傾向于進(jìn)行匿名頁(yè)的交換的。

當(dāng)然,這只是個(gè)傾向性,是指在兩個(gè)都?jí)蛴玫那闆r下,更愿意用哪個(gè),如果不夠用了,那么該交換還是要交換。

簡(jiǎn)單看一下get_sacn_count()函數(shù)的處理部分代碼,其中關(guān)于swappiness的第一個(gè)處理是:

這里注釋的很清楚:

  1. 如果swappiness設(shè)置為100,那么匿名頁(yè)和文件將用同樣的優(yōu)先級(jí)進(jìn)行回收。 很明顯,使用清空文件的方式將有利于減輕內(nèi)存回收時(shí)可能造成的IO壓力。 因?yàn)槿绻鹒ile-backed中的數(shù)據(jù)不是臟數(shù)據(jù)的話,那么可以不用寫(xiě)回,這樣就沒(méi)有IO發(fā)生,而一旦進(jìn)行交換,就一定會(huì)造成IO。 所以系統(tǒng)默認(rèn)將swappiness的值設(shè)置為60,這樣回收內(nèi)存時(shí),對(duì)file-backed的文件cache內(nèi)存的清空比例會(huì)更大,內(nèi)核將會(huì)更傾向于進(jìn)行緩存清空而不是交換。
  2. 這里的swappiness值如果是60,那么是不是說(shuō)內(nèi)核回收的時(shí)候,會(huì)按照60:140的比例去做相應(yīng)的swap和清空f(shuō)ile-backed的空間呢?并不是。 在做這個(gè)比例計(jì)算的時(shí)候,內(nèi)核還要參考當(dāng)前內(nèi)存使用的其他信息。對(duì)這里具體是怎么處理感興趣的人,可以自己詳細(xì)看get_sacn_count()的實(shí)現(xiàn),本文就不多解釋了。 我們?cè)诖艘鞔_的概念是: swappiness的值是用來(lái)控制內(nèi)存回收時(shí),回收的匿名頁(yè)更多一些還是回收的file cache更多一些 。
  3. swappiness設(shè)置為0的話,是不是內(nèi)核就根本不會(huì)進(jìn)行swap了呢?這個(gè)答案也是否定的。 首先是內(nèi)存真的不夠用的時(shí)候,該swap的話還是要swap。 其次在內(nèi)核中還有一個(gè)邏輯會(huì)導(dǎo)致直接使用swap, 內(nèi)核代碼 是這樣處理的:?

3、kswapd什么時(shí)候會(huì)進(jìn)行swap操作?

我們回到kswapd周期檢查和直接內(nèi)存回收的兩種內(nèi)存回收機(jī)制。

直接內(nèi)存回收比較好理解,當(dāng)申請(qǐng)的內(nèi)存大于剩余內(nèi)存的時(shí)候,就會(huì)觸發(fā)直接回收。

那么kswapd進(jìn)程在周期檢查的時(shí)候觸發(fā)回收的條件是什么呢?

還是從設(shè)計(jì)角度來(lái)看,kswapd進(jìn)程要周期對(duì)內(nèi)存進(jìn)行檢測(cè),達(dá)到一定閾值的時(shí)候開(kāi)始進(jìn)行內(nèi)存回收。

這個(gè)所謂的閾值可以理解為內(nèi)存目前的使用壓力,就是說(shuō),雖然我們還有剩余內(nèi)存,但是當(dāng)剩余內(nèi)存比較小的時(shí)候,就是內(nèi)存壓力較大的時(shí)候,就應(yīng)該開(kāi)始試圖回收些內(nèi)存了,這樣才能保證系統(tǒng)盡可能的有足夠的內(nèi)存給突發(fā)的內(nèi)存申請(qǐng)所使用。

4、什么是內(nèi)存水位標(biāo)記?(watermark)

那么如何描述內(nèi)存使用的壓力呢?

Linux內(nèi)核使用水位標(biāo)記(watermark)的概念來(lái)描述這個(gè)壓力情況。

  • Linux為內(nèi)存的使用設(shè)置了三種內(nèi)存水位標(biāo)記:high、low、min。他們 所標(biāo)記的含義分別為:
  • 剩余內(nèi)存在high以上表示內(nèi)存剩余較多,目前內(nèi)存使用壓力不大;
  • high-low的范圍表示目前剩余內(nèi)存存在一定壓力;
  • low-min表示內(nèi)存開(kāi)始有較大使用壓力,剩余內(nèi)存不多了;
  • min是最小的水位標(biāo)記,當(dāng)剩余內(nèi)存達(dá)到這個(gè)狀態(tài)時(shí),就說(shuō)明內(nèi)存面臨很大壓力。
  • 小于min這部分內(nèi)存,內(nèi)核是保留給特定情況下使用的,一般不會(huì)分配。

內(nèi)存回收行為就是基于剩余內(nèi)存的水位標(biāo)記進(jìn)行決策的:

當(dāng)系統(tǒng)剩余內(nèi)存低于watermark[low]的時(shí)候,內(nèi)核的kswapd開(kāi)始起作用,進(jìn)行內(nèi)存回收。直到剩余內(nèi)存達(dá)到watermark[high]的時(shí)候停止。

如果內(nèi)存消耗導(dǎo)致剩余內(nèi)存達(dá)到了或超過(guò)了watermark[min]時(shí),就會(huì)觸發(fā)直接回收(direct reclaim)。

明白了水位標(biāo)記的概念之后,zonefile + zonefree <= high_wmark_pages(zone)這個(gè)公式就能理解了。

這里的zonefile相當(dāng)于內(nèi)存中文件映射的總量,zonefree相當(dāng)于剩余內(nèi)存的總量。

內(nèi)核一般認(rèn)為,如果zonefile還有的話,就可以盡量通過(guò)清空文件緩存獲得部分內(nèi)存,而不必只使用swap方式對(duì)anon的內(nèi)存進(jìn)行交換。

整個(gè)判斷的概念是說(shuō),在全局回收的狀態(tài)下(有g(shù)lobal_reclaim(sc)標(biāo)記),如果當(dāng)前的文件映射內(nèi)存總量+剩余內(nèi)存總量的值評(píng)估小于等于watermark[high]標(biāo)記的時(shí)候,就可以進(jìn)行直接swap了。

這樣是為了防止進(jìn)入cache陷阱,具體描述可以見(jiàn)代碼注釋。

這個(gè)判斷對(duì)系統(tǒng)的影響是, swappiness設(shè)置為0時(shí),有剩余內(nèi)存的情況下也可能發(fā)生交換。

那么watermark相關(guān)值是如何計(jì)算的呢?

所有的內(nèi)存watermark標(biāo)記都是根據(jù)當(dāng)前內(nèi)存總大小和一個(gè)可調(diào)參數(shù)進(jìn)行運(yùn)算得來(lái)的,這個(gè)參數(shù)是: /proc/sys/vm/min_free_kbytes

  • 首先這個(gè)參數(shù)本身決定了系統(tǒng)中每個(gè)zone的watermark[min]的值大小。
  • 然后內(nèi)核根據(jù)min的大小并參考每個(gè)zone的內(nèi)存大小分別算出每個(gè)zone的low水位和high水位值。

想了解具體邏輯可以參見(jiàn)源代碼目錄下的該文件:

mm/page_alloc.c

在系統(tǒng)中可以從/proc/zoneinfo文件中查看當(dāng)前系統(tǒng)的相關(guān)的信息和使用情況。

我們會(huì)發(fā)現(xiàn)以上內(nèi)存管理的相關(guān)邏輯都是以zone為單位的,這里zone的含義是指內(nèi)存的分區(qū)管理。

Linux將內(nèi)存分成多個(gè)區(qū),主要有:

  • 直接訪問(wèn)區(qū)(DMA)
  • 一般區(qū)(Normal)
  • 高端內(nèi)存區(qū)(HighMemory)

內(nèi)核對(duì)內(nèi)存不同區(qū)域的訪問(wèn)因?yàn)橛布Y(jié)構(gòu)因素會(huì)有尋址和效率上的差別。如果在NUMA架構(gòu)上,不同CPU所管理的內(nèi)存也是不同的zone。

相關(guān)參數(shù)設(shè)置

  • zone_reclaim_mode:

zone_reclaim_mode模式是在2.6版本后期開(kāi)始加入內(nèi)核的一種模式,可以用來(lái)管理當(dāng)一個(gè)內(nèi)存區(qū)域(zone)內(nèi)部的內(nèi)存耗盡時(shí),是從其內(nèi)部進(jìn)行內(nèi)存回收還是可以從其他zone進(jìn)行回收的選項(xiàng),我們可以通過(guò) /proc/sys/vm/zone_reclaim_mode 文件對(duì)這個(gè)參數(shù)進(jìn)行調(diào)整。

在申請(qǐng)內(nèi)存時(shí)(內(nèi)核的get_page_from_freelist()方法中),內(nèi)核在當(dāng)前zone內(nèi)沒(méi)有足夠內(nèi)存可用的情況下,會(huì)根據(jù)zone_reclaim_mode的設(shè)置來(lái)決策是從下一個(gè)zone找空閑內(nèi)存回收還是在zone內(nèi)部進(jìn)行回收。這個(gè)值為0時(shí)表示可以從下一個(gè)zone找可用內(nèi)存,非0表示在本地回收。

這個(gè)文件可以設(shè)置的值及其含義如下:

  1. echo 0 > /proc/sys/vm/zone_reclaim_mode:意味著關(guān)閉zone_reclaim模式,可以從其他zone或NUMA節(jié)點(diǎn)回收內(nèi)存。
  2. echo 1 > /proc/sys/vm/zone_reclaim_mode:表示打開(kāi)zone_reclaim模式,這樣內(nèi)存回收只會(huì)發(fā)生在本地節(jié)點(diǎn)內(nèi)。
  3. echo 2 > /proc/sys/vm/zone_reclaim_mode:在本地回收內(nèi)存時(shí),可以將cache中的臟數(shù)據(jù)寫(xiě)回硬盤,以回收內(nèi)存。
  4. echo 4 > /proc/sys/vm/zone_reclaim_mode:可以用swap方式回收內(nèi)存。

不同的參數(shù)配置會(huì)在NUMA環(huán)境中對(duì)其他內(nèi)存節(jié)點(diǎn)的內(nèi)存使用產(chǎn)生不同的影響,大家可以根據(jù)自己的情況進(jìn)行設(shè)置以優(yōu)化你的應(yīng)用。

默認(rèn)情況下,zone_reclaim模式是關(guān)閉的。這在很多應(yīng)用場(chǎng)景下可以提高效率,比如文件服務(wù)器,或者依賴內(nèi)存中cache比較多的應(yīng)用場(chǎng)景。

這樣的場(chǎng)景對(duì)內(nèi)存cache速度的依賴要高于進(jìn)程進(jìn)程本身對(duì)內(nèi)存速度的依賴,所以我們寧可讓內(nèi)存從其他zone申請(qǐng)使用,也不愿意清本地cache。

如果確定應(yīng)用場(chǎng)景是內(nèi)存需求大于緩存,而且盡量要避免內(nèi)存訪問(wèn)跨越NUMA節(jié)點(diǎn)造成的性能下降的話,則可以打開(kāi)zone_reclaim模式。

此時(shí)頁(yè)分配器會(huì)優(yōu)先回收容易回收的可回收內(nèi)存(主要是當(dāng)前不用的page cache頁(yè)),然后再回收其他內(nèi)存。

打開(kāi)本地回收模式的寫(xiě)回可能會(huì)引發(fā)其他內(nèi)存節(jié)點(diǎn)上的大量的臟數(shù)據(jù)寫(xiě)回處理。如果一個(gè)內(nèi)存zone已經(jīng)滿了,那么臟數(shù)據(jù)的寫(xiě)回也會(huì)導(dǎo)致進(jìn)程處理速度收到影響,產(chǎn)生處理瓶頸。

這會(huì)降低某個(gè)內(nèi)存節(jié)點(diǎn)相關(guān)的進(jìn)程的性能,因?yàn)檫M(jìn)程不再能夠使用其他節(jié)點(diǎn)上的內(nèi)存。但是會(huì)增加節(jié)點(diǎn)之間的隔離性,其他節(jié)點(diǎn)的相關(guān)進(jìn)程運(yùn)行將不會(huì)因?yàn)榱硪粋€(gè)節(jié)點(diǎn)上的內(nèi)存回收導(dǎo)致性能下降。

除非針對(duì)本地節(jié)點(diǎn)的內(nèi)存限制策略或者cpuset配置有變化,對(duì)swap的限制會(huì)有效約束交換只發(fā)生在本地內(nèi)存節(jié)點(diǎn)所管理的區(qū)域上。

  • min_unmapped_ratio:

這個(gè)參數(shù)只在NUMA架構(gòu)的內(nèi)核上生效。這個(gè)值表示NUMA上每個(gè)內(nèi)存區(qū)域的pages總數(shù)的百分比。

在zone_reclaim_mode模式下,只有當(dāng)相關(guān)區(qū)域的內(nèi)存使用達(dá)到這個(gè)百分比,才會(huì)發(fā)生區(qū)域內(nèi)存回收。

在zone_reclaim_mode設(shè)置為4的時(shí)候,內(nèi)核會(huì)比較所有的file-backed和匿名映射頁(yè),包括swapcache占用的頁(yè)以及tmpfs文件的總內(nèi)存使用是否超過(guò)這個(gè)百分比。

其他設(shè)置的情況下,只比較基于一般文件的未映射頁(yè),不考慮其他相關(guān)頁(yè)。

  • page-cluster:

page-cluster是用來(lái)控制從swap空間換入數(shù)據(jù)的時(shí)候,一次連續(xù)讀取的頁(yè)數(shù),這相當(dāng)于對(duì)交換空間的預(yù)讀。這里的連續(xù)是指在swap空間上的連續(xù),而不是在內(nèi)存地址上的連續(xù)。

因?yàn)閟wap空間一般是在硬盤上,對(duì)硬盤設(shè)備的連續(xù)讀取將減少磁頭的尋址,提高讀取效率。

這個(gè)文件中設(shè)置的值是2的指數(shù)。就是說(shuō),如果設(shè)置為0,預(yù)讀的swap頁(yè)數(shù)是2的0次方,等于1頁(yè)。如果設(shè)置為3,就是2的3次方,等于8頁(yè)。

同時(shí),設(shè)置為0也意味著關(guān)閉預(yù)讀功能。文件默認(rèn)值為3。我們可以根據(jù)我們的系統(tǒng)負(fù)載狀態(tài)來(lái)設(shè)置預(yù)讀的頁(yè)數(shù)大小。

5、swap分區(qū)的優(yōu)先級(jí)(priority)有啥用?

在使用多個(gè)swap分區(qū)或者文件的時(shí)候,還有一個(gè)優(yōu)先級(jí)的概念(Priority)。

在swapon的時(shí)候,我們可以使用-p參數(shù)指定相關(guān)swap空間的優(yōu)先級(jí), 值越大優(yōu)先級(jí)越高 ,可以指定的數(shù)字范圍是-1到32767。

內(nèi)核在使用swap空間的時(shí)候總是先使用優(yōu)先級(jí)高的空間,后使用優(yōu)先級(jí)低的。

當(dāng)然如果把多個(gè)swap空間的優(yōu)先級(jí)設(shè)置成一樣的,那么兩個(gè)swap空間將會(huì)以輪詢方式并行進(jìn)行使用。

如果兩個(gè)swap放在兩個(gè)不同的硬盤上,相同的優(yōu)先級(jí)可以起到類似RAID0的效果,增大swap的讀寫(xiě)效率。

另外,編程時(shí)使用mlock()也可以將指定的內(nèi)存標(biāo)記為不會(huì)換出,具體幫助可以參考man 2 mlock。

最后 關(guān)于swap的使用建議,針對(duì)不同負(fù)載狀態(tài)的系統(tǒng)是不一樣的。有時(shí)我們希望swap大一些,可以在內(nèi)存不夠用的時(shí)候不至于觸發(fā)oom-killer導(dǎo)致某些關(guān)鍵進(jìn)程被殺掉,比如數(shù)據(jù)庫(kù)業(yè)務(wù)。

也有時(shí)候我們希望不要swap,因?yàn)楫?dāng)大量進(jìn)程爆發(fā)增長(zhǎng)導(dǎo)致內(nèi)存爆掉之后,會(huì)因?yàn)閟wap導(dǎo)致IO跑死,整個(gè)系統(tǒng)都卡住,無(wú)法登錄,無(wú)法處理。

這時(shí)候我們就希望不要swap,即使出現(xiàn)oom-killer也造成不了太大影響,但是不能允許服務(wù)器因?yàn)镮O卡死像多米諾骨牌一樣全部死機(jī),而且無(wú)法登陸。跑cpu運(yùn)算的無(wú)狀態(tài)的apache就是類似這樣的進(jìn)程池架構(gòu)的程序。

所以:

  • swap到底怎么用?
  • 要還是不要?
  • 設(shè)置大還是小?
  • 相關(guān)參數(shù)應(yīng)該如何配置?

是要根據(jù)我們自己的生產(chǎn)環(huán)境的情況而定的。

閱讀完本文后希望大家可以明白一些swap的深層次知識(shí)。

http://m.risenshineclean.com/news/63248.html

相關(guān)文章:

  • 設(shè)計(jì)網(wǎng)站價(jià)格網(wǎng)站搜索排名查詢
  • 域名注冊(cè)完成后如何做網(wǎng)站google關(guān)鍵詞
  • 建站最少需要多少錢人員優(yōu)化是什么意思
  • 怎樣做網(wǎng)站國(guó)外seo外鏈發(fā)布平臺(tái)有哪些
  • 冠縣快搜網(wǎng)站建設(shè)有限公司蘭州seo技術(shù)優(yōu)化排名公司
  • 樂(lè)清做網(wǎng)站公司關(guān)鍵詞推廣工具
  • 深圳做網(wǎng)站建設(shè)比較好的公司義烏最好的電商培訓(xùn)學(xué)校
  • 自己做網(wǎng)站服務(wù)器要多少錢怎么做盲盒
  • 優(yōu)質(zhì)網(wǎng)站排名公司seo顧問(wèn)賺錢嗎
  • 做博客網(wǎng)站如何盈利網(wǎng)站排名查詢
  • 廈門哪家公司做網(wǎng)站行業(yè)關(guān)鍵詞搜索排名
  • 網(wǎng)站制作服務(wù)熱線百度引流怎么推廣
  • 微網(wǎng)站怎么樣做線下活動(dòng)吸粉一鍵生成app制作器
  • 珠海網(wǎng)站建設(shè)推廣廠商百度推廣開(kāi)戶聯(lián)系方式
  • 贛州公司做網(wǎng)站域名服務(wù)器查詢
  • 網(wǎng)站qq獲取百度新聞客戶端
  • 企業(yè)做網(wǎng)站需要注意什么哪家公司做推廣優(yōu)化好
  • 南通網(wǎng)站排名站長(zhǎng)是什么級(jí)別
  • 小企業(yè)做網(wǎng)站多少錢惠州網(wǎng)站營(yíng)銷推廣
  • 塔城地區(qū)建設(shè)工程信息網(wǎng)站谷歌搜索廣告
  • 建個(gè)好網(wǎng)站網(wǎng)絡(luò)推廣外包公司
  • 網(wǎng)站導(dǎo)航做多大神馬seo服務(wù)
  • 九九電視劇免費(fèi)觀看完整版seo搜索培訓(xùn)
  • 大連商城網(wǎng)站建設(shè)百度營(yíng)銷登錄入口
  • 廣東微信網(wǎng)站制作哪家好西安網(wǎng)站優(yōu)化公司
  • 網(wǎng)頁(yè)設(shè)計(jì)與制作教程web前端開(kāi)發(fā)整站優(yōu)化提升排名
  • 平?jīng)鍪凶》亢统青l(xiāng)建設(shè)局網(wǎng)站sem賬戶托管外包
  • 網(wǎng)站登陸驗(yàn)證怎么用java做拓客最有效方案
  • 網(wǎng)站設(shè)計(jì)任務(wù)怎么讓客戶主動(dòng)找你
  • dw做的網(wǎng)站如何上傳圖片灰色行業(yè)推廣平臺(tái)網(wǎng)站