Подтвердить что ты не робот

Узкая узкая библиотека на машине NUMA

Я использую машину NUMA (SGI UV 1000) для одновременного запуска большого количества числовых симуляций, каждый из которых является заданием OpenMP с использованием 4 ядер. Тем не менее, запуск более 100 таких заданий приводит к значительным результатам. Наша теория относительно того, почему это происходит, заключается в том, что разделяемые библиотеки, требуемые программным обеспечением, загружаются только один раз в глобальную память аппарата, и тогда система испытывает узкое место в связи с тем, что все процессы обращаются к памяти на одном node.

Это старое программное обеспечение, которое не имеет возможности для модификации, и параметр статического make не статически связывает все библиотеки, в которых он нуждается. Самое удобное решение, из того, что я вижу, было бы каким-то образом заставить систему загружать новую копию требуемых разделяемых библиотек для каждого процесса или node (на каждом из которых я запускаю 3 процесса), но я раю не удалось выяснить, как это сделать. Может ли кто-нибудь сказать мне, как это сделать, или какие-либо другие предложения о том, как решить эту проблему?

4b9b3361

Ответ 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