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