Использование общей памяти через tmpfs и NUMA на x86_64/Linux

Использование общей памяти через tmpfs и NUMA на x86_64/Linux

Вот что я хотел бы сделать: поместить файл в tmpfs, но убедиться, что весь файл (все его страницы) окажется на одном узле NUMA. Сначала я думал, что это будет тривиально: я просто создам mmap()файл tmpfs MAP_SHAREDи затем использую mbind()его для привязки к нужному узлу, а затем просто скопирую. Однако страница руководства mbind() явно исключает такой подход:

NUMA policy is not supported on a memory-mapped file range 
that was mapped with the MAP_SHARED flag.

Вот это да! mbind()На странице руководства написано, что для общих отображений я могу полагаться только на политику памяти процесса (используя set_mempolicy()). Но это далеко не идеально: я запускаю многопоточное приложение и мне бы не было важно, какой поток выполняет копирование. Мне бы хотелось, чтобы политика памяти была привязана к tmpfsфайлвместо этого, облегчая мне жизнь.

У кого-нибудь есть идеи, как решить эту проблему?

Связанный контент