尋找AMD ftpm在Linux下導(dǎo)致卡頓的原因
速通版:
????AMD的ftpm硬件做的很shi,然后版本>=6.1的內(nèi)核會觸發(fā)硬件bug。已經(jīng)把這個bug上報了,詳見:https://bugzilla.kernel.org/show_bug.cgi?id=216989
????SO,?AMD NO! (這都zen3+架構(gòu)了,一個屁大的ftpm模塊還做不好,屬實樂了)
詳細(xì)版:
????起因:各位Arch用戶應(yīng)該都已經(jīng)在年初升級了6.1版本的內(nèi)核,本來應(yīng)該是很正常的升級,但是在升級后的第一次使用中就出現(xiàn)了隨機卡頓。具體表現(xiàn)就是:在使用電腦1-2小時(或更長時間后),就有機率出現(xiàn)1-2秒的卡頓,伴隨著嚴(yán)重掉幀和聲音斷續(xù)。
? ? 然后我第一時間想到的就是之前AMD被爆出的ftpm缺陷,站內(nèi)也有視頻(雖然大部分都是硬蹭流量的)。
????所以自然地,我想去BIOS里面關(guān)掉ftpm選項,結(jié)果華碩的新筆記本都沒這個選項。接著就是一些邪道操作,用UniversalAMDFormBrowser這個工具,里面確實是有ftpm選項,但更改時候提示覆寫失敗,個人猜測應(yīng)該是做了保護。
????嘗試降級內(nèi)核到6.0.12,然后就不會出現(xiàn)卡頓問題了.......
????討論:結(jié)合兩個版本內(nèi)核的表現(xiàn),我在ASUS-Linux的Discord討論群里面開了一個帖子

????啪的一下很快啊,馬上就有人回復(fù)了

????所以我馬上確定,又是AMD那破ftpm模塊出問題了,在另一個論壇上也有人反映聯(lián)想的機器也會出現(xiàn)這個問題。
????然而,事情到這里也就告一段落了。因為大家都是小白,對內(nèi)核排障沒有任何經(jīng)驗,之后的討論都是各種奇技淫巧,但是對解決問題沒有任何幫助......
????調(diào)查:事情在這個月初出現(xiàn)了轉(zhuǎn)機,先是Arch Linux的Bug追蹤器有人報告了這個問題,緊接著在內(nèi)核的Bugzila也出現(xiàn)了這個報告。
????Arch報告:https://bugs.archlinux.org/task/77340

????Kernel Bugzila:https://bugzilla.kernel.org/show_bug.cgi?id=216989

????在Bugzila的一個回復(fù)里面,有開發(fā)者提到了讓我們用git二分法(git bisect)查找。
????算是情理之中的事情,畢竟linux源代碼都給你了,自己排查一下故障也不是什么大事(確信)。
????已知6.0.12的內(nèi)核工作正常,而6.1內(nèi)核出現(xiàn)故障,所以中間一定有一個代碼更改引發(fā)了問題,現(xiàn)在要做的,就是在6.0.12和6.1的提交中間取一個中點,編譯測試。
????如果中間測試不通過,則說明錯誤是在更早的提交中引起的,此時取前半段的中點測試,反之亦然。如此反復(fù),最終一定能找到引發(fā)問題的那個提交。
????經(jīng)過3天的測試,總算是找到了引發(fā)問題的提交:
????b006c439d58db625318bf2207feabf847510a8a6

????簡單來說,就是這個提交啟用了一個內(nèi)核線程,就是硬件隨機數(shù)發(fā)生器(hwrng,一般集成在tpm中)。這本來沒啥大不了的,但關(guān)鍵在于,當(dāng)這個線程調(diào)用tpm模塊達到一定次數(shù)的時候,就會引發(fā)卡頓。
????所以我嘗試在最新的6.2-rc6內(nèi)核中注釋掉這段代碼

????問題解決。
????
????報告:下一步就是向上報告問題,討論解決方案。這個在bugzila里可以看到。現(xiàn)在正在等待提交者和審查者回復(fù)。
????結(jié)束了?:并沒有,在二分法查找錯誤的過程中,我使用了一個rust編寫的小工具,來檢測超時。實驗中我發(fā)現(xiàn)每次調(diào)用/dev/hwrng時,都有一定概率引發(fā)超時,當(dāng)超時次數(shù)達到一定數(shù)量后,就能100%引起卡頓(具體方法是 sudo cat /dev/hwrng > /dev/null)。從5.15.91-lts到最新的6.2-rc6都能復(fù)現(xiàn)。
????那這一切都說明一點:這個內(nèi)核線程只是表象,反倒是因為內(nèi)核主動調(diào)用hwrng才讓我們發(fā)現(xiàn)了硬件問題。
????所以很明顯,正如一位RNG(隨機數(shù)生成器)開發(fā)者回復(fù)的那樣:“這個提交沒毛病,是TPM硬件的鍋”。
????這下是真的結(jié)束了:下下步就是先和提交者討論,嘗試用軟件手段規(guī)避掉錯誤。然后再去和AMD工程師對線。
????WDNMD AMD,一個破FTPM都做不好(惱
感謝閱讀,請多多指點
更新一下:amd工程師已經(jīng)回復(fù)并且給出了一個補丁,但是說還需要進一步確認(rèn)才能提交patch。希望能在6.2正式發(fā)布之前見到。
再更新一下:
????因為內(nèi)核開發(fā)人員都很忙,加上reviwer對補丁的內(nèi)容有疑惑,所以遺憾沒能抓住6.2的發(fā)布窗口。
????不過總算是要進主線了:https://lore.kernel.org/lkml/20230220180729.23862-1-mario.limonciello@amd.com/T/

