Сегодня мы предлагаем вниманию читателя отчет о дизайнеутилиты CPUID методами визуального программирования в картинках. Инструменты: Free Pascal и среда разработки Lazarus.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Плюсы и минусы визуального программирования
15 Фев 2016
Илья Манусов
Решение задачи
Утилита будет выводить экран дампа, визуализирующий результаты всех детектированных функций
и подфункций CPUID в цифровом виде, а также экраны детальной информации, ассоциированные с
конкретными функциями. Текущая версия утилиты поддерживает только процесс
оры Intel.
Рис 2
Процесс разработки и отладки приложения в среде Lazarus, ОС Linux
Изначально, приложение создано в среде Linux.
Рис 3
Тот же проект загружен в среде Lazarus, ОС Windows
Изменения, необходимые для адаптации под Windows
, коснулись исключительно ассемблерного
модуля
libcpuid.obj
, и оказались безболезненными для объектов пользовательского интерфейса.
Рис 4
Закладка CPUID dump
Главное окно дампа. Результаты всех функций и подфункций CPUID. В
инженерной версии 0.03
не
поддерживается только
Virtual
CPUID
Рис 5
Функция 0 инструкции CPUID
Стандартная функция 0 возвращает максимальный номер поддерживаемой стандартной функции и
текстовую строку Vendor String.
Рис 6
Функция 1 инструкции CPUID
Стандартная функция 1 возвращает сигнатуру процессора: Type,
Family, Model, Stepping, некоторые
параметры мультипроцессорной топологии, базовый набор возможностей CPU Standard Features
Bitmap.
Рис 7
Функция 2 инструкции CPUID
Стандартная функция 2 возвращает набор дескрипторов, большинство из которых характеризуе
подсистему TLB (Translation Lookaside Buffer), реализующую кэширование элементов таблиц страниц
при трансляции виртуального адреса в физический.
Рис 8
Функция 3 инструкции CPUID
Стандартная функция 3 должна была бы вернуть серийный номер процессора Pr
ocessor Serial Number
(PSN). По ряду причин, компания Intel отказалась от поддержки данной функции, поэтому видим
пустые поля.
Рис 9
Функция 4
инструкции CPUID
Стандартная функция 4 возвращает информацию Deterministic Cache Parameters: размер,
ассоциативность, разделение на банки, метод инициализации для всех видов и уровней кэш
памяти.
Рис 10
Функция 5
инструкции CPUID
Стандартная функция 5 позволяет определить набор Power
Management состояний, реализуемый в
рамках инструкций MONITOR, MWAIT.
Замена традиционного состояния останова процессора,
набором состояний, дифференцированных по потребляемой мощности и латентности возврата в
рабочий режим, позволяет оптимизировать энергопотребление платформ.
Рис 11
Функция 6
инструкции CPUID
Стандартна
я функция 6 определяет параметры термоконтроля и тактирования процессора. Здесь же
индикатор поддержки технологии Intel Turbo Boost.
Рис 12
Функция 7
инструкции CPUID
Стандартная функция 7 возвращает информацию Additional Features Bitmap
. Сюда входят технологии
обеспечения безопасности, механизмы транзакционной памяти, инструкции манипуляции с битами,
векторные расширения AVX2 и AVX512 и ряд дополнительных возможностей. Как видим, компания
Intel собрала достаточно разные технологии в един
ом списке, действуя по признаку даты появления
данных технологий и несколько пожертвовав систематизацией.
Рис 13
Функция 9
инструкции CPUID
Стандартная функция 9 позволяет прочитать копию состояния одного из системных регистров,
управляющих технологией
DCA (Direct Cache Access). Напомним, эта технология обеспечивает доступ
bus
master устройств к кэш
памяти процессора. А альтернативный механизм чтения с помощью
CPUID и копия этого системного регистра потребовались потому, что основной механизм (инструкция
RDMSR) доступен только на уровне привилегий Ring0.
Рис 14
Функция 0Ah инструкции CPUID
Стандартная функция 0Ah декларирует возможности, связанные с мониторингом различных событий,
влияющих на производительность, например, обращения к кэш
памяти, кэш
омахи, ошибки
предсказания условных переходов и т.п. Отметим, что в отличие от большинства функций, биты
списка обрабатываемых событий инверсные: 0 означает наличие поддержки, 1
отсутствие.
Рис 15
Функция 0Bh инструкции CPUID
Стандартная функция 0Bh декларирует мультипроцессорную топологию (для ядер и потоков одного
процессора). Отметим, что параметр Current x2APIC ID может различаться от запуска к запуску, так
как прочитанный идентификатор зависит от того, на каком процессоре,
ядре и потоке ОС запустит
наше приложение.
Рис 16
Функция 0Dh инструкции CPUID
Стандартная функция 0Dh декларирует поля процессорного контекста, подлежащие сохранению и
восстановлению при переключении задач. Напомним, аппаратная поддержка переключения
контекста реализована в современных процессорах инструкциями XSAVE и XRSTOR.
Рис 17
Функция 80000000h инструкции CPUID
Расширенная функция 80000000h возвращает максимальный номер поддерживаемой расширенной
функции.
Рис 18
Функция 80000001h инструкции
CPUID
Расширенная функция 80000001h возвращает битовую карту CPU Extended Features Bitmap.
Большинство битов зарезервировано, поскольку данная функция изначально разрабатывалась для
процессоров AMD. Также заметим, что для некоторых процессоров, информация
CPUID,
возвращаемая в 64
битном режиме и 32
битном режиме совместимости, различается. Это относится,
например к поддержке инструкции системного вызова SYSCALL.
Рис 19
Функция 80000002h инструкции CPUID
Расширенные функции 80000002h, 80000003h, 80000004
h возвращают имя процессора в виде
текстовой строки, что дает возможность приложению, «не узнавшему» конкретный процессор, тем не
менее корректно визуализировать его модель.
Рис 20
Функция 80000008h инструкции CPUID
Расширенная функция 80000008h позволя
ет определить разрядность физического и виртуального
адреса. В данном примере, 39 и 48 бит обеспечивают размеры адресных пространств, 512 гигабайт и
256 терабайт соответственно.
Резюме
Итак, в течение примерно одного рабочего дня, удалось создать
пользовательский интерфейс
приложения и небольшой ассемблерный модуль, предназначенный для чтения информации из
процессора.
Интерфейс построен в виде системы таблиц
вкладок, содержащих детальную информацию,
систематизированную по функциям CPUID. Приложение
, изначально написанное в среде Linux x64, за
считанные минуты портируется под Windows x64, требуется небольшая
корректировка
ассемблерного модуля
. Возможности среды разработки Lazarus позволяют запланировать
создание
Android
версии для x86
. Адаптация для ARM
архитектуры, будет означать редизайн
утилиты, таков наш частный случай, когда в центре исследования
системные объекты Intel x86.
И наконец, ложка дегтя. Размер EXE
модуля около 3 мегабайт. Для сравнения, ассемблерная
реализация аналогичной функциональности займет менее 10 килобайт. Код Java
класса также весьма
компактен, хотя не самодостаточен и потребует загрузки в память виртуальн
ой машины Java.
Теги:
Intel

Приложенные файлы

  • pdf 7707050
    Размер файла: 1 MB Загрузок: 1

Добавить комментарий