Это реализовано в управляемом Google коде. По сути, это то же самое, что push-подписка Pub / Sub, в которой ответ 200 получает сообщение ( https://cloud.google.com/pubsub/docs/push#receive_push ). Это автоматическое подтверждение происходит после успешного завершения вашей функции.
Из справочника 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);
Вы можете включить или отключить аппаратные средства предварительной выборки, используя 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 /
и
использование pwrite для записи в «файл» msr со смещением 0x1a0
.