Архитектурный мониторинг производительности процессоров Intel
- Архитектурный мониторинг, общая информация
- Архитектурный мониторинг v1
- Архитектурный мониторинг v1, свойства
- Архитектурный мониторинг v2
- Архитектурный мониторинг v2, свойства
- Предопределенные архитектурные события
Архитектурный монитоpинг
Подлежащие рассмотрению события считаются архитектурными, когда они имеют одинаковое поведение на разных микроархитектурах. Архитектурный мониторинг событий был введен с процессоров Intel Core Solo и Duo. Он позволяет программно конфигурировать параметры рассматриваемых событий и обеспечивает некоторые возможности по обработке результатов их возникновения.
CPUID.0AH содержит ID версии доступных средств архитектурного мониторинга. Intel Core Solo и Duo поддерживают базовый уровень функциональности, которому соответствует ID версии, равный 1. Процессоры микроархитектуры Intel Core поддерживают, как минимум, базовый уровень этих средств. Процессоры Intel Core 2 Duo T7700 и более новые на базе микроархитектуры Intel Core поддерживают оба уровня функциональности - базовый и расширенный, которому соответствует ID версии, равный 2.
Архитектурный мониторинг v1
Конфигурирование события для архитектурного мониторинга задействует программирование регистров выбора событий. Это - ограниченный набор MSR (IA32_PERFEVTSELx). Результат возникновения такого события передается в счетчик мониторинга производительности (IA32_PMCx MSR). Регистры (MSR) счетчиков и выбора событий идут парами.
Регистры выбора и счетчики являются архитектурными в следующих смыслах:
- битовый формат IA32_PERFEVTSELx является неизменным в независимости от микроархитектур;
- адреса MSR IA32_PERFEVTSELx остаются теми же в независимости от микроархитектур;
- адреса MSR IA32_PMCx остаются теми же в независимости от микроархитектур;
- каждый логический процессор имеет свой собственный набор IA32_PERFEVTSELx и IA32_PMCx MSR. Конфигурации и счетчики не являются общими для логических процессоров, разделяющих процессорное ядро.
Архитектурный мониторинг предоставляет механизм CPUID для доступа к следующей информации:
- число счетчиков, доступных для мониторинга в логическом процессоре (каждому MSR IA32_PERFENVSELx соответствует парный MSR IA32_PMCx);
- число бит, поддерживаемых каждым IA32_PMCx;
- число архитектурных событий, поддерживаемых логическим процессором.
Программное обеспечение может использовать CPUID для определения доступности архитектурного мониторинга и его версии (CPUID.0AH).
Идентификатор версии получается запросом CPUID.0AH:EAX[биты 7:0] (Chapter 3, "Instruction Set Reference, A-M," in the Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2A). Если идентификатор версии больше ноля, архитектурный мониторинг поддерживается. Программное обеспечение сначала обращается за идентификатором версии, а затем анализирует возвращенный результат в CPUID.0AH.EAX, CPUID.0AH.EBX для определения доступных возможностей.
Архитектурный мониторинг v1, свойства
Возможности архитектурного мониторинга включают в себя набор счетчиков и регистров выбора рассматриваемых событий. Эти MSR имеют следующие свойства:
- IA32_PMCx начинаются с адреса 0C1H и занимают непрерывный блок адресного пространства MSR; число MSR в логическом процессоре хранится в CPUID.0AH;
- IA32_PERFEVTSELx начинаются с адреса 186H и занимают непрерывный блок адресного пространства MSR;
- каждому MSR IA32_PERFENVSELx соответствует парный MSR IA32_PMCx;
- ширина в битах каждого IA32_PMCx хранится в CPUID.0AH. Биты за пределами ширины счетчика не определены и игнорируются при попытке записи. Изначально битовая ширина для операций чтения определяется через CPUID; операции записи ограничены нижними 32 битами регистров;
- битовый формат MSR IA32_PERFEVTSELx определяется архитектурно.
Рис 1. IA32_PERFEVTSELx MSR
Архитектурный мониторинг v2
Расширенные возможности второй версии архитектурного мониторинга состоят в следующем:
- Регистр-счетчик фиксированной функции и соответствующий
управляющий регистр.
Три события из числа архитектурных подсчитываются с помощью трех MSR с фиксированной функцией (IA32_FIXED_CTR0, IA32_FIXED_CTR1, IA32_FIXED_CTR2). Каждый из трех PMC может считать только одно событие. Конфигурирование этих PMC осуществляется установкой битовых флагов в соответствующем MSR (IA32_FIXED_CTR_CTRL), находящемся по адресу 38DH. В отличие от конфигурации PMC общего назначения IA32_PMCx с помощью поля UMASK в IA32_PERFEVTSELx, конфигурация и программирование IA32_FIXED_CTR_CTRL для PMC с фиксированными функциями не требует масок. - Упрощенное программирование событий.
Наиболее часто встречающиеся операции в программировании событий для мониторинга производительности - это включение и выключение их подсчета и проверка статуса переполнений счетчиков. Средства архитектурного мониторинга второй версии предоставляют три архитектурных MSR:- IA32_PERF_GLOBAL_CTRL позволяет программному обеспечению включать и выключать счет всех или комбинаций событий PMC фиксированных функций (IA32_FIXED_CTRx) или любых PMC основного назначения через WRMSR;
- IA32_PERF_GLOBAL_STATUS позволяет программному обеспечению проверять условия переполнения счетчиков всех или комбинаций событий PMC фиксированных функций или любых PMC основного назначения через RDMSR;
- IA32_PERF_GLOBAL_OVF_CTRL позволяет программному обеспечению обнулять условия переполнения счетчиков всех или комбинаций событий PMC фиксированных функций или любых PMC основного назначения через WRMSR.
Архитектурный мониторинг v2, свойства
Средства, предоставляемые архитектурным мониторингом второй версии, доступны через CPUID.0AH в регистре EDX:
- Биты от 0 до 5 в CPUID.0AH.EDX индицируют число счетчиков с фиксированными функциями доступных на ядре;
- Биты с 5 до 12 в CPUID.0AH.EDX индицируют ширину в битах соответствующих счетчиков. Биты за пределами счетчиков являются резервированными и должны быть заполнены нулями.
Примечание: ранние версии Intel Core могут индицировать поддержку второ версии, однако, выдавая неверную информацию о свойствах поддерживаемых средств.
IA32_FIXED_CTR_CTRL MSR включает в себя наборы 4-битных полей, каждое из которых управляет одним из счетчиков с фиксированной функцией.
Рис 2. IA32_FIXED_CTR_CTRL MSR
IA32_PERF_GLOBAL_CTRL MSR предоставляет битовые флаги для включения/выключения каждого из счетчиков. Каждый флаг включения счетчика в IA32_PERF_GLOBAL_CTRL логически умножается с битами включения для привилегированных режимов в соответствующих IA32_PERFEVTSELx или IA32_PERF_FIXED_CTR_CTRL для старта/окончания подсчета соответствующих счетчиков. Счет ведется, когда результат умножения равен единице и не ведется, когда равен нулю.
Рис 3. IA32_PERF_GLOBAL_CTRL MSR
Список фиксированных функций, поддерживаемых архитектурным мониторингом, указан в таблице (готовится к публикации).
IA32_PERF_GLOBAL_STATUS MSR предоставляет возможность проверить однобитовый статус состояния условий переполнения каждого счетчика. Значения 1 и 0 бит с 32 по 34 индицируют статус переполнения соответствующего счетчика. MSR также предоставляет дополнительный бит для того, чтобы индицировать переполнение в случае, когда счетчики запрограммированы на PEBS (precise-event-based sampling). IA32_PERF_GLOBAL_STATUS MSR также предоставляет бит, индицирующий смену состояния аппаратной составляющей мониторинга.
В случае, когда счетчик сконфигурирован для PEBS, условие переполнения в счетчике генерирует прерывание, сигнализируя событие PEBS. По событию PEBS процессор сохраняет данные в буферную область, обнуляет статус переполнения и устанавливает бит "OvfBuffer" в IA32_PERF_GLOBAL_STATUS.
Рис 4. IA32_PERF_GLOBAL_STATUS MSR
IA32_PERF_GLOBAL_OVF_CTRL MSR позволяет программному обеспечению обнулить индикатор(ы) переполнения любых счетчиков базового назначения или фиксированной функции, используя WRMSR. Программному обеспечению это следует делать, когда:
- Устанавливаются новые значения при выборе событий и/или поле UMASK;
- При перезагрузке значений счетчиков для продолжения работы;
- При завершении счета событий.
Рис 5. IA32_PERF_GLOBAL_OVF_CTRL MSR
Предопределенные архитектурные события
Рис 6. Предопределенные архитектурные события
Процессор, который поддерживает архитектурный мониторинг, может не поддерживать все предопределенные архитектурные события. CPUID.0AH:EAX[31:24] индицируют доступность событий.
© Лаборатория Параллельных
информационных технологий НИВЦ МГУ