陳李飛
摘要:本文主要討論在Linux系統(tǒng)內(nèi)核在頁回收時出現(xiàn)cpu load瞬間飆高的問題,主要表現(xiàn)為Linux系統(tǒng)響應(yīng)慢,我們從內(nèi)核的角度分析了導(dǎo)致該問題的幾種可能情況。我們可以借助提高watermark low可以盡早的喚醒kswapd,然后kswapd來做background reclaim。Linux內(nèi)核提供了各種各樣的機(jī)制,我們根據(jù)具體的使用場景來選擇使用合適的策略。從而實(shí)現(xiàn)系統(tǒng)性能的提升。
關(guān)鍵詞:linux 內(nèi)核分析 頁回收
中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A 文章編號: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ù)器前段時間頻繁出現(xiàn)CPU load很高(比如load average達(dá)到80多)的情況,希望能借助這個機(jī)會給大家介紹一下在Linux系統(tǒng)出現(xiàn)問題時我們能夠借助哪些工具去協(xié)助分析;以及介紹一下Linux在內(nèi)存管理方面的一些機(jī)制以及我們的使用策略。
2 Linux系統(tǒng)出現(xiàn)常見問題的分析
在Linux系統(tǒng)里面有很多的問題定位工具,可以協(xié)助我們來分析問題。于是我們就針對目前搜索服務(wù)器的現(xiàn)象,思考可以借助哪些工具來找到問題原因。
Linux系統(tǒng)響應(yīng)慢,從內(nèi)核的角度看,大致可能有以下幾種情況:
(1)線程在內(nèi)核態(tài)執(zhí)行的時間過長,這個時間超出了它被調(diào)度算法給分配的執(zhí)行時間,它在內(nèi)核態(tài)長時間的占用CPU,而且也不返回用戶態(tài)。這種現(xiàn)象有個術(shù)語,叫做softlockup。
通過一個現(xiàn)象來簡單說下內(nèi)核態(tài)和用戶態(tài)。我們可能遇到這個現(xiàn)象,執(zhí)行完一個命令,CTRL+C怎么都?xì)⒉凰浪?,而且敲鍵盤也反應(yīng),這可能就是因?yàn)榇藭r這個進(jìn)程正運(yùn)行在內(nèi)核態(tài),CRTL+C是給進(jìn)程發(fā)signal的方式通知進(jìn)程,而進(jìn)程只有在從內(nèi)核態(tài)返回用戶態(tài)的時候才會去檢查有沒有信號,所以如果它處在內(nèi)核態(tài)的話顯然是無法被殺死的。這種現(xiàn)象就給我們系統(tǒng)很忙的感覺。
(2)CPU load值高,說明處于Running狀態(tài)和D狀態(tài)的線程太多。線程等待資源而去睡眠,就會進(jìn)入D狀態(tài)(即Disk sleep,深度睡眠),進(jìn)入D狀態(tài)的線程是不能夠被打斷的,他們會一直睡眠直到等待的資源被釋放時主動去喚醒他們。(大致的原理是,這些線程在等待什么資源,比如某個信號量,它就會被加入到這個信號量的等待隊(duì)列里,然后其它的線程釋放這個信號量的時候會去檢查該信號量的等待隊(duì)列,然后把隊(duì)列里線程給喚醒。)
(3)在內(nèi)核態(tài),除了進(jìn)程上下文外,還有中斷上下文。中斷也可能有異常,比如長時間被關(guān)中斷。中斷長時間被關(guān)閉,這個現(xiàn)象叫做hardlockup。
針對hardlockup,內(nèi)核也有監(jiān)測機(jī)制,是NMI watchdog??梢酝ㄟ^/proc/interrupts來看系統(tǒng)是否使能了NMI watchdog。如果值不為0,說明系統(tǒng)使能了NMI watchdog。然后我們通過sysctl將kernel.nmi_watchdog設(shè)置為1,即,在觸發(fā)了NMI watchdog的時候主動讓內(nèi)核去panic。從而監(jiān)測出hardlockup這種故障。
3 解決問題
為了避免direct reclaim,我們得保證在進(jìn)程申請內(nèi)存時有足夠可用的free pages,從前面的背景知識我們可以看出,提高watermark low可以盡早的喚醒kswapd,然后kswapd來做background reclaim。為此,內(nèi)核專門提供了一個sysctl接口給用戶來使用:vm.extra_free_kbytes.
于是我們增大這個值(比如增大到5G,hohoho),確實(shí)也解決了問題。增大該值來提高low水位,這樣在申請內(nèi)存的時候,如果free的內(nèi)存低于了該水位,就會喚醒kswapd去做頁回收,同時又由于還有足夠的free內(nèi)存可用所以進(jìn)程能夠正常申請而不觸發(fā)直接回收。
4 總結(jié)和思考:機(jī)制與策略
從前面我們討論的這個問題也可以看出,Linux內(nèi)核提供了各種各樣的機(jī)制,然后我們根據(jù)具體的使用場景來選擇使用的策略。由于搜索服務(wù)器存在很多批量文件操作,所以對page cache的使用很頻繁,所以我們才選擇了盡早的能夠觸發(fā)background reclaim這個策略;而如果你的文件操作不頻繁,顯然就沒有必要去盡早的喚醒后臺回收線程。另外一個,作為一個文件服務(wù)器,它對page cache的需求是很大的,越多的內(nèi)存作為page cache,系統(tǒng)的整體性能就會越好,所以我們就沒有必要為了數(shù)據(jù)的局部性而預(yù)留DMA內(nèi)存,兩相比較肯定是page cache對性能的提升大于數(shù)據(jù)的局部性對性能的提升;而如果你的文件操作不多的話,那還是打開zone_reclaim的。
5 結(jié)語
通過以上論述可以使我們更加熟悉與了解Linux的內(nèi)核機(jī)制,可以和現(xiàn)場好多就地控制系統(tǒng)性能的提升,方便文件的操作,從而使此Linux系統(tǒng)的性能充分發(fā)揮,服務(wù)實(shí)際需要。
參考文獻(xiàn)
[1]賴娟.Linux內(nèi)核分析及實(shí)時性改造[D].電子科技大學(xué),2007.
[2]張榮亮.Linux操作系統(tǒng)內(nèi)核分析與研究[D].江西師范大學(xué),2007.
技術(shù)分會、中國核學(xué)會核電子學(xué)與核探測技術(shù)分會,第十屆全國核電子學(xué)與核探測技術(shù)學(xué)術(shù)年會論文集[C].中國電子學(xué)會.
[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í)時系統(tǒng).北京:清華大學(xué)出版社,2001.