Как рассчитать доступ к памяти для удаленных узлов памяти NUMA? - PullRequest
3 голосов
/ 11 августа 2011

В многопоточном приложении, работающем в недавней системе Linux с распределенной общей памятью, существует ли прямой способ подсчета количества запросов на поток к удаленным (нелокальным) узлам памяти NUMA?

Я подумываю об использовании PAPI для подсчета межсетевого трафика. Это путь?

В моем приложении потоки привязаны к определенному ядру или процессору в течение всего срока их службы. Когда приложение запускается, память распределяется по страницам и распределяется круговым способом по всем доступным узлам памяти NUMA.

Спасибо за ваши ответы.

Ответы [ 3 ]

3 голосов
/ 25 марта 2013

Если у вас есть доступ к VTune, доступ к локальному и удаленному узлу NUMA подсчитывается аппаратными счетчиками OFFCORE_RESPONSE.ANY_DATA.OTHER_LOCAL_DRAM_0 для быстрого доступа к локальному узлу NUMA и OFFCORE_RESPONSE.ANY_DATA.REMOTE_DRAM_0 * для медленных удаленных узлов NUMA.

Как отображаются счетчики в VTune:

Configuring NUMA hardware counters in VTune

Как выглядят счетчики в двух сценариях:

Несчастный код NUMA: ядро ​​0 (узел 0 NUMA) увеличивает на 50 МБ, находясь на узле 1 NUMA: NUMA unhappy code with many remote NUMA node accesses

Счастливый код NUMA: ядро ​​0 (узел 0 NUMA) увеличивает на 50 МБ, находясь на узле 0 NUMA: NUMA happy code with many local NUMA node accesses

1 голос
/ 03 декабря 2016

Я нашел инструмент pcm-numa.x, который поставляется с Intel PCM , очень полезным. Он сообщает вам, сколько раз каждое ядро ​​получало доступ к локальным или удаленным узлам NUMA.

0 голосов
/ 12 ноября 2011

Я не уверен, что это можно назвать прямым, и я не знаю, что такое «Система распределенной общей памяти», но, в любом случае, в обычном Linux, если у вас есть доступ к источнику, вы можете сосчитать запросы сами. Вы можете использовать ответ на мой вопрос «Могу ли я получить узел NUMA по адресу указателя?» вопрос здесь , чтобы выяснить, на каком узле находится запрошенная память, и знать, на каком узле находится ваш поток, подсчитывать удаленные запросы. Это только скажет вам, как часто вы используете удаленную память, а не когда эта память еще не находится в вашем локальном кэше и должна быть извлечена, так что это может быть не совсем то, что вы хотите.

Если вы хотите узнать об ошибках кэша в удаленной памяти, попробуйте добавить в свой вопрос тег профилирования - он может привлечь больше читателей. Если есть профилировщик, который будет отличать ошибки локальной памяти от ошибок удаленной памяти, мне было бы интересно узнать об этом.

...