fallocate

___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ qstnhdr ___ Wie kann MADV_ZERO implementiert oder emuliert werden? ___ tag123sharedmemory ___ Speicher, auf den mehrere Programme gleichzeitig zugreifen können ___ tag123mmap ___ mmap ist ein POSIX-kompatibler Unix-Systemaufruf, der Dateien oder Geräte in den Speicher ablegt. ___ answer32327475 ___

Sie können wahrscheinlich nicht tun, was Sie wollen (im Benutzerbereich, ohne den Kernel zu hacken). Beachten Sie, dass das Schreiben von Nullseiten aufgrund des Seitencache möglicherweise keine physische Datenträger-IO verursacht.

Sie können ein Dateisegment in einer Sparse-Datei , aber einige Dateisysteme (z. B. VFAT) haben keine Löcher oder Sparse-Dateien. Siehe lseek (2) mit %code% , ftruncate(2)

    
___ tag123alarmieren ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Ich würde gerne in der Lage sein, einen Bereich einer Dateispeicherzuordnung auf null zu setzen, ohne irgendeinen io aufzurufen (um sequentiell riesige Dateien effizient zu überschreiben, ohne dass ein Plattenlesevorgang auftritt).

Doing %code% wird dazu führen, dass Seiten von der Festplatte gelesen werden, wenn sie nicht bereits im Speicher sind, selbst wenn die gesamten Seiten überschrieben werden, wodurch die Festplattenleistung komplett verloren geht.

Ich würde gerne etwas wie %code% machen können, was den Bereich auf Null setzen würde (ähnlich wie bei %code% ), um beim Zugriff auf den angegebenen Bereich anstelle von regulären io-Seitenfehlern Seitenfehler zu verursachen.

Leider %code% existiert nicht. Auch wenn das entsprechende Flag %code% in %code% und kann mit %code% verwendet werden, um einen ähnlichen Effekt zu erzielen, allerdings ohne sofortige Cross-Process-Kohärenz.

Eine mögliche Alternative wäre, %code% zu verwenden. Dies kann jedoch meines Erachtens eine Dateifragmentierung verursachen und blockiert auch andere Vorgänge während des Abschlusses, was mich hinsichtlich seiner langfristigen Leistungsauswirkungen unsicher macht. Meine Erfahrung mit Windows ist, dass die ähnliche %code% kann beim Aufruf erhebliche Leistungsspitzen verursachen.

Meine Frage ist, wie man %code% für gemeinsame Zuordnungen implementieren oder emulieren kann, vorzugsweise im Benutzermodus?

1. %code%

Ich habe gelesen, dass es vorgeschlagen ist, %code% einfach in den ausgewählten Bereich zu lesen Allerdings bin ich mir nicht ganz sicher, was "Lesen in den Bereich" bedeutet und wie man es macht. Ist es wie ein %code% von %code% in den Speicherbereich? Nicht sicher, wie dies einen regulären Seitenfehler beim Zugriff vermeiden würde?

  

Lies für Linux einfach %code% in den ausgewählten Bereich. Das   Kernel optimiert diesen Fall bereits für anonyme Mappings.

     

Wenn es sich im Allgemeinen als zu schwierig erweist, es zu implementieren, kann ich es tun   vorschlagen MADV_ZERO sollte diesen Effekt haben: genau wie das Lesen von
  / dev / zero in den Bereich, aber immer effizient.

EDIT: Nach dem Thread ein bisschen weiter stellt sich heraus, dass es tatsächlich geht nicht funktionieren.

  

Es macht keine Tricks, wenn Sie mit einem geteilten Mapping zu tun haben.

2. %code%

Eine Vermutung, es unter Linux zu implementieren (dh nicht in einer Benutzeranwendung, was ich bevorzugen würde), könnte einfach durch Kopieren und Ändern von %code% erfolgen, dh %code% zu verwenden %code% anstelle von %code% . Allerdings bin ich ein bisschen über den Kopf, wenn ich das errate, vor allem, weil ich nicht ganz verstehe, was der Code um den %code% macht:

%Vor%     
___
1
Antwort

Wie kann MADV_ZERO implementiert oder emuliert werden?

Ich würde gerne in der Lage sein, einen Bereich einer Dateispeicherzuordnung auf null zu setzen, ohne irgendeinen io aufzurufen (um sequentiell riesige Dateien effizient zu überschreiben, ohne dass ein Plattenlesevorgang auftritt). Doing std...
31.08.2015, 23:56