https://github.com/h2o/h2o/blob/master/lib/common/memory.c#L272
Gibt es andere Prozesse, die darauf zugreifen? wenn nicht , warum nicht MAP_PRIVATE
einstellen
Können wir auch mremap(2) anstelle von mmap(2) und munmap(2) auf Plattformen verwenden, die mremap unterstützen?
Gibt es andere Prozesse, die darauf zugreifen? wenn nicht, warum nicht MAP_PRIVATE setzen
Die Absicht der Verwendung von mktemps + fallocate + mmap besteht darin, einen dateigestützten Puffer zu erstellen, sodass die maximale Menge an Speicherplatz, die zum Puffern von Daten verwendet werden kann, durch den _freien Speicherplatz der Festplatte anstelle des Swap_ eingeschränkt wird. MAP_PRIVATE
Konflikt mit diesem Ziel.
Können wir auch mremap(2) anstelle von mmap(2) und munmap(2) auf Plattformen verwenden, die mremap unterstützen?
Dies wäre möglich, wenn die hinzugefügten Seiten nicht anonym sind. Beachten Sie auch, dass, wenn die Verwendung von mremap
eine merkliche Leistungsänderung zeigt, dies bedeuten sollte, dass wir die Wahrscheinlichkeit minimieren sollten, dass Seiten seit dem Aufheben der Zuordnung (entweder dauerhaft oder als Teil der Neuzuordnung) der zugeordneten Seiten verschoben werden. ist die teuerste Operation. Und das bedeutet nicht unbedingt, dass wir mremap
.
Wie auch immer, das Puffern großer Datenmengen ist eine sekundäre Strategie, und ich halte es für keine gute Idee, Anstrengungen in die Verbesserung der Leistung zu investieren. Ich würde es vorziehen, an der Übernahme von Streaming-Anforderungen (siehe Nr. 1357) für andere Handler als den Proxy-Handler zu arbeiten.
buffering large amount of data is a secondary strategy
ist der Punkt.
schätze, das Programm fällt selten in mktemps + fallocate + mmap
.
Streaming-Anfrage, die von einem Handler verarbeitet wird, der keine großen Puffer benötigt, oder?
Meiner Meinung nach ist die Verwendung von gemeinsam genutzten oder privaten mmap-Ressourcen (auch als temporärer Upload-Platzhalter) eine schlechte Idee. $TMP- oder $TMPDIR-Speicherort kann alles in der Benutzerumgebung sein, kann beispielsweise HDD sein.. Es ist nur ein zusätzlicher Schritt, den sich ein Administrator merken muss. Ganz zu schweigen davon, dass das gleichzeitige Hochladen großer Dateien leicht zu Speicherdruck führen würde, wenn $TMP ein Ramdisk-Mount ist.
Ich mag Ihren Vorschlag und Ihre Richtung sehr, um Streaming-Anforderungen mit Nicht-Proxy-Handlern zum Laufen zu bringen. Freue mich und bereit zum Testen!
Hilfreichster Kommentar
Die Absicht der Verwendung von mktemps + fallocate + mmap besteht darin, einen dateigestützten Puffer zu erstellen, sodass die maximale Menge an Speicherplatz, die zum Puffern von Daten verwendet werden kann, durch den _freien Speicherplatz der Festplatte anstelle des Swap_ eingeschränkt wird.
MAP_PRIVATE
Konflikt mit diesem Ziel.Dies wäre möglich, wenn die hinzugefügten Seiten nicht anonym sind. Beachten Sie auch, dass, wenn die Verwendung von
mremap
eine merkliche Leistungsänderung zeigt, dies bedeuten sollte, dass wir die Wahrscheinlichkeit minimieren sollten, dass Seiten seit dem Aufheben der Zuordnung (entweder dauerhaft oder als Teil der Neuzuordnung) der zugeordneten Seiten verschoben werden. ist die teuerste Operation. Und das bedeutet nicht unbedingt, dass wirmremap
.Wie auch immer, das Puffern großer Datenmengen ist eine sekundäre Strategie, und ich halte es für keine gute Idee, Anstrengungen in die Verbesserung der Leistung zu investieren. Ich würde es vorziehen, an der Übernahme von Streaming-Anforderungen (siehe Nr. 1357) für andere Handler als den Proxy-Handler zu arbeiten.