Я пытаюсь использовать некоторые аппаратные счетчики uncore, например: skx_unc_imc0-5::UNC_M_WPQ_INSERTS
. Предполагается, что он подсчитывает количество выделений в очереди ожидания записи. Машина имеет 2 процессора Intel Xeon Gold 5218 с архитектурой каскадного озера, с 2 контроллерами памяти на процессор. версия linux - 5.4.0-3-amd64. У меня есть следующий простой цикл, и я читаю для него этот счетчик. Элементы массива имеют размер 64 байта, равный строке кеша.
for(int i=0; i < 1000000; i++){
array[i].value=2;
}
Для этого цикла, когда я сопоставляю память с узлом DRAM NUMA, счетчик в результате дает около 150 000, что, возможно, имеет смысл: всего 6 каналов для 2 контроллеров памяти перед этим узлом NUMA , которые используют модули DRAM DIMM в режиме чередования. Тогда для каждого канала есть один отдельный WPQ, я полагаю, поэтому skx_unc_imc0 получает 1/6 от всех магазинов. Есть skx_unc_imc0-5
счетчики, которые я получил с papi_native_avail
, предположительно каждый для разных каналов.
Неожиданный результат заключается в том, что вместо сопоставления с узлом DRAM NUMA я сопоставляю программу с энергонезависимой памятью, которая представлена как отдельный узел NUMA с тем же сокетом. На каждый сокет приходится 6 модулей памяти NVM DIMM, которые создают одну чередующуюся область. Таким образом, при записи в NVM должно быть аналогично 6 разных каналов, и перед каждым стоит один и тот же WPQ, который снова должен иметь 1/6 вставок записи.
Но UNC_M_WPQ_INSERTS
возвращает только около 1000 из-за энергонезависимой памяти. Я не понимаю почему; Я ожидал, что он даст примерно 150 000 записей в WPQ.
Я что-то неправильно интерпретирую / понимаю? Или есть два разных WPQ на канал в зависимости от того, идет ли запись в DRAM или NVM? Или чем еще может быть объяснение?
UNC_M_PMM_WPQ_INSERTS
может быть доступен на машине, но не отображаться вpapi_native_avail
? а использовали как-то еще? - person Ana Khorguani   schedule 24.03.2020perf
хотя и поддерживает эти новые события, так что, может быть, ты сможешь проверить это? Я думаю, что в PAPI их не хватает, потому что они могут не соответствовать Intel. - person Margaret Bloom   schedule 25.03.2020perf list uncore
:unc_m_pmm_bandwidth.write
- [Запись пропускной способности постоянной памяти Intel Optane DC (МБ / с). Получено изunc_m_pmm_wpq_inserts
. Unit: uncore_imc], что означает, что где-то там должен быть unc_m_pmm_wpq_inserts: D - person Ana Khorguani   schedule 25.03.2020perf stat -e unc_m_pmm_bandwidth.write
возвращает результат, но когда я пытаюсь напрямуюperf stat -e unc_m_pmm_wpq_inserts
, я получаю ошибку парсера. - person Ana Khorguani   schedule 25.03.2020perf
поддерживает необработанные события, поэтому, согласно this, командаperf stat -e uncore_imc/event=0xe7
должна подсчитывать вставки WPQ для PMM. Вы сможете получить больше информации о необработанном формате, используемомperf
(в частности, о имени PMU) с помощью командыls /sys/devices/*/format
. Я не уверен, как это все работает на машине NUMA: / - person Margaret Bloom   schedule 25.03.2020perf stat -e uncore_imc/event=0xe7/
вот так, и он возвращает какое-то значение. Для начала я пытаюсь понять, как добавить МОДИФИКАТОРЫ СОБЫТИЙ в этот необработанный формат, чтобы получить только подсчет пространства пользователя. с именем было бы просто добавить: u вот так:perf stat -e unc_m_pmm_wpq_inserts:u
, но кажется, что с сырой версией все не так просто. - person Ana Khorguani   schedule 25.03.2020/u
. Но как вы думаете, ядро пишет в NVRAM? - person Margaret Bloom   schedule 25.03.2020perf stat -e uncore_imc/event=0xe7/u
, он возвращает что-то вроде ‹not supported›, что, я думаю, означает, что само событие не поддерживает этот идентификатор события. - person Ana Khorguani   schedule 25.03.2020UNC_M_PMM_WPQ_OCCUPANCY.ALL
/UNC_M_CLOCKTICKS
и, возможно, модификатораcmask=1
. Обратите внимание, что модификаторu
не может использоваться с событиями uncore. - person Hadi Brais   schedule 19.04.2020uncore_imc/event=0xe4,cmask=0x1/
дает синтаксическую ошибку события. - person Ana Khorguani   schedule 24.04.2020UNC_M_PMM_WPQ_OCCUPANCY.ALL
требуетumask=0x1
. Вы можете использовать его только по имени в ядре v5.5-rc1 и новее. Какое значение имеетUNC_M_CLOCKTICKS
? - person Hadi Brais   schedule 24.04.2020uncore_imc/event=0xe4,umask=0x1/
возвращает значение: 959,793,105. Я добавил цикл чтения после записи, и счетчики 0xE6, 0xE8 и 0xE9 по-прежнему равны 0. Результат 0xE5 такой же. - person Ana Khorguani   schedule 24.04.2020uncore_imc/event=0xe4,umask=0x1,cmask=0x1/
и посмотреть, как он сравнивается с cmask = 0x0. - person Hadi Brais   schedule 02.05.2020uncore_imc/event=0xe4,umask=0x1,cmask=0x1/
, похоже, не работает, я получаю синтаксическую ошибку события. Для UNC_M_PMM_WPQ_OCCUPANCY.ALL / UNC_M_CLOCKTICKS с 10 миллионами записей соотношение увеличивается до 3. Это также 3 со 100 миллионами записей. с 1 миллиардом это снова 2. - person Ana Khorguani   schedule 02.05.2020uncore_imc/event=0xe4,umask=0x1/
и 2 164 543 760 дляUNC_M_CLOCKTICKS
. Без ограничения памяти простоclwb
дает 514 017 990UNC_M_CLOCKTICKS
и 218 640 321uncore_imc/event=0xe4,umask=0x1/
. Я ожидал, что UNC_M_PMM_WPQ_OCCUPANCY.ALL увеличится, так как я сбрасываю записи, которые должны насытить этот WPQ больше, но это не выглядит так. - person Ana Khorguani   schedule 02.05.2020mfence
- это инструкция, которая гарантированно очищает буфер хранилища.sfence
тоже делает это? - person Suraaj K S   schedule 12.11.2020