Использование инструкции WBINVD - PullRequest
7 голосов
/ 19 июля 2011

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

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

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

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

Информация о процессоре: Процессор Intel® Core ™ 2 Duo T5270 @ 1,40 ГГц

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

$ gcc

$ ./a.out

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

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

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

Ответы [ 2 ]

13 голосов
/ 19 июля 2011

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

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

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

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

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

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

Как очистить кэш CPU L1 и L2

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

5 голосов
/ 19 июля 2011

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

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

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

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

...