межпроцессорное взаимодействие?

Тема в разделе "WASM.A&O", создана пользователем The_GorYnycH, 5 июн 2008.

  1. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    Вопрос в свете прошлой темы : http://www.wasm.ru/forum/viewtopic.php?id=27083.
    Запускаю приложение привязанное к одному узлу, в контексте которого работают два потока, пишущих в разные области памяти выделенной на этом же узле. Все хорошо. Но! запускаю еще один экземпляр на другом узле и... скорость падает! чем больше приложений запущено(каждое работает на своем узле), тем сильнее падает скорость записи. Теоретически, они должны работать независимо друг от друга, а получается, что каким-то образом влияют... Нет соображений почему так?
     
  2. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    Тема актуальности не потеряла... Ждем ваших замечаний!
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Не дождетесь ;)
    Я, например, монстров 8х4 в глаза не видел и врядли когда увижу, не говоря уж о том, чтобы "пощупать". Соотв-но и о NUMA только краем уха слышал...
    Ты уверен, что память равномерно по узлам раскидана ? Или может какой-нить node-interleave задействован ?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    leo
    это реальность. Именно такая архетектура у многоядерных процессоров AMD.
    А облодателей двух ядерников от AMD полно среди простых обывателей.
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    The_GorYnycH
    Если не ошибаюсь там планок памяти меньше чем ядер. Вот всем и не хватает.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Pavia
    А ты ничего не путаешь ? Использовать NUMA для повышения пропускной способности памяти имеет смысл только в реально многопроцессорных системах, когда каждый процессорный чип (узел) соединяется со своими планками памяти. А ядра одного процессора входят в один узел, т.к. разделяют общую шину памяти одного чипа и ес-но конкурируют между собой за доступ к памяти

    Как я понял, в рассматриваемой конфигурации 8 штук 4-ядерных процессоров, т.е. узлов всего 8. Если память распределена равномерно, то 128Гб/8 = 16Гб на узел - должно всем хватать ;)
    Но если не ошибаюсь, то в принципе часть узлов может подключаться к общей памяти в режиме node-interleave, т.к. это может давать лучшие характеристики для многопоточных приложений не заточенных под NUMA
     
  7. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    leo
    Он точно не задействован, т.к. эта опция настраивается через биос, я проверил. Кроме того, при задействовании этой опции система определяется как SMP, т.е. ни о каких узлах уже речь не идет...
    Pavia
    да как раз на 4 ядра 4 планки:))) только это МЕФ имхо.


    Может на одном из узлов разсполагаются какие-нить системные структуры и поэтому процессы, выполняющиеся на разных процессорах за них конкурируют???
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Но ты же в память, надеюсь непосредственно пишешь, а не через WriteProcessMemory и т.п. :) Поэтому если и конкурируют при вызове каких-то функций, то на записи больших блоков данных это не должно существенно отразиться.
     
  9. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    leo
    Да. Только видел статейку про 2008 сервер, в которой говорилось о том, что при создании процесса системные структуры типа таблиц страниц и т.п. создаются на узле по усмотрению системы. А потом, когда процесс привязывается к определенному узлу, все размещается на нем. Вот я и думаю, может не все? Как привязать процесс при его создании я не знаю, могу только после создания как можно раньше вызвать SetProcessAffinity. Может все так и остается на узле по умолчанию и процессы конкурируют за эти таблицы,иначе какого беса они друг на друга влияют? Если запущен один процесс, пофик на каком узле, все нормально, но стоит запустить еще хотя б один, скорость работы с памятью замедляется.
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А ты на последовательной записи тестируешь или со случайным доступом "по 100-200 байт" ?
    Если на последовательной, то как я уже говорил, чтение 64 байтной линейки из таблицы страниц происходит один раз на 1024\512 записываемых линеек, поэтому если даже таблица читается с другого узла, то существенного падения скорости записи это вызвать не может. Если только при случайном доступе к разным страницам
     
  11. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    leo
    Тестирую на последовательной записи.
    Если просто нагружать процы без обращения в память, то падения производительности нет, результаты работы одного процесса и одновременно нескольких совпадают.