Вопрос в свете прошлой темы : http://www.wasm.ru/forum/viewtopic.php?id=27083. Запускаю приложение привязанное к одному узлу, в контексте которого работают два потока, пишущих в разные области памяти выделенной на этом же узле. Все хорошо. Но! запускаю еще один экземпляр на другом узле и... скорость падает! чем больше приложений запущено(каждое работает на своем узле), тем сильнее падает скорость записи. Теоретически, они должны работать независимо друг от друга, а получается, что каким-то образом влияют... Нет соображений почему так?
Не дождетесь Я, например, монстров 8х4 в глаза не видел и врядли когда увижу, не говоря уж о том, чтобы "пощупать". Соотв-но и о NUMA только краем уха слышал... Ты уверен, что память равномерно по узлам раскидана ? Или может какой-нить node-interleave задействован ?
leo это реальность. Именно такая архетектура у многоядерных процессоров AMD. А облодателей двух ядерников от AMD полно среди простых обывателей.
Pavia А ты ничего не путаешь ? Использовать NUMA для повышения пропускной способности памяти имеет смысл только в реально многопроцессорных системах, когда каждый процессорный чип (узел) соединяется со своими планками памяти. А ядра одного процессора входят в один узел, т.к. разделяют общую шину памяти одного чипа и ес-но конкурируют между собой за доступ к памяти Как я понял, в рассматриваемой конфигурации 8 штук 4-ядерных процессоров, т.е. узлов всего 8. Если память распределена равномерно, то 128Гб/8 = 16Гб на узел - должно всем хватать Но если не ошибаюсь, то в принципе часть узлов может подключаться к общей памяти в режиме node-interleave, т.к. это может давать лучшие характеристики для многопоточных приложений не заточенных под NUMA
leo Он точно не задействован, т.к. эта опция настраивается через биос, я проверил. Кроме того, при задействовании этой опции система определяется как SMP, т.е. ни о каких узлах уже речь не идет... Pavia да как раз на 4 ядра 4 планки)) только это МЕФ имхо. Может на одном из узлов разсполагаются какие-нить системные структуры и поэтому процессы, выполняющиеся на разных процессорах за них конкурируют???
Но ты же в память, надеюсь непосредственно пишешь, а не через WriteProcessMemory и т.п. Поэтому если и конкурируют при вызове каких-то функций, то на записи больших блоков данных это не должно существенно отразиться.
leo Да. Только видел статейку про 2008 сервер, в которой говорилось о том, что при создании процесса системные структуры типа таблиц страниц и т.п. создаются на узле по усмотрению системы. А потом, когда процесс привязывается к определенному узлу, все размещается на нем. Вот я и думаю, может не все? Как привязать процесс при его создании я не знаю, могу только после создания как можно раньше вызвать SetProcessAffinity. Может все так и остается на узле по умолчанию и процессы конкурируют за эти таблицы,иначе какого беса они друг на друга влияют? Если запущен один процесс, пофик на каком узле, все нормально, но стоит запустить еще хотя б один, скорость работы с памятью замедляется.
А ты на последовательной записи тестируешь или со случайным доступом "по 100-200 байт" ? Если на последовательной, то как я уже говорил, чтение 64 байтной линейки из таблицы страниц происходит один раз на 1024\512 записываемых линеек, поэтому если даже таблица читается с другого узла, то существенного падения скорости записи это вызвать не может. Если только при случайном доступе к разным страницам
leo Тестирую на последовательной записи. Если просто нагружать процы без обращения в память, то падения производительности нет, результаты работы одного процесса и одновременно нескольких совпадают.