Ответ 1
общие библиотеки, требуемые программным обеспечением, загружаются только один раз в глобальную память устройства,
Как я знаю, это текущее поведение Linux. Общая библиотека загружается только в один набор физической памяти и только на одном node.
и тогда система сталкивается с узким местом связи, поскольку все процессы получают доступ к памяти на одном node.
Как сказано в комментариях, инструкции из библиотеки должны кэшироваться в каждом процессоре, поэтому может быть узкое место, только если активный код из библиотеки стирается из кеша (например, существует много разных кодов).
Вы должны проверить свою теорию, используя аппаратные счетчики производительности (пропуски из кешей, интервал node NUMA).
Механизм хранения некоторых данных с несколькими копиями в NUMA называется "репликация" в Linux. И код ядра, исполняемый файл или его общие библиотеки называются текстом. Итак, вы хотите "текстовая репликация для разделяемых библиотек". Я думаю, что репликация текста проще для кодов ядра.
Я смог найти некоторые экспериментальные исправления с 2003 года для выполнения такой репликации текста, например. http://lwn.net/Articles/63512/ ([RFC] [PATCH] NUMA репликация пользовательских страниц) Дэйвом Хансеном, IBM. Кажется, что этот патч отказался.
Более современным (2007) вариантом этого метода является репликация pagecache: http://lwn.net/Articles/223056/ (mm: реплицированная pagecache) Ником Пиггином, SUSE. Существует также презентация о его методе: http://ondioline.org/~paul/pagecachereplication.pdf. Это будет работать, потому что все файлы хранятся в pagecache, как в исполняемых файлах, так и в общих библиотеках. Но даже для этого патча я не могу найти его в текущем ядре.
В SGI больше потребностей реплик (у них больше машин NUMA, типичных разработчиков ядра), поэтому могут быть некоторые дополнительные исправления. Существует руководство по настройке приложения SGI для NUMA: http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/linux/bks/SGI_Developer/books/LX_86_AppTune/sgi_html/ch05.html, в котором упоминается утилита dplace
в разделе "Использование команды dplace". У него есть опция для репликации текста:
-r: указывает, что текст должен быть реплицирован на node или узлах, где выполняется приложение. В некоторых случаях репликация улучшит производительность, уменьшив необходимость использования ссылок на память для кода outnode. Опция репликации применяется ко всем программам, размещенным командой dplace. См. Справочную страницу dplace (5) для получения дополнительной информации о репликации текста. Параметры репликации представляют собой строку из одного или нескольких следующих символов:
l Репликация текста библиотеки
b Репликация бинарного (a.out) текста
t Вариант round-robin для потока
Человек замещает (1): http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man1/dplace.1.html
Человек помещается (5): http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man5/dplace.5.html