Экстремальный разгон процессора


Как мы будем действовать - часть 3


Драйвер обеспечивает загрузку необходимого кода события в соответствующий MSR-регистр (PerfEvtSel0 или PerfEvtSel1) и запускает счетчик, предварительно "разблокировав" команду RDPMC.

Поскольку, RDPMC способна читать только один счетчик (а нам необходимо отслеживать по меньшей мере два события — промахи кэш памяти кода и данных), драйвер должен обеспечивать IOCTL-интерфейс с прикладным приложением, позволяя ему переключаться с одного счетчика на другой.

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

DriverInitialize:          ; // процедура инициализации драйвера

       …

       MOV    EAX, CR4

       OR     EAX, 100h ; // разрешаем доступ к RDPMC с прикладного уровня

       MOV    CR4, EAX

       …

Листинг 3 фрагмент процедуру инициализации драйвера

Следующий код обеспечивает взаимодействие драйвера с прикладной программой через API-функцию DeviceIOControl, передающий в IOCTL-коде номер события, за которым необходимо вести мониторинг. По соображениям наглядности, здесь используется всего лишь один счетчик производительности, управляемый MSR-регистром PerfEvtSel0.

IRP_MJ_DEVICE_CONTROL:                   ; // процедура обработки IOCTL-запросов

       ; // настраиваем регистр perfevtsel0 для мониторинга нужных событий

       XOR    EDX, EDX

       MOV    EAX, pisl->Parameters.DeviceIoControl.IoControlCode ; //номер события

       TEST   EAX, EAX             ; // если код события равен нулю

       JZ     wrt                  ; // то вырубаем счетчик

      

       OR     EAX, 10000h          ; // делаем счетчик доступным

                                  ; // с прикладного уровня

       OR     EAX, 400000h         ; // пускаем счетчик

wrt:

       MOV ECX,0x186              ; // выбираем MSR-регистр PERFEVTSEL0

       WRMSR

Листинг 4 фрагмент драйвера, отвечающий за выбор нужного события




Начало  Назад  Вперед



Книжный магазин