지난주 AMD의 TLB(Bypass Translation Buffer) 버그와 이것이 쿼드코어 Opteron 칩에 미치는 영향에 대한 보도가 많이 있었습니다. 외신 보도에 따르면 AMD는 알려진 64비트 Red Hat Enterprise Linux용 커널을 준비하고 있습니다. 업그레이드 4. 패치. 성능이 10~20% 정도 감소하는 것으로 알려진 AMD의 BIOS(Basic 입출력 시스템) 수정 사항과 마이크로코드 업데이트와 달리, 리눅스 패치는 1% 미만의 성능 손실이 있는 것으로 전해진다. 그러나 패치를 받으려면 사용자가 비공개 계약에 서명해야 한다는 점도 알게 되었습니다.
상황이 확인된 후 AMD는 x86-64.org 메일링 리스트에 패치의 소스 코드를 공개했습니다. 그러나 이 코드는 현재 상황을 기반으로 하며 수정되지 않을 것이며 주류 시스템에 완전히 적합하지 않다는 또 다른 경고가 있습니다.
이 패치의 강력한 침입 특성과 영향을 받는 사용자의 수가 매우 적기 때문에(시스템 일부가 영향을 받는 경우 이 사실을 알 수 있음) 일반 Linux 시스템에서는 이 패치를 사용하지 않는 것이 좋습니다. 이 패치는 일반 사용자를 위한 것이 아니며 판매용 Linux 제품도 아닙니다! 이 패치는 최소한의 기능 테스트를 거쳤습니다. 각 사용자는 사용하기 전에 제품을 평가하여 필요한 품질 표준을 충족하는지 확인해야 합니다.
동일한 메일링 리스트에 이전에 게시된 게시물에서 AMD 직원 Elsie Wahlig도 이 패치가 "업스트림 제품에는 권장되지 않는다"고 경고했습니다. Wahlig는 이 패치가 AMD의 운영 체제 연구 센터 그룹에서 Linux 2.6.23.8용으로 개발되었다고 언급하고 오류에 대한 자세한 설명을 제공했습니다.
오류 298에 대한 설명은 다음과 같습니다. "프로세서 작업이 원자적이지 않을 수 있으며 페이지 변환 테이블 항목의 액세스된 바이트 또는 더티 바이트를 두 번째 수준 캐시의 주소 0b에서 1b로 변경합니다. 작은 시간 간격 내에 다른 캐시 작업 수정된 복제 데이터가 L2 캐시에 반환되기 전에 잘못된 페이지 변환 테이블 항목이 L3 캐시에 설치될 수 있습니다. 또한 이 간격 동안 캐시 라인이 감지되면 프로세서는 액세스되거나 관련되지 않은 캐시 작업을 수행하지 않습니다. 더티 바이트 및 잘못된 데이터가 있을 수 있습니다. 이 경우 MC4 상태는 B2000000_000B0C0F 또는 BA000000_000B0C0F입니다. MC4 주소 레지스터(MSR 0000_0412)는 26h입니다.
Wahlig는 BIOS 작업 공간을 우회하고 "액세스된 바이트 및 더티 바이트"를 에뮬레이트하여 잘못된 데이터가 파일 헤더를 작성하는 것을 방지하는 Linux 패치의 작동 방식을 설명했습니다.
커널 패치 솔루션은 L2 캐시 제거 문제의 근본 원인에 따라 다릅니다. 문제는 TLB가 페이지 테이블 항목에 A 또는 D 비트를 설정해야 할 때만 드러납니다. TLB가 A 또는 D 비트를 설정할 필요가 없으면 오류가 발생하지 않습니다. 현재 쓰기 가능한 비트를 사용하여 A 및 D 비트를 에뮬레이션함으로써 패치는 실제 A 및 D 비트가 종종 사전 설정되도록 보장합니다. 이는 에뮬레이션 A 비트가 설정되지 않은 페이지에 처음 액세스할 때와 에뮬레이션 D 비트가 설정되지 않은 쓰기 가능한 페이지에 처음으로 액세스할 때 오류 페이지를 강제 실행함으로써 수행됩니다. 시뮬레이션된 A 및 D 비트는 일반적으로 운영 체제에서 페이지 테이블 항목으로 사용할 수 있는 비트 레지스터에 저장됩니다.
AMD는 당초 예상보다 좀 더 재치 있는 성명으로 패치 발행을 중단했지만, BIOS 수정으로 인한 성능 손실을 피하기 위해 모든 Linux 사용자에게 "패스"를 발행하지 않았습니다.