Использование инструкции WBINVD

Я пытаюсь использовать инструкцию WBINV в Linux для очистки кеша L1 процессора.

Следующая программа компилируется, но при запуске выдает ошибку сегментации.

int main() {asm ("wbinvd"); return 1;}

Я использую gcc 4.4.3 и запускаю ядро ​​Linux 2.6.32-33 на моем компьютере x86.

Информация о процессоре: Intel (R) Core (TM) 2 Duo CPU T5270 @ 1,40 ГГц

Я построил программу следующим образом:

$ gcc

$ ./a.out

Ошибка сегментации

Может кто-нибудь сказать мне, что я делаю не так? Как мне заставить это работать?

P.S: Я провожу несколько тестов производительности и хочу убедиться, что предыдущее содержимое кеша процессора не влияет на результаты.


person roelf    schedule 19.07.2011    source источник
comment
Почему вы хотите очистить кеш процессора? Как сказано в ответе, вы не можете использовать эту инструкцию, но если вы сообщите нам, какова ваша цель, возможно, мы сможем предложить другой способ ее достижения.   -  person jalf    schedule 19.07.2011
comment
Я провожу несколько тестов производительности и хочу убедиться, что предыдущее содержимое кэша процессора не влияет на результаты.   -  person roelf    schedule 19.07.2011
comment
Обычно полезнее идти в обратном направлении. Выполните тест несколько раз, чтобы гарантировать, что данные уже находятся в кеше. В любом случае это наиболее реалистичный сценарий, поэтому его имеет смысл протестировать. Искусственная очистка кеша не даст вам более точных результатов, это просто приведет к тому, что ваши тесты будут больше различаться в зависимости от оборудования.   -  person jalf    schedule 19.07.2011
comment
Возможный дубликат stackoverflow.com/questions/1756825/cpu-cache-flush   -  person Gunther Piez    schedule 19.07.2011
comment
по крайней мере, в Ubuntu 12.04, запуск вашей программы с sudo (т.е. от имени пользователя root) не приводит к нарушению сегментации (но мне не ясно, действительно ли очищен кеш ...)   -  person Andre Holzner    schedule 09.09.2013


Ответы (2)


Цитата из Объединенные тома 2A и 2B Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32: набор инструкций Справка, Аризона:

Инструкция WBINVD - это привилегированная инструкция. Когда процессор работает в защищенном режиме, CPL программы или процедуры должен быть 0 для выполнения этой инструкции.

Другими словами, его может выполнять только код режима ядра.

РЕДАКТИРОВАТЬ: Предыдущее обсуждение SO по очистке кешей:

C программно очищать кеш L2 на машинах Linux

Как выполнить очистку кэша ЦП в Windows x86?

Как очистить кеш L1 и L2 ЦП

https://stackoverflow.com/questions/3443130/how-to-clear-cpu-l1-and-l2-cache

person user786653    schedule 19.07.2011
comment
Спасибо за это! Есть ли какие-нибудь альтернативные инструкции, которые я могу использовать в пользовательском пространстве для очистки кеша процессора? - person roelf; 19.07.2011
comment
@roelf: добавлено несколько ссылок на предыдущие обсуждения SO. Также вы, конечно, можете написать драйвер устройства, который использует WBINVD для очистки кешей за вас. - person user786653; 19.07.2011
comment
@roelf: вообще говоря, какой смысл создавать привилегированную инструкцию, которая делает то же самое, что и непривилегированная? Причина, по которой эта инструкция является привилегированной, заключается в том, что вы не хотите, чтобы пользовательский код выполнял ее. ;) - person jalf; 19.07.2011

Как написал user786653, wbinvd это привилегированная инструкция, которая дает сбой в коде, отличном от ядра.

Вам следует избегать использования wbinvd для тестирования, потому что он вызывает все виды циклов блокировки шины, сериализацию конвейера и добавляет накладные расходы от ядра к пользовательскому пространству и т. Д., Что, скорее всего, не происходит в вашей реальной программе.

Следовательно, ваше измерение не будет более точным, оно будет содержать всевозможные артефакты. Чтение блока данных размером с кэш L2 даст лучшие результаты.

Вы можете прочитать исходный код в разделе Тестовые программы для измерения тактовых циклов и мониторинга производительности, чтобы узнать, как другие стали полезными. Результаты.

person Gunther Piez    schedule 19.07.2011