Как сделать программу NUMA готовой? - PullRequest
4 голосов
/ 05 августа 2011

Моя программа использует общую память в качестве хранилища данных. Эти данные должны быть доступны любому запущенному приложению, и выборка этих данных должна быть быстрой. Но некоторые приложения могут работать на разных узлах NUMA, и доступ к данным для них действительно дорог. Является ли дублирование данных для каждого узла NUMA единственным способом сделать это?

1 Ответ

5 голосов
/ 21 февраля 2012

Существует два основных источника замедления, которые можно отнести к NUMA.Во-первых, это увеличенная задержка удаленного доступа, которая может варьироваться в зависимости от платформы.На платформах, с которыми я работаю, задержка составляет около 30%.

Другим источником потери производительности может быть конфликт по каналам связи и контроллерам между узлами NUMA.

Схема распределения по умолчанию для Linux заключается в распределении данных на узле, где она была создана,Если большая часть данных в приложении инициализируется одним потоком, то для этого одного узла памяти будет генерироваться большое количество перекрестного трафика домена NUMA и конфликтов.

Если ваши данные доступны только для чтения, репликация выполняетсяхорошее решение.

В противном случае, чередование распределения данных по всем вашим узлам распределит запросы по всем узлам и поможет уменьшить перегрузку.

Для чередования данных вы можете использовать set_mempolicy() с numaif.h если вы используете Linux.

...