2016-04-23 13 views
2

Um eine genauere Messung der maximalen Lebensdauer einiger Programme zu erhalten, würde ich gerne das Laufzeitsystem haben, um häufigere Speicherbereinigungen durchzuführen. Gibt es Flags für GHC, die direkt/indirekt zu mehr GC führen? Ich weiß, performGC einfügen kann, dass in gewissem Umfang, aber es gibt einige Programme zu instrumentieren.machen GHC mehr GCs tun?

+0

Spiele mit [GC-Einstellungen] (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime-control.html) ist wahrscheinlich kein guter Weg, die Speichernutzung zu messen - die Ergebnisse kann immer noch ungenau sein. Bitte sehen Sie sich die Seite [GHC-Speicherprofilerstellung] an (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/prof-heap.html). –

+0

@ RafałRawicki Profiling ist keine Option für mich, weil es die Optimierung stört – rem

Antwort

2

Für eine direkte Erhöhung der GCs können Sie das Flag auf etwas niedriger als 0,3 setzen, um die Frequenz des Leerlauf-GC zu erhöhen. Sie können -c auch so einstellen, dass ein Komprimierungsalgo verwendet wird, der die Speicherauslastung im Allgemeinen reduzieren sollte (um näher an den tatsächlich verwendeten Speicher als an den GC-Overhead zu kommen). Sie können auch -Asize auf etwas niedriger als 512k setzen, was bei einem kleineren Zuordnungsbereich im Allgemeinen die Anzahl erhöhen sollte. von GCs.

0

Ich würde davon abraten, eine höhere Häufigkeit von GCs zu erzwingen, wenn Sie nicht speziell eine besser geeignete GC-Optimierung für Ihren Code kennen. GC-Läufe können sehr teuer sein.

Ja, Ihr Programm verwendet "zu viel" Speicher, aber diese Nachsicht macht den GC gut. Wenn Sie einen Overhead von 2-3 Mal des Speichers zulassen, der unbedingt benötigt wird (keine Zahlen für GHCs GC, obwohl), können GC-Läufe viel seltener geplant werden.

Sie sagen, dass Sie die Speicherprofilerstellung nicht aktivieren möchten, da dies die Optimierungen stört, aber das Erzwingen der GC möglicherweise noch schlimmer ist. Wenn Sie den Druck auf den Heap zu stark erhöhen, können Sie GC-Läufe benchmarken.

+0

Vielleicht habe ich das nicht klar gemacht, aber das ist kein Leistungsproblem. Mein einziger Zweck ist es, eine genauere Messung der Live-Größe zu erhalten. Das Laufzeitsystem erhält die Standgröße der Live-Größe von GC, so dass häufiger GC mehr Punkte bedeutet. Es ist mir egal, ob die Gesamtleistung schlechter wird, solange die Messung besser ist. – rem

+0

@rem: OK, das habe ich falsch verstanden. In einem anderen Kommentar sagten Sie, dass das Profiling die Optimierung stört, und ich vermutete, dass es um die Leistung ging. Vielleicht möchten Sie noch überprüfen, ob die Profilerstellung wirklich zu viel Leistung kostet, wenn Sie nur mit "-prof" kompilieren, aber keine Kostenstellen kommentieren. Dann laufe mit z.B. '+ RTS -hb'. Fügen Sie '-i' hinzu, um das Abtastintervall zu steuern. – sapanoia

+0

"Vielleicht möchten Sie noch überprüfen, ob das Profiling wirklich zu viel Leistung kostet". In diesem Zusammenhang bedeutet "zu viel Leistung" den Overhead der Live-Größe gegenüber der realen Live-Größe. Aber wie sagt man dann, wenn es keine genauere Messung der realen Live-Größe gibt? – rem