Использование событий наблюдения за производительностью внеядерных компонентов платформы Rangeley
В этой статье рассматриваются события наблюдения за производительностью платформы «система на кристалле» Rangeley. Введение в наблюдение за производительностью внеядерных компонентов платформ «система на кристалле» см. в статье:
Введение в платформу Rangeley с архитектурой «система на кристалле»
Ниже на блок-схеме показано типовое устройство Rangeley. Зеленые стрелки, соединяющие каждый блок, представляют собой интерфейсы; можно отслеживать запросы в интерфейсах для вычисления пропускной способности. Серыми стрелками в южном кластере показаны интерфейсы, для которых не поддерживается отслеживание производительности внеядерных компонентов. Как видно на схеме ниже, анализ будет касаться только северного кластера.
Доступные группы
В следующей таблице описаны доступные группы для Rangeley. Имя группы означает заранее заданный набор событий, которые будут программироваться программными средствами мониторинга. В столбце событий указывается, сколько событий содержится в группе. В столбце «Тактовые импульсы» указывается, включает ли группа счетчик из источника тактовых импульсов кристалла.
Имя группы | События | Тактовые импульсы | Описание |
UNC_SOC_Memory_DDR_BW | 8 | Нет | Подсчитывает количество запросов размером 32 и 64 байта к памяти для каналов памяти 0 и 1. Для определения пропускной способности памяти нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Memory_DDR0_BW | 5 | Да | Подсчитывает количество запросов размером 32 и 64 байта к памяти для канала памяти 0. Для определения пропускной способности памяти нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Memory_DDR1_BW | 5 | Да | Подсчитывает количество запросов размером 32 байта и 64 байта к памяти для канала памяти 1. Для определения пропускной способности памяти нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_DDR_Self_Refresh | 3 | Да | Подсчитывает количество циклов, в течение которых каналы памяти 0 и 1 находятся в состоянии самообновления. |
UNC_SOC_All_Reqs | 7 | Да | Подсчитывает количество запросов на каждый агент памяти. С помощью счетчиков можно определять ресурсоемкие агенты или оценивать пропускную способность для агента, умножив количество запросов на 64 байта. |
UNC_SOC_Module0_BW | 7 | Да | Подсчитывает количество событий пропускной способности для модуля Silvermont 0. Для определения пропускной способности между модулем Silvermont 0 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module1_BW | 7 | Да | Подсчитывает количество событий пропускной способности для модуля Silvermont 1. Для определения пропускной способности между модулем Silvermont 1 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module2_BW | 7 | Да | Подсчитывает количество событий пропускной способности для модуля Silvermont 2. Для определения пропускной способности между модулем Silvermont 2 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module3_BW | 7 | Да | Подсчитывает количество событий пропускной способности для модуля Silvermont 3. Для определения пропускной способности между модулем Silvermont 3 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module0_1_BW | 8 | Нет | Подсчитывает количество событий пропускной способности для модулей Silvermont 0 и 1. Для определения пропускной способности между модулями Silvermont 0, 1 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module2_3_BW | 8 | Нет | Подсчитывает количество событий пропускной способности для модулей Silvermont 2 и 3. Для определения пропускной способности между модулями Silvermont 2, 3 и памятью нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Module0_1_Snoops | 5 | Да | Подсчитывает количество запросов и ответов отслеживания для модулей Silvermont 0 и 1. |
UNC_SOC_Module2_3_Snoops | 5 | Да | Подсчитывает количество запросов и ответов отслеживания для модулей Silvermont 2 и 3. |
UNC_SOC_Module0_1_2_3_Snoops | 8 | Нет | Подсчитывает количество запросов и ответов отслеживания для модулей Silvermont 0, 1, 2 и 3. |
UNC_SOC_LowSpeedPF_BW | 7 | Да | Подсчитывает совокупную пропускную способность событий для структуры низкоскоростной периферии. Для определения совокупной пропускной способности памяти нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_HighSpeedPF_BW | Подсчитывает совокупную пропускную способность событий для структуры высокоскоростной периферии. Для определения совокупной пропускной способности памяти нужно умножить количество событий на размер запроса (32 или 64 байта). |
UNC_SOC_Memory_DDR_BW
Группа UNC_VISA_Memory_DDR_BW предоставляет счетчики для вычисления пропускной способности всей памяти с точки зрения контроллера памяти «системы на кристалле». События можно разделить на запросы по каждому каналу, включая запросы размером 32 и 64 байта. Эти события не предоставляют информации о том, какой агент потребляет больше памяти, но это наиболее точный способ определения фактической используемой пропускной способности памяти.
Количество каналов памяти на платформе Rangeley зависит от конкретной модели: может быть либо один, либо два канала. Если существует только один канал, все счетчики, связанные со вторым каналом, будут выдавать нулевые значения. Дополнительные сведения об архитектуре каналов памяти: http://en.wikipedia.org/wiki/Multi-channel_memory_architecture.
Группы UNC_VISA_MEMORY_DDR0_BW и UNC_VISA_MEMORY_DDR1_BW являются подмножествами этой группы, они собирают данные только для каналов памяти 0 и 1.
На приведенном ниже рисунке показан отслеживаемый поток трафика для этой группы.
В приведенной ниже таблице перечислены события, содержащиеся в группе UNC_VISA_Memory_BW.
Имя | Счетчик | Описание |
DDR_Chan0_Read32B | 0 | Подсчитывает количество запросов чтения размером 32 байта к каналу памяти 0. |
DDR_Chan0_Read64B | 1 | Подсчитывает количество запросов чтения размером 64 байта к каналу памяти 0. |
DDR_Chan0_Write32B | 2 | Подсчитывает количество запросов записи размером 32 байта к каналу памяти 0. |
DDR_Chan0_Write64B | 3 | Подсчитывает количество запросов записи размером 64 байта к каналу памяти 0. |
DDR_Chan1_Read32B | 4 | Подсчитывает количество запросов чтения размером 32 байта к каналу памяти 1. |
DDR_Chan1_Read64B | 5 | Подсчитывает количество запросов чтения размером 64 байта к каналу памяти 1. |
DDR_Chan1_Write32B | 6 | Подсчитывает количество запросов записи размером 32 байта к каналу памяти 1. |
DDR_Chan1_Write64B | 7 | Подсчитывает количество запросов записи размером 64 байта к каналу памяти 1. |
Анализ результатов
Пропускную способность в МБ/с можно вычислить для перечисленных выше 64-байтовых событий следующим образом:
Формула метрики событий: количество_событий/отрезок_в_секундах*64 байт/1000000 байт = МБ/с
Для 32-байтовых событий замените 64 байта на 32:
Формула метрики событий: количество_событий/отрезок_в_секундах*32 байт/1000000 байт = МБ/с
События можно суммировать для получения нужных метрик, например:
- суммарная пропускная способность памяти = сумма всех событий, МБ/с
- суммарная пропускная способность чтения = сумма всех событий чтения, МБ/с
- пропускная способность канала 0 = сумма событий канала 0, МБ/с
Известное поведение
- Если платформа не имеет двух каналов, показатели счетчика второго канала будут нулевыми.
UNC_SOC_DDR_Self_Refresh
Группа UNC_VISA_DDR_Self_Refresh содержит счетчики для аппаратных событий самообновления памяти. Самообновление представляет состояние пониженного потребления электроэнергии, его можно использовать для оптимизации электропитания «системы на кристалле» и приложений.
В приведенной ниже таблице перечислены события, содержащиеся в группе UNC_VISA_DDR_Self_Refresh.
Имя | Счетчик | Описание |
DDR_Chan0_Self_Refresh | 0 | Подсчитывает количество циклов, в течение которых канал памяти 0 находится в состоянии самообновления. |
DDR_Chan1_Self_Refresh | 1 | Подсчитывает количество циклов, в течение которых канал памяти 1 находится в состоянии самообновления. |
Clock_Counter | 2 | Тактовый счетчик «системы на кристалле». |
Анализ результатов
Формула метрики событий: (количество_событий/(базовая_частота_SoC /базовая_частота_DDR))*100 = резидентность самообновления DDR
Известное поведение
- Если платформа не имеет двух каналов, показатели счетчика второго канала будут нулевыми
- Счетчики 0,1 могут быть запущены на другой исходной частоте, нежели счетчик 2
UNC_SOC_All_Reqs
События счетчиков запросов на каждый агент, содержащиеся в группе UNC_VISA_All_Reqs, измеряют общее количество запросов на доступные агенты «системы на кристалле» в ходе однократной единовременной выборки. Этот показатель учитывает одновременно все агенты, поэтому это важная метрика для изучения всей нестатической, то есть пиковой нагрузки. В отличие от других событий пропускной способности, учет которых происходит по одному или по два одновременно, эта метрика получает данные от всех агентов одновременно.
Пропускную способность на каждого агента можно вычислить, умножив количество запросов для каждого агента на 64 байта, а общая пропускная способность равна сумме значений пропускной способности всех агентов. Важно понимать, что конечный результат имеет приблизительный характер и основывается на предположении, что размер каждого запроса составляет 64 байта. Результат вычисления превысит фактический для транзакций с 32-байтовыми и частичными запросами. Другой недостаток состоит в том, что невозможно отделить данные чтения от данных записи для каждого агента.
Для точного измерения пропускной способности с разделением по чтению и записи следует использовать метрику пропускной способности по агентам для одного или двух агентов одновременно.
Имя | Счетчик | Описание |
Mod0_Reqs | 0 | Подсчитывает количество запросов от модуля Silvermont 0. |
Mod1_Reqs | 1 | Подсчитывает количество запросов от модуля Silvermont 1. |
Mod2_Reqs | 2 | Подсчитывает количество запросов от модуля Silvermont 2. |
Mod3_Reqs | 3 | Подсчитывает количество запросов от модуля Silvermont 3. |
HighSpeedPF_Reqs | 4 | Подсчитывает совокупное количество запросов от структуры высокоскоростной периферии. |
LowSpeedPF_Reqs | 5 | Подсчитывает совокупное количество запросов от структуры низкоскоростной периферии. |
Clock_Counter | 6 | Тактовый счетчик «системы на кристалле». |
Анализ результатов
Формула метрики событий:
- количество_событий/отрезок_в_секундах *64 байт/1000000 байт = оцениваемая пропускная способность агента, МБ/с
- суммарное_количество_событий/отрезок_в_секундах *64 байта/1000000 байт = оцениваемая пропускная способность памяти DDR, МБ/с
Известное поведение
- Важно помнить, что эти события подсчитывают транзакции с любыми размерами запросов; умножение их на 64 байта для вычисления метрики в МБ/с является огрублением, результат такого вычисления может превышать фактическую пропускную способность каналов памяти.
UNC_SOC_Module0_BW
Группа UNC_VISA_Module0_BW предоставляет счетчики для вычисления пропускной способности модуля 0 процессора с точки зрения системного агента. События можно разделить по типам запросов.
На приведенном ниже рисунке показан отслеживаемый поток трафика для этой группы.
Имя | Счетчик | Описание |
Mod0_ReadPartial | 0 | Подсчитывает все транзакции чтения модуля 0 для запросов любого размера данных. Этот счетчик событий включает частичные, 32-байтовые и 64-байтовые транзакции. |
Mod0_Read32B | 1 | Подсчитывает количество запросов чтения размером 32 байта от модуля 0 Silvermont. |
Mod0_Read64B | 2 | Подсчитывает количество запросов чтения размером 64 байта от модуля 0 Silvermont. |
Mod0_WritePartial | 3 | Подсчитывает все транзакции записи модуля 0 для запросов любого размера данных. Этот счетчик событий включает частичные, 32-байтовые и 64-байтовые транзакции. |
Mod0_Write32B | 4 | Подсчитывает количество запросов записи размером 32 байта от модуля 0 Silvermont. |
Mod0_Write64B | 5 | Подсчитывает количество запросов записи размером 64 байта от модуля 0 Silvermont. |
Clock_Counter | 6 | Тактовый счетчик «системы на кристалле». |
Анализ результатов
Пропускную способность чтения и записи можно вычислить для 32- и 64-байтовых событий, но вычисление событий затруднено, поскольку у них неизвестен объем полезной нагрузки. Также следует понимать, что частичные события для этой группы представляют собой сумму 64-байтовых, 32-байтовых и частичных запросов. Это частичное событие также можно рассматривать как сумму всех запросов чтения или записи.
Формула метрики событий:
- частичные_запросы - 32_байтные_запросы - 64_байтные_запросы = фактическое количество частичных запросов
- (Mod0_Read32B_количество * 32_байта / отрезок_в_секундах) + (Mod0_Read64B_количество * 64_байта / отрезок_в_секундах) = чтение, МБ/с
- (Mod0_Write32B_количество * 32_байта / отрезок_в_секундах) + (Mod0_Write64B_количество * 64_байта / отрезок_в_секундах) = запись, МБ/с
Известное поведение
- Счетчик частичных событий модулей 0, 1, 2 и 3 включает 32-байтовые, 64-байтовые и частичные запросы. Его можно считать суммарным счетчиком запросов.
UNC_SOC_ModuleX_BW,
Группы UNC_VISA_Module1_BW, UNC_VISA_Module2_BW и UNC_VISA_Module3_BW идентичны группе UNC_VISA_Module0_BW с тем лишь исключением, что они подсчитывают события в соответствующих модулях процессора (модули 1, 2 и 3).
UNC_SOC_Module0_1_BW
Ресурсов счетчиков недостаточно для измерения пропускной способности всех модулей процессора одновременно, но группы UNC_VISA_Module0_1_BW и UNC_VISA_Module2_3_BW предоставляют счетчики для одновременного вычисления пропускной способности двух модулей процессора. Частичные события опущены, чтобы добиться параллельного измерения.
На приведенном ниже рисунке показан отслеживаемый поток трафика для UNC_VISA_Module0_1_BW.
Имя | Счетчик | Описание |
Mod0_Read32B | 0 | Подсчитывает количество запросов чтения размером 32 байта от модуля 0 Silvermont. |
Mod0_Read64B | 1 | Подсчитывает количество запросов чтения размером 64 байта от модуля 0 Silvermont. |
Mod0_Write32B | 2 | Подсчитывает количество запросов записи размером 32 байта от модуля 0 Silvermont. |
Mod0_Write64B | 3 | Подсчитывает количество запросов записи размером 64 байта от модуля 0 Silvermont. |
Mod1_Read32B | 4 | Подсчитывает количество запросов чтения размером 32 байта от модуля 1 Silvermont. |
Mod1_Read64B | 5 | Подсчитывает количество запросов чтения размером 64 байта от модуля 1 Silvermont. |
Mod1_Write32B | 6 | Подсчитывает количество запросов записи размером 32 байта от модуля 1 Silvermont. |
Mod1_Write64B | 7 | Подсчитывает количество запросов записи размером 64 байта от модуля 1 Silvermont. |
UNC_SOC_Module0_1_Snoops
UNC_VISA_Module0_1_Snoops подсчитывает количество запросов отслеживания и отчетов отслеживания для модулей Silvermont 0 и 1 с точки зрения системного агента. Данные этих счетчиков можно использовать для подтверждения показателей других счетчиков трафика и для выявления взаимосвязей в счетчиках событий отслеживания ядер. В отличие от событий отслеживания, связанных с ядрами, счетчики отслеживания внеядерных компонентов не могут различать показатели для ядер внутри модуля; они считают общее значение для целого модуля, а не для каждого ядра.
Имя | Событие | Описание |
Mod0_Snoop_Replies | 0 | Подсчитывает количество ответов отслеживания, полученных от модуля 0. |
Mod0_Snoop_Reqs | 1 | Подсчитывает количество запросов отслеживания, отправленных в модуль 0. |
Mod1_Snoop_Replies | 2 | Подсчитывает количество ответов отслеживания, полученных от модуля 1. |
Mod1_Snoop_Reqs | 3 | Подсчитывает количество запросов отслеживания, отправленных в модуль 1. |
Clock_Counter | 4 | Тактовый счетчик «системы на кристалле». |
UNC_VISA_Module2_3_Snoops идентичен счетчику UNC_VISA_Module0_1, но подсчи-тывает количество запросов и ответов отслеживания для модулей процессора 2 и 3. UNC_VISA_Module0_1_2_3_Snoops собирает данные отслеживания одновременно для всех четырех модулей процессора, но не включает тактовый счетчик «системы на кристалле».
Анализ результатов
Анализ результатов отслеживания зависит от модели использования.
Известное поведение
- Показатели счетчиков отслеживания подсчитываются для всего процессорного модуля без возможности разделения по каждому ядру.
UNC_SOC_LowSpeedPF_BW
Группа UNC_VISA_LowSpeedPF_BW содержит события для определения пропускной способности структуры низкоскоростной периферии и представляет совокупную пропускную способность для всех подключаемых компонентов южного кластера: USB, SATA и Ethernet.
Имя | Счетчик | Описание |
LowSpeedPF_ReadPartial | 0 | Подсчитывает все транзакции чтения структуры низкоскоростной периферии с запросами с частичным размером данных. |
LowSpeedPF_Read32B | 1 | Подсчитывает количество запросов чтения размером 32 байта в структуре низкоскоростной периферии. |
LowSpeedPF_Read64B | 2 | Подсчитывает количество запросов чтения размером 64 байта в структуре низкоскоростной периферии. |
LowSpeedPF_WritePartial | 3 | Подсчитывает все транзакции записи структуры низкоскоростной периферии с запросами с частичным размером данных. |
LowSpeedPF_Write32B | 4 | Подсчитывает количество запросов записи размером 32 байта в структуре низкоскоростной периферии. |
LowSpeedPF_Write64B | 5 | Подсчитывает количество запросов записи размером 64 байта в структуре низкоскоростной периферии. |
Clock_Counter | 6 | Тактовый счетчик «системы на кристалле». |
Анализ результатов
Пропускную способность чтения и записи можно вычислить для 32- и 64-байтовых событий, но вычисление частичных событий затруднено, поскольку у частичных запросов неизвестен объем полезной нагрузки.
Формула метрики событий:
- (LowspeedPF_Read32B_количество * 32_байта / отрезок_в_секундах) + (LowspeedPF_Read64B_количество * 64_байтов / отрезок_в_секундах) = чтение, МБ/с
- (LowspeedPF_Read32B_количество * 32_байта / отрезок_в_секундах) + (LowspeedPF_Read64B_количество * 64_байта / отрезок_в_секундах) = запись, МБ/с
Известное поведение
- Нет.
UNC_SOC_HighSpeedPF_BW
Группа UNC_VISA_HighSpeedPF_BW содержит события для определения пропускной способности структуры высокоскоростной периферии и представляет совокупную пропускную способность для всех подключаемых высокоскоростных компонентов. Эта группа идентична группе UNC_VISA_LowSpeed_BW по конфигурации счетчиков событий и по метрикам анализа. Имена событий изменены с LowSpeedPF на HighSpeedPF.