Linux內核補丁AMD旁路轉換緩沖(TLB)錯誤 |
發布時間: 2012/8/11 9:43:40 |
關于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地址的被訪問過的或臟字節。在一個細小的時間間隔 內,在修改過的復制數據返回二級緩存之前,其他緩存操作可能引起失效的頁面轉換表項目被安裝在三級緩存中。另外,如果在該時間間隔期間檢測到該緩存行,處 理器不會對該被訪問過的或臟字節,以及可能發生錯誤的數據進行無關的緩存操作。系統可能會通過一次機器檢測事件,報告發生了一次三級緩存協議錯誤。在這種 情況下,MC4狀態寄存器(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修復程序帶來的性能損失。 本文出自:億恩科技【www.sunshares.net】 |