Verwenden von gemeinsam genutztem Speicher über tmpfs und NUMA unter x86_64/Linux

Verwenden von gemeinsam genutztem Speicher über tmpfs und NUMA unter x86_64/Linux

Folgendes würde ich gerne tun: eine Datei auf tmpfs ablegen, aber sicherstellen, dass sie vollständig (alle Seiten davon) auf demselben NUMA-Knoten landet. Zuerst dachte ich, das wäre trivial: Ich würde einfach mmap()eine tmpfs-Datei erstellen MAP_SHAREDund mbind()sie dann mit dem gewünschten Knoten verknüpfen und dann einfach kopieren. Die Manpage von mbind() schließt diesen Ansatz jedoch ausdrücklich aus:

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

Donnerwetter! Auf der mbind()Manpage steht, dass ich mich bei gemeinsamen Mappings nur auf die Speicherrichtlinie des Prozesses verlassen kann (mit set_mempolicy()). Aber das ist alles andere als ideal: Ich führe eine stark multithreaded Anwendung aus und es ist mir egal, welcher Thread das Kopieren durchführt. Ich hätte lieber, dass die Speicherrichtlinie an das tmpfs gebunden ist.DateiStattdessen mache ich mir das Leben leichter.

Hat jemand eine Idee, wie dieses Problem gelöst werden kann?

verwandte Informationen