На прошлой неделе появилось много сообщений об ошибке AMD Bypass Translation Buffer (TLB) и ее влиянии на четырехъядерные чипы Opteron. По сообщениям зарубежных СМИ, компания AMD готовит ядро для известной 64-битной системы Red Hat Enterprise Linux. как обновление 4. Патчи. В отличие от исправлений BIOS (базовой системы ввода-вывода) и обновлений микрокода AMD, которые, как сообщается, снижают производительность на 10-20%, исправления для Linux, как сообщается, имеют потерю производительности менее 1%. Однако мы также узнали, что пользователям придется подписать соглашение о неразглашении, чтобы получить патч.
После подтверждения ситуации AMD опубликовала исходный код патча в списке рассылки x86-64.org. Однако этот код основан на текущей ситуации и не будет изменен, с еще одним предупреждением о том, что он не полностью подходит для основных систем:
Из-за мощного интрузивного характера этого патча и очень небольшого числа затронутых пользователей (вы узнаете об этом, если затронута часть вашей системы), мы не рекомендуем использовать этот патч в обычных системах Linux. Этот патч не предназначен для обычных пользователей и не является продуктом Linux для продажи! Этот патч прошел минимальное функциональное тестирование. Каждый пользователь должен оценить его перед использованием, чтобы убедиться в его соответствии необходимым стандартам качества.
В ранее опубликованном сообщении в том же списке рассылки сотрудница AMD Элси Уолиг также предупредила, что патч «не рекомендуется для продуктов верхнего уровня». Уолиг упомянул, что патч был разработан группой AMD по исследованию операционных систем для Linux 2.6.23.8, и предоставил подробное описание ошибки:
Описание ошибки 298 следующее: «Операция процессора может быть не атомарной, изменяя доступные или грязные байты в записи таблицы перевода страниц с адреса 0b на 1b в кэше второго уровня. В течение небольшого интервала времени другие операции кэша может привести к установке недействительных записей таблицы перевода страниц в кэш L3 до того, как измененные реплицированные данные будут возвращены в кэш L2. Кроме того, если строка кэша обнаружена в течение этого интервала, процессор не будет выполнять несвязанные операции кэша при доступе или. «грязные» байты и, возможно, ошибочные данные. Система может сообщить об ошибке протокола кэша уровня 3 посредством события обнаружения компьютера. В этом случае состояние MC4 (MSR 0000_0410) будет B2000000_000B0C0F или BA000000_000B0C0F. регистр адреса MC4 (MSR 0000_0412) будет равен 26h».
Уолиг описал, как работает патч для Linux, который также обходит рабочую область BIOS и эмулирует «доступные и грязные байты», чтобы предотвратить создание заголовков файлов ошибочными данными:
Решение патча ядра зависит от основной причины проблемы с вытеснением кэша L2. Проблема проявляется только тогда, когда TLB необходимо установить бит A или D в записи таблицы страниц. Если TLB никогда не требуется устанавливать бит A или D, ошибка не возникнет. Эмулируя биты A и D с использованием доступных в данный момент битов для записи, патч гарантирует, что фактические биты A и D часто будут предустановлены. Это достигается путем принудительного создания страницы с ошибкой при первом доступе к странице, для которой не установлен бит эмуляции A, и когда впервые осуществляется доступ к странице для записи, для которой не установлен бит эмуляции D. Имитированные биты A и D хранятся в битовых регистрах, которые обычно доступны операционной системе в виде записей таблицы страниц.
AMD прекратила выпуск патча более тактично, чем первоначально ожидалось, но компания не выдала «пропуск» всем пользователям Linux, чтобы избежать потери производительности, вызванной исправлением BIOS.