Как я программно отключаю аппаратную упреждающую выборку?

Это реализовано в управляемом Google коде. По сути, это то же самое, что push-подписка Pub / Sub, в которой ответ 200 получает сообщение ( https://cloud.google.com/pubsub/docs/push#receive_push ). Это автоматическое подтверждение происходит после успешного завершения вашей функции.

45
задан Cœur 4 April 2017 в 12:05
поделиться

2 ответа

Из справочника Intel:
Эта инструкция должна быть выполнена на уровне привилегий 0 или в режиме реального адреса; в противном случае будет сгенерировано исключение общей защиты #GP (0). Указание зарезервированного или не реализованного адреса MSR в ECX также вызовет общее исключение защиты.

...
Инструкция CPUID должна использоваться, чтобы определить, поддерживаются ли MSR (EDX [5] = 1) перед использованием этой инструкции.

Итак, ваша ошибка может быть связана с процессором, который не поддерживает MSR или использует неправильный адрес MSR.

Существует множество примеров использования MSR в источнике ядра:

В исходном коде ядра для одного процессора он демонстрирует отключение предварительной выборки для Xeon в arch / i386 / kernel / cpu / intel.c в функции:

static void __cpuinit Intel_errata_workarounds (struct cpuinfo_x86 * c)

Аргументами функции rdmsr являются номер msr, указатель на старшее 32-битное слово и указатель на старшее 32-битное слово.
Аргументами функции wrmsr являются номер msr, нижнее значение 32-битного слова и старшее значение 32-битного слова.

многоядерные или smp-системы должны передавать структуру процессора в качестве первого аргумента:
void rdmsr_on_cpu (без знака в ЦП, u32 msr_no, u32 * l, u32 * h);
void wrmsr_on_cpu (ЦП без знака, u32 msr_no, u32 l, u32 h);

11
ответ дан 26 November 2019 в 21:30
поделиться

Вы можете включить или отключить аппаратные средства предварительной выборки, используя msr-tools http://www.kernel.org/pub/linux/utils/cpu/msr-tools/ .

Следующее включает аппаратный предварительный выбор (путем сброса бита 9):

[root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2089 
[root@... msr-tools-1.2]# ./rdmsr 0x1a0 
60628e2089

Следующее отключает аппаратный предварительный выбор (путем включения бита 9):

[root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2289 
[root@... msr-tools-1.2]# ./rdmsr 0x1a0 
60628e2289

Программно вы можете сделать это как root, открыв / dev / cpu / / msr и использование pwrite для записи в «файл» msr со смещением 0x1a0 .

26
ответ дан 26 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: