https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
Theoretisch könnten Sie [
memfd_create()
] Verhalten erreichen, ohne neue Systemaufrufe einzuführen:
int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU);
(Beachten Sie, dass wir " /dev/shm
" anstelle von " /tmp
" verwenden können, um ein tmpfs hier besser zu gewährleisten .)
Daher ist die wichtigste Frage, warum zum Teufel wir einen dritten Weg brauchen?
[...]
- Der Sicherungsspeicher wird dem Prozess zugeordnet, dem die Datei gehört, und unterliegt keinen Mount-Quoten.
^ Habe ich Recht, wenn ich denke, dass auf den ersten Teil dieses Satzes kein Verlass ist?
Der memfd_create () - Code wird buchstäblich als "nicht verknüpfte Datei in [a] tmpfs implementiert, die kernelintern sein muss ". Ich verstehe, dass die Verfolgung des Codes sich dadurch unterscheidet, dass keine LSM-Überprüfungen implementiert werden. Außerdem werden Memfds erstellt, um "Siegel" zu unterstützen, wie im Blog-Beitrag erläutert wird. Allerdings bin ich sehr skeptisch , dass memfds ist entfielen anders im Prinzip eine tmpfile.
Insbesondere, wenn der OOM-Killer klopft, denke ich nicht, dass er für den Speicher verantwortlich ist, der von memfds gehalten wird. Dies kann bis zu 50% des Arbeitsspeichers betragen - der Wert der Option size = für tmpfs . Der Kernel legt keinen anderen Wert für die internen tmpfs fest, daher würde er die Standardgröße von 50% verwenden.
Ich denke also, wir können generell damit rechnen, dass Prozesse, die eine große Speicherkapazität aufweisen, aber keine anderen signifikanten Speicherzuordnungen aufweisen, nicht durch OOM zerstört werden. Ist das korrekt?