陳李飛
摘要:本文主要討論在Linux系統(tǒng)內(nèi)核在頁(yè)回收時(shí)出現(xiàn)cpu load瞬間飆高的問(wèn)題,主要表現(xiàn)為L(zhǎng)inux系統(tǒng)響應(yīng)慢,我們從內(nèi)核的角度分析了導(dǎo)致該問(wèn)題的幾種可能情況。我們可以借助提高watermark low可以盡早的喚醒kswapd,然后kswapd來(lái)做background reclaim。Linux內(nèi)核提供了各種各樣的機(jī)制,我們根據(jù)具體的使用場(chǎng)景來(lái)選擇使用合適的策略。從而實(shí)現(xiàn)系統(tǒng)性能的提升。
關(guān)鍵詞:linux 內(nèi)核分析 頁(yè)回收
中圖分類(lèi)號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)12-0252-01
Abstract:This article main discussion in Linux kernel CPU load instantly soared during pp recycling problems, main show is Linux system response is slow, we analyzed the cause of the problem from the Angle of the kernel several possible situation. We can help improve the watermark low can awaken kswapd as soon as possible, then kswapd to do background reclaim. The Linux kernel provides a variety of mechanisms, we according to the specific usage scenarios to choose to use the right strategy. So as to realize the system performance improvement.
Key Words:Linux;kernel analysis;page recovery
1 前言
搜索團(tuán)隊(duì)的服務(wù)器前段時(shí)間頻繁出現(xiàn)CPU load很高(比如load average達(dá)到80多)的情況,希望能借助這個(gè)機(jī)會(huì)給大家介紹一下在Linux系統(tǒng)出現(xiàn)問(wèn)題時(shí)我們能夠借助哪些工具去協(xié)助分析;以及介紹一下Linux在內(nèi)存管理方面的一些機(jī)制以及我們的使用策略。
2 Linux系統(tǒng)出現(xiàn)常見(jiàn)問(wèn)題的分析
在Linux系統(tǒng)里面有很多的問(wèn)題定位工具,可以協(xié)助我們來(lái)分析問(wèn)題。于是我們就針對(duì)目前搜索服務(wù)器的現(xiàn)象,思考可以借助哪些工具來(lái)找到問(wèn)題原因。
Linux系統(tǒng)響應(yīng)慢,從內(nèi)核的角度看,大致可能有以下幾種情況:
(1)線程在內(nèi)核態(tài)執(zhí)行的時(shí)間過(guò)長(zhǎng),這個(gè)時(shí)間超出了它被調(diào)度算法給分配的執(zhí)行時(shí)間,它在內(nèi)核態(tài)長(zhǎng)時(shí)間的占用CPU,而且也不返回用戶態(tài)。這種現(xiàn)象有個(gè)術(shù)語(yǔ),叫做softlockup。
通過(guò)一個(gè)現(xiàn)象來(lái)簡(jiǎn)單說(shuō)下內(nèi)核態(tài)和用戶態(tài)。我們可能遇到這個(gè)現(xiàn)象,執(zhí)行完一個(gè)命令,CTRL+C怎么都?xì)⒉凰浪?,而且敲鍵盤(pán)也反應(yīng),這可能就是因?yàn)榇藭r(shí)這個(gè)進(jìn)程正運(yùn)行在內(nèi)核態(tài),CRTL+C是給進(jìn)程發(fā)signal的方式通知進(jìn)程,而進(jìn)程只有在從內(nèi)核態(tài)返回用戶態(tài)的時(shí)候才會(huì)去檢查有沒(méi)有信號(hào),所以如果它處在內(nèi)核態(tài)的話顯然是無(wú)法被殺死的。這種現(xiàn)象就給我們系統(tǒng)很忙的感覺(jué)。
(2)CPU load值高,說(shuō)明處于Running狀態(tài)和D狀態(tài)的線程太多。線程等待資源而去睡眠,就會(huì)進(jìn)入D狀態(tài)(即Disk sleep,深度睡眠),進(jìn)入D狀態(tài)的線程是不能夠被打斷的,他們會(huì)一直睡眠直到等待的資源被釋放時(shí)主動(dòng)去喚醒他們。(大致的原理是,這些線程在等待什么資源,比如某個(gè)信號(hào)量,它就會(huì)被加入到這個(gè)信號(hào)量的等待隊(duì)列里,然后其它的線程釋放這個(gè)信號(hào)量的時(shí)候會(huì)去檢查該信號(hào)量的等待隊(duì)列,然后把隊(duì)列里線程給喚醒。)
(3)在內(nèi)核態(tài),除了進(jìn)程上下文外,還有中斷上下文。中斷也可能有異常,比如長(zhǎng)時(shí)間被關(guān)中斷。中斷長(zhǎng)時(shí)間被關(guān)閉,這個(gè)現(xiàn)象叫做hardlockup。
針對(duì)hardlockup,內(nèi)核也有監(jiān)測(cè)機(jī)制,是NMI watchdog??梢酝ㄟ^(guò)/proc/interrupts來(lái)看系統(tǒng)是否使能了NMI watchdog。如果值不為0,說(shuō)明系統(tǒng)使能了NMI watchdog。然后我們通過(guò)sysctl將kernel.nmi_watchdog設(shè)置為1,即,在觸發(fā)了NMI watchdog的時(shí)候主動(dòng)讓內(nèi)核去panic。從而監(jiān)測(cè)出hardlockup這種故障。
3 解決問(wèn)題
為了避免direct reclaim,我們得保證在進(jìn)程申請(qǐng)內(nèi)存時(shí)有足夠可用的free pages,從前面的背景知識(shí)我們可以看出,提高watermark low可以盡早的喚醒kswapd,然后kswapd來(lái)做background reclaim。為此,內(nèi)核專(zhuān)門(mén)提供了一個(gè)sysctl接口給用戶來(lái)使用:vm.extra_free_kbytes.
于是我們?cè)龃筮@個(gè)值(比如增大到5G,hohoho),確實(shí)也解決了問(wèn)題。增大該值來(lái)提高low水位,這樣在申請(qǐng)內(nèi)存的時(shí)候,如果free的內(nèi)存低于了該水位,就會(huì)喚醒kswapd去做頁(yè)回收,同時(shí)又由于還有足夠的free內(nèi)存可用所以進(jìn)程能夠正常申請(qǐng)而不觸發(fā)直接回收。
4 總結(jié)和思考:機(jī)制與策略
從前面我們討論的這個(gè)問(wèn)題也可以看出,Linux內(nèi)核提供了各種各樣的機(jī)制,然后我們根據(jù)具體的使用場(chǎng)景來(lái)選擇使用的策略。由于搜索服務(wù)器存在很多批量文件操作,所以對(duì)page cache的使用很頻繁,所以我們才選擇了盡早的能夠觸發(fā)background reclaim這個(gè)策略;而如果你的文件操作不頻繁,顯然就沒(méi)有必要去盡早的喚醒后臺(tái)回收線程。另外一個(gè),作為一個(gè)文件服務(wù)器,它對(duì)page cache的需求是很大的,越多的內(nèi)存作為page cache,系統(tǒng)的整體性能就會(huì)越好,所以我們就沒(méi)有必要為了數(shù)據(jù)的局部性而預(yù)留DMA內(nèi)存,兩相比較肯定是page cache對(duì)性能的提升大于數(shù)據(jù)的局部性對(duì)性能的提升;而如果你的文件操作不多的話,那還是打開(kāi)zone_reclaim的。
5 結(jié)語(yǔ)
通過(guò)以上論述可以使我們更加熟悉與了解Linux的內(nèi)核機(jī)制,可以和現(xiàn)場(chǎng)好多就地控制系統(tǒng)性能的提升,方便文件的操作,從而使此Linux系統(tǒng)的性能充分發(fā)揮,服務(wù)實(shí)際需要。
參考文獻(xiàn)
[1]賴(lài)娟.Linux內(nèi)核分析及實(shí)時(shí)性改造[D].電子科技大學(xué),2007.
[2]張榮亮.Linux操作系統(tǒng)內(nèi)核分析與研究[D].江西師范大學(xué),2007.
技術(shù)分會(huì)、中國(guó)核學(xué)會(huì)核電子學(xué)與核探測(cè)技術(shù)分會(huì),第十屆全國(guó)核電子學(xué)與核探測(cè)技術(shù)學(xué)術(shù)年會(huì)論文集[C].中國(guó)電子學(xué)會(huì).
[3] IEC 61850-5 communication requirements for functionsand device models[S].
[4]C-LABCooperativeComputing&.CommunicationLaboratory,‘Real-TimeL/nux},universityof Paderhorn Bv Martin Eikermanm 200l.
[5]Krishna CM,Kang G s.實(shí)時(shí)系統(tǒng).北京:清華大學(xué)出版社,2001.
數(shù)字技術(shù)與應(yīng)用2016年12期