最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

萬字解析Hungtask原理及分析(下)

2022-10-26 20:27 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

接上文萬字解析Hungtask原理及分析(上)

三、問題分析

上面介紹了兩種hungtask檢測的原理及方法,我們知道了不同系統(tǒng)可以如何判斷task已經(jīng)hang住,進(jìn)而觸發(fā)系統(tǒng)去顯示或保存現(xiàn)場狀態(tài)(如發(fā)現(xiàn)重要task持續(xù)hang住時(shí),會(huì)多次打印D狀態(tài)task的棧信息、或系統(tǒng)最終因?yàn)閔ungtask無法恢復(fù)而重啟時(shí)保存ramdump)及異?;謴?fù)。

一般可以通過kernel log中的task棧信息打印,看到hang住的關(guān)鍵task及其對(duì)應(yīng)的棧,并對(duì)比相隔一定時(shí)間的多次該task的棧情況,明確該task確實(shí)已經(jīng)異常,之后就可以根據(jù)棧的情況推測及尋找線索。如果開啟了ramdump,異常重啟時(shí)保存的ramdump也會(huì)對(duì)問題分析產(chǎn)生很大的幫助。

實(shí)際遇到的大多數(shù)問題,通過log中的task棧信息,一般只能粗略知道task hang住的大致現(xiàn)場及方向,還需要結(jié)合log中的其他信息、ramdump等進(jìn)行分析,可能還需要判斷問題發(fā)生場景、編譯調(diào)試版本復(fù)現(xiàn)問題抓取更多信息,或者排查可疑修改。

由hungtask原理可知,產(chǎn)生hungtask異常的直接原因是所關(guān)注的task長時(shí)間處于D狀態(tài)或無法調(diào)度運(yùn)行,一般就是task本身有異?;蛳到y(tǒng)有異常影響到了該task。以系統(tǒng)異常的情況居多,常見的可能原因有內(nèi)存不足、內(nèi)存分配異常、UFS器件異常、文件系統(tǒng)異常、spinlock或rwsem等各種鎖死鎖、中斷風(fēng)暴等等;task本身的異常,可能是其本身邏輯問題,需要具體分析。針對(duì)每種原因,大都有對(duì)應(yīng)的判斷及定位方法,可以輸出相應(yīng)的調(diào)試版本壓測復(fù)現(xiàn)分析。

以下舉兩個(gè)實(shí)際的例子看下hungtask問題發(fā)生的現(xiàn)象及分析方法。



1、開關(guān)機(jī)測試時(shí)死機(jī)

在開關(guān)機(jī)測試及各項(xiàng)功能測試時(shí)均出現(xiàn)了低概率死機(jī)問題,由于故障機(jī)分散,判斷為非硬件個(gè)體問題。查看故障機(jī)kernel log,發(fā)現(xiàn)死機(jī)之前,有hungtask打印。下面是其中一例死機(jī)前輸出的hungtask情況。


hungtask檢測輸出的hang住的其中幾個(gè)task的棧情況如下,該例中init進(jìn)程阻塞在了io上。



【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ??

分析多例故障現(xiàn)場,hang住的task不一致,用T32分析對(duì)應(yīng)的ramdump,task會(huì)卡在對(duì)不同文件的io操作;出問題時(shí)hang住的task數(shù)量均較多。

解析ramdump得到cpu上的任務(wù)隊(duì)列情況,



發(fā)現(xiàn)一個(gè)swr irq(音頻功放注冊(cè)的中斷)在運(yùn)行,一個(gè)swr irq在pending,還有多個(gè)cfs task也在pending。查看系統(tǒng)中斷狀態(tài),觀察到開機(jī)的短時(shí)間內(nèi),產(chǎn)生了大量中斷,引起中斷風(fēng)暴,可能會(huì)嚴(yán)重影響系統(tǒng)中其他任務(wù)的執(zhí)行,包括io操作,由此導(dǎo)致比較隨機(jī)的開機(jī)時(shí)不同任務(wù)卡io的問題的發(fā)生。

之后去掉該音頻功放注冊(cè)的中斷(實(shí)際上這個(gè)中斷對(duì)應(yīng)的音頻功放并沒有使用,中斷引腳輸入狀態(tài)不定導(dǎo)致隨機(jī)的中斷異常),進(jìn)行開關(guān)機(jī)壓測,沒有復(fù)現(xiàn)問題。



2、Monkey測試時(shí)死機(jī)

某項(xiàng)目發(fā)現(xiàn)低概率hungtask問題,過一段時(shí)間就會(huì)有一、兩例出現(xiàn),在Money測試中概率有所上升,每輪中能穩(wěn)定出現(xiàn)一到兩例。每次出現(xiàn)問題的task不一定相同。下面舉一個(gè)例子:


這里時(shí)surfaceflinger出現(xiàn)了hungtask情況,其一直在嘗試獲取 kworker/u16:14 進(jìn)程所持的mutex。再查看kworker/u16:14,


可以看到該task在等rpm(處理系統(tǒng)中時(shí)鐘和電源請(qǐng)求的子系統(tǒng))操作的completion,但這里rpm ack一直沒有返回。查看其它異常時(shí)現(xiàn)場,共性都是rpm ack一直沒有返回。最后分析到,雖然系統(tǒng)還有足夠的H memory(HighAtomic),但ap和rpm通信用的glink分配內(nèi)存時(shí)無法使用這種遷移類型的memory;系統(tǒng)同時(shí)有許多zs_malloc失敗的情況,因?yàn)閦ram功能本身在進(jìn)行內(nèi)存分配時(shí),也沒有使用H memory,從而導(dǎo)致anon page回收異常。


最后,調(diào)整內(nèi)存回收參數(shù),該問題得以優(yōu)化。

四、總結(jié)

本文主要描述了什么是hungtask、hungtask檢測方法以及hungtask產(chǎn)生的原因,并通過兩個(gè)案例,展示了具體問題分析方法。

hungtask表現(xiàn)為某些重要進(jìn)程一直不能運(yùn)行,如長期處于uninterruptible sleep狀態(tài)(也就是常說的D狀態(tài)??梢圆扇《喾N方法檢測:定時(shí)輪詢系統(tǒng)中的所有task,然后判斷處于D狀態(tài)的task的上下文切換次數(shù)是否和之前輪詢時(shí)的相等,如果相等則表明該task兩個(gè)輪詢間隔期間一直處于D狀態(tài),可以認(rèn)為該task有hang的情況;或只關(guān)注重要進(jìn)程的運(yùn)行情況,讓這個(gè)重要進(jìn)程在規(guī)定時(shí)間內(nèi)模擬喂狗操作,若發(fā)現(xiàn)沒有及時(shí)喂狗,則認(rèn)為其有hang的情況。產(chǎn)生hungtask的直接原因是所關(guān)注的task長時(shí)間處于D狀態(tài)或無法調(diào)度運(yùn)行,task本身有異?;蛳到y(tǒng)有異常影響到了該task:對(duì)于系統(tǒng)異常,常見的可能原因有內(nèi)存不足、內(nèi)存分配異常、UFS器件異常、文件系統(tǒng)異常、spinlock或rwsem等各種鎖死鎖、中斷風(fēng)暴等等;task本身的異常,為其本身邏輯問題。


原文作者:內(nèi)核工匠



萬字解析Hungtask原理及分析(下)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
宜昌市| 江阴市| 岑巩县| 岳阳县| 雅江县| 达日县| 梓潼县| 新宁县| 塔城市| 辽源市| 漳浦县| 泸定县| 东乌珠穆沁旗| 巴东县| 枣阳市| 扶沟县| 宁波市| 平陆县| 尉犁县| 蓬安县| 黄大仙区| 勐海县| 青岛市| 泾川县| 五寨县| 壤塘县| 潜江市| 屯留县| 兴文县| 玉树县| 化隆| 永城市| 景宁| 临澧县| 离岛区| 潢川县| 和平区| 曲阜市| 海晏县| 武义县| 龙胜|