2015-04-24 2 views
0

если у меня есть статические данные в модуле, например static int some_param, и я запускаю машину с несколькими процессорами с NUMA. где будет располагаться сегмент данных? Я прочитал, что в NUMA текст может быть реплицирован, чтобы избежать латентности доступа к узлу большой памяти, но данные невозможно реплицировать, поскольку это не только чтение. Где загружен модуль? это NUMA известно или оно должно быть загружено в предопределенные области отображения карт.макет памяти модуля ядра Linux в NUMA

вот ссылки: http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Mark_Wagner.pdf http://www.cs.dartmouth.edu/~sergey/cs108/solaris_kernel_memory.pdf http://halobates.de/memory.pdf

+0

Модуль AFAIK будет загружен только в виртуально-адресное пространство, определяемое архитектурой. Кроме того, цитирование прочитанных вещей помогает кому-либо. –

+0

спасибо, что ссылки Jonathon добавлены. – roni

ответ

0

Это зависит от операционной системы. Если вы используете Linux, будет применяться политика «Первое касание». Это означает, что все данные вашей программы будут распределены на узле, расположенном рядом с тем, где находится процессор, на котором работает ваша программа.

Логически ваша программа увидит уникальную общую память. В нижнем рычаге ОС может выделять данные на другом узле NUMA, что вызывает некоторые проблемы с производительностью.

Это зависит от вас, если вы хотите написать код, поддерживающий NUMA, чтобы избежать латентности и конкуренции NUMA. Хотя в некоторых дистрибутивах Linux уже реализованы некоторые функции балансировки NUMA. (например, Automatic NUMA Balancing)

Смежные вопросы