国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

這是我調過的最難調的Bug

開發 測試 后端
我向我們的CPU供應商提交了一個bug報告,之后他們制定了一個解決方案,并在下一版本CPU里修復了這個bug。我期望聽到更多牛掰的此類故事,也期望我自己可以再攢點這樣的。

你調過的最難調的bug是哪個?

每個程序員都有些不畏死亡決戰猛獸的英雄事跡。以下這些是我的。

內存沖突

畢業不到半年,拿著剛到手的文憑,我在Lexmark公司的一個嵌入式Linux固件開發團隊中負責追蹤一個內存沖突的問題。因為內存沖突的原因和問題表象總是相差非常大,所以這類問題很難調。有可能是因為緩存溢出,也有可能是指針未初始化,或是指針被多次free,亦或是某處的DMA錯誤,但是你所見的卻是一堆神秘的問題:掛起、指令未定義、打印錯誤,以及未處理的內核錯誤。這些都非常頻繁,內存沖突看上去似乎是隨機出現又很難重現。

要調試這種問題,第一步是可重現問題。在我們奇跡般地找到這樣一個場景之后,故事開始變得好玩起來。

當時,我們發現在運行時因內存沖突而產生的程序崩潰每幾百小時就會出現一次。之后有一天有人發現一個特別的打印任務會產生內存沖突從而在幾分鐘之內就使程序崩潰。我從來不知道為什么這個打印任務會產生這個問題。現在,我們就可以進一步做些什么了。

調試

這個問題可重現之后,我就開始尋找崩潰中出現的模式。最引人注意的是未定義指令和內核錯誤,它們差不多三分之一的時間就會發生一次。未定義指令的地址是一個合理的內核代碼地址,但是CPU讀到的這個指令卻不是我們期望出現的。這就很簡單了,可能是有人不小心寫了這些指令。把這些未定義指令的句柄打印出來之后,我可以看到這些錯誤的指令所在位置的周邊內存的狀態。

在做了大量失敗的將更多的代碼排除出崩潰的嘗試之后,一個特殊的崩潰漸漸顯現。

崩潰之王

這個崩潰解開了所有秘密。當時我們用了一個雙核CPU。在這個特殊的崩潰里,首先CPU1在有效的模塊地址范圍內收到了一個未處理的內核錯誤,而此時它正在嘗試執行模塊代碼,這段代碼可能是一個沖突的頁表或是一個無效TLB。而正在處理這個錯誤時,CPU0在內核地址空間內收到了一個非法的指令陷阱。

以下是從修改后的未定義指令句柄中打印出來的數據(已轉為物理地址,括號中是出錯地址)

  1. undefined instruction: pc=0018abc4  
  2. 0018aba0: e7d031a2 e1b03003 1a00000e e2822008  
  3. 0018abb0: e1520001 3afffff9 e1a00001 e1a0f00e  
  4. 0018abc0: 0bd841e6 (ceb3401c) 00000004 00000001  
  5. 0018abd0: 0d066010 5439541b 49fa30e7 c0049ab8  
  6. 0018abe0: e2822001 eafffff1 e2630000 e0033000  
  7. 0018abf0: e16f3f13 e263301f e0820003 e1510000 

以下是內存域應該顯示的數據:

  1. 0018aba0: e7d031a2 e1b03003 1a00000e e2822008  
  2. 0018abb0: e1520001 3afffff9 e1a00001 e1a0f00e  
  3. 0018abc0: e3310000 (0afffffb) e212c007 0afffff3  
  4. 0018abd0: e7d031a2 e1b03c33 1a000002 e3822007  
  5. 0018abe0: e2822001 eafffff1 e2630000 e0033000  
  6. 0018abf0: e16f3f13 e263301f e0820003 e1510000 

確切地來說,只有一行緩存(中間那32byte)是有沖突的。一個同事指出沖突行中0x49fa30e7這個字是一個魔術cookie,它標記了系統中一個特殊環形緩沖區的入口。入口值的最后一個字永遠是一個時間戳,所以0x5439541b是上一個入口的時間戳。我決定去讀取這個環形緩沖的內容,但它現在掛在一個不可執行的KGDB提示那了。機器現在跟死了一樣。

冷啟動攻擊

為獲取環形緩沖區的數據,我進行了一次冷啟動攻擊。我為正在使用的主板搞到了一份概要拷貝,然后發現CPU的復位線上連了一塊不受歡迎的板子。我把它短路了,重置CPU而不妨礙DRAM的完整性。然后,我把Boot掛載在引導程序上。

在引導程序里,我dump到了問題中環形緩沖區的內容。謝天謝地,這個緩存總是在一個固定的物理地址上被定位到,所以找到它不是問題了。

通過分析錯誤時間戳周邊的環形緩沖區,我們發現了兩個老的cache line。這兩個cache line里有有效數據,但是在這兩個cache line里的時間戳卻是環形緩沖區里之前的時間。

導致CPU0上未定義指令的cache line與環形緩沖區里那兩個老cache line之一相當契合,但是這并不說明其他可能的地方也是這樣。我發現一個決定性的證據。假設,另一個消失的cache line是導致CPU1上未處理內核錯誤的元兇。

錯置的cache line

cache line應該被寫入0x0ebd2bc0(環形緩沖區里的cache line),但是事實上卻寫入了0x0018abc0(沖突的內核碼)。這些地址在我們CPU上屬于相同的緩存,它們的位[14:5]的值是相同的。不知為何它們有別名。

  1.                     bit   28   24   20   16   12    8    4    0  
  2.                            |    |    |    |    |    |    |    |  
  3. 0x0ebd2bc0 in binary is 0000 1110 1011 1101 0010 1011 1100 0000  
  4. 0x0018abc0 in binary is 0000 0000 0001 1000 1010 1011 1100 0000 

一個地址的低5位是cache line(32字節cache line)里的索引。后10位,即位[14:5],表示緩存集。剩下的17位,即位[31:15],用來表示緩存里當前存的是哪個cache line.

我向我們的CPU供應商提交了一個bug報告,之后他們制定了一個解決方案,并在下一版本CPU里修復了這個bug。

我期望聽到更多牛掰的此類故事,也期望我自己可以再攢點這樣的。

原文鏈接: Peter Lundgren   翻譯: 伯樂在線 - Elaine

譯文鏈接: http://blog.jobbole.com/68840/

責任編輯:林師授 來源: 伯樂在線
相關推薦

2013-11-08 09:22:17

程序員Bug調試

2019-01-21 15:17:59

Java微軟JCP

2017-11-27 11:26:35

程序員Bug調試

2020-01-07 14:44:09

GitHub代碼開發者

2020-02-11 16:25:47

JavaLinux字符串

2024-03-26 00:54:42

預測模型數據

2018-06-29 15:29:13

Tensorflow代碼谷歌

2023-06-12 11:53:08

數據活躍率流失率

2023-06-26 00:19:13

2016-12-13 10:57:22

Bug程序員錯誤報告

2018-04-10 08:59:37

2013-06-17 09:54:17

Python程序代碼

2023-09-04 11:32:28

數據診斷模型

2024-12-03 12:05:57

2021-09-08 18:35:31

系統調試日志

2025-02-06 11:52:44

2018-05-15 15:27:06

IT行業培訓語言

2016-03-25 09:59:38

性能調優LinuxMySQL

2024-04-17 08:21:44

2022-05-16 08:42:26

Pandasbug
點贊
收藏

51CTO技術棧公眾號

国产丝袜欧美中文另类| 国产偷激情在线| 欧美这里只有精品| 日本五码在线| 6080亚洲理论片在线观看| 黑人巨大精品欧美黑白配亚洲| 国产乱对白刺激视频不卡| 亚洲国产精品成人| 日韩成人在线资源| 国产v亚洲v天堂无码| 日韩免费高清在线| 国产精品久久久久一区二区三区厕所 | 97av中文字幕| 精品视频亚洲| 亚洲国产日韩欧美在线99| 日日噜噜噜夜夜爽爽狠狠| 亚洲永久网站| 国产成人中文字幕| 国产网友自拍视频导航网站在线观看| 视频一区视频二区中文字幕| 亚洲精品国偷自产在线99热 | 精品一区视频| 亚洲日穴在线视频| 欧美午夜精品久久久久久蜜| 欧美亚洲韩国| 亚洲午夜电影在线| 国产美女扒开尿口久久久| 欧美性爽视频| 国产精品久久久久久久裸模| 亚洲国产另类久久精品| a成人v在线| 在线观看日韩www视频免费| 少妇激情一区二区三区| 99精品热视频只有精品10| 久久久国产在线视频| 日本亚洲一区| 中文字幕亚洲一区二区va在线| 精品欧美一区二区在线观看| sm国产在线调教视频| 欧美天堂在线观看| 一级毛片视频在线| 欧美日韩精品免费观看视频| 成人福利影视| 久久久免费电影| 国产欧美日韩影院| 国产美女久久精品| 丝袜诱惑制服诱惑色一区在线观看| 天天做天天躁天天躁| 91麻豆swag| 国产在线一区二区视频| 日韩欧美一级二级| 欧美777四色影视在线| 国产午夜亚洲精品理论片色戒| 尤物国产精品| 亚洲国产导航| 国产伦视频一区二区三区| 牛牛影视一区二区三区免费看| 在线免费看av不卡| 动漫一区二区三区| 一区二区三区不卡在线观看 | 国产精品福利影院| 一道本在线免费视频| 亚洲国产日韩a在线播放| 国产精品秘入口| 亚洲国产精品久久| 日本一区二区中文字幕| 欧美精品一区二区三区蜜桃| 大地资源中文在线观看免费版| 玉足女爽爽91| 视频在线日韩| 欧美一级电影久久| 欧美 日韩 国产精品免费观看| 成人免费看片视频在线观看| 国产精品美女久久久久久| 在线视频不卡一区二区| 色婷婷综合在线| 久久亚洲道色| 少妇性饥渴无码a区免费| 91久久免费观看| 精品嫩草影院| 午夜精品电影在线观看| 国产精品免费久久| 无码日本精品xxxxxxxxx| 欧洲精品一区二区| 91成人免费| 免费福利片在线观看| 在线观看wwwxxxx| 在线看福利67194| 久久神马影院| mm131午夜| 亚洲国产精品嫩草影院| 高清福利在线观看| 日韩中文av在线| 伊人久久大香线| 四虎精品欧美一区二区免费| 一区二区三区四区视频精品免费| 996久久国产精品线观看| 三区精品视频| 欧美一区二区视频在线观看2022 | 白白在线精品| 午夜久久资源| 在线免费av一区| 国产精品美女久久久久久不卡| 久久国产精品99久久久久久丝袜| 国产综合一区二区| 国产av无码专区亚洲精品| 色综合欧美在线| 天天综合91| 欧美黄色性生活| 亚洲欧洲一区二区三区在线观看| 欧美va久久久噜噜噜久久| 亚洲图片欧美激情| 另类图片第一页| 中文字幕视频在线观看| 国产精品伦子伦免费视频| 欧美成人一区二区| 国产成人在线色| 日韩午夜激情| 四虎亚洲成人| 亚洲成人自拍| 99r国产精品视频| 久色成人在线| 性色av香蕉一区二区| 不卡一区中文字幕| 一区二区三区日本久久久 | 91视频九色网站| 久久久伊人日本| 国产精品美女久久久久久久| 精品一区二区男人吃奶| 91中文在线| 国产精品一二三区视频| 头脑特工队2免费完整版在线观看| 免费一区二区三区在线观看| 成人一区二区av| 91亚洲精品久久久| 在线观看一区日韩| 亚洲国产精品久久久久秋霞影院| 国产精品一区2区| 久久99久国产精品黄毛片色诱| 欧美aa国产视频| 亚洲桃色综合影院| 97久久亚洲| 国语精品视频| 蜜桃一区av| 成人一级福利| 日本高清在线观看| 日本一本在线免费福利| 色婷婷av在线| 成人美女大片| 久久99成人| 欧美午夜三级| 欧美理伦片在线播放| 婷婷精品在线| 国产一区日韩一区| 韩日在线一区| 亚洲影院在线| 97精品电影院| 色视频成人在线观看免| 日韩无一区二区| 精品国产一区av| 国产精品美女久久| 黄色免费高清视频| 国产网红在线| 182在线视频观看| 久久电影天堂| 国产日产精品_国产精品毛片| 亚洲a一区二区三区| 久久99热国产| 亚洲女爱视频在线| 日韩精品一区国产麻豆| 欧美精品九九久久| 亚洲一区二区三区色| 成人au免费视频影院| 久久精品午夜福利| 在线中文字幕观看| 最新中文字幕在线播放| 久久久精品国产**网站| 欧美视频二区| 亚洲一区日韩精品中文字幕| 亚洲欧美日韩成人| 欧美一区二区三区四区在线观看地址 | 黄色的视频在线观看| 女人黄色免费在线观看| 日韩在线短视频| 国产精品二区不卡| 国产成人精品1024| 欧美日韩一级二级| 97国产精品人人爽人人做| 亚洲欧美国产精品桃花| 国产wwwxx| 日韩欧国产精品一区综合无码| 日韩高清欧美| 国产亚洲成aⅴ人片在线观看| 欧美日韩国产免费| 欧美日韩高清区| 久久影院资源网| 2019中文在线观看| av久久久久久| 一级毛片视频在线| 国产欧美日韩影院|