關於AMD的旁路轉換緩衝(TLB)錯誤及其對四核皓龍晶片的影響上週已經有了很多報道,據國外媒體報道,AMD在為64位Red Hat企業版Linux即Upgrade 4準備一個內核補丁程式。和AMD的BIOS(基本輸入輸出系統)修復和微程式碼更新不同,據悉這些處理過程降低了10-20%的效能,據說Linux修補程式對效能的損耗低於1%。然而,我們也了解到,用戶為了獲得該補丁程式必須簽署一份保密協議。
情況被證實之後,AMD在x86-64.org郵件清單上公佈了該補丁程式的原始碼。然而,這些程式碼以現狀為基準,不再進行修改,同時再次警告,提示它不完全適用於主流系統:
由於此補丁程式具有強大的入侵特性,而且受到影響的用戶數非常少(如果你的部分系統受到影響,就會了解這一點),我們不推薦在常規的Linux系統上使用此補丁程式。此補丁不是為主流用戶而準備的,也不是用於銷售的Linux產品!此補丁只接受過最小限度的功能性測試。每位使用者在使用前必須對其進行評估,以確保其能符合必要的品質標準。
在同一郵件清單上的一篇先前發表的文章中,AMD的員工Elsie Wahlig也提出警告,該補丁程式"不推薦應用於上游產品"。 Wahlig提到,該修補程式是由AMD的作業系統研究中心小組為Linux 2.6.23.8而開發的,並提供了一份詳細的錯誤描述:
錯誤298的描述如下:"處理器操作可能不是原子性的,在二級快取中改變頁面轉換表項目中從0b到1b位址的被訪問過的或髒字節。在一個細小的時間間隔內,在修改過的複製資料返回二級快取之前,其他快取操作可能引起失效的頁面轉換表項目被安裝在三級快取中。對該被存取過的或髒字節,以及可能發生錯誤的資料進行無關的快取操作。暫存器(MSR 0000_0410)的內容將會是B2000000_000B0C0F或BA000000_000B0C0F。 MC4位址暫存器(MSR 0000_0412)的內容將會是26h。
Wahlig對Linux補丁程式的工作過程作了描述,該補丁程式也繞過了BIOS工作區並模擬"被訪問過的和髒字節",以阻止錯誤資料建立文件頭:
內核補丁解決方案取決於二級快取遷出問題的根本原因。只有當TLB需要在一個頁表項目中設定一個A或D位元時,問題才會暴露。如果TLB永遠不需要設定一個A 或D位,錯誤則不會出現。透過使用目前的可寫位元對A和D位元進行仿真,補丁程式將確保經常對實際的A和D位元進行預設。當首次訪問一個未對仿真A位元進行設定的頁面時,並且當首次寫入訪問一個未對仿真D位元進行設定的可寫頁面時,透過對一個錯誤頁面進行強製而完成該處理。仿真A和D位元儲存在位元暫存器中,作業系統通常可以在頁表項目中取得它。
AMD以比最初預期更為委婉的說法,停止發行該補丁程序,但公司並沒有給所有Linux用戶發放"通行證",用來避免BIOS修復程序帶來的性能損失。