Вот что я хотел бы сделать: поместить файл в 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файлвместо этого, облегчая мне жизнь.
У кого-нибудь есть идеи, как решить эту проблему?