Antwort

Proper Einstellungen zur Vermeidung intensiver SWAP-Nutzung

5 Antworten

panz

Kunde, bbp_participant, Gemeinschaft, 10 Antworten.

Profil besuchen

vor 9 Jahren #113597

Hallo,

 

Ich führe StrategyQuant auf einem Quad-Core-Computer mit 8G physischem RAM aus. Ich habe StrategyQuant 3 Threads zugewiesen und ihm erlaubt, 7G RAM zu verwenden, d.h. ich habe beim Starten des Programms die folgende Java VM-Option verwendet:

StrategyQuant64.exe -J-Xmx7g

 

Mein Problem ist, dass StrategyQuant beim Fortschreiten der Entwicklung viel SWAP-Speicher (Auslagerungsdatei auf der Festplatte) verwendet, um zu vermeiden, dass das physische RAM-Limit überschritten wird. Dies verlangsamt die Abläufe erheblich. Obwohl ich meine Festplatte auf SSD aufrüsten und meine RAM-Größe erhöhen werde, wird es immer noch zu einem Engpass an einem gewissen Punkt kommen.

 

Meine Frage lautet: Wie skaliert die Speichernutzung ungefähr mit den folgenden Parametern? Und gibt es eine Reihe von empfohlenen/Referenzeinstellungen, auf deren Grundlage wir die Hardware-Spezifikationen und die Skalierungsregel anpassen können? 

* Anzahl der Fäden

* Größe der Bevölkerung

* Maximale Anzahl von Generationen (unter der Annahme, dass keine Stagnation eintritt) 

* Maximale Anzahl von Strategien, die in der Datenbank gespeichert werden

* Gesamtzahl der Balken für historische IS- und/oder OOS-Daten

* Anzahl der aktivierten Bausteine

* Maximale Baumtiefe für die Erzeugung von Zufallsbevölkerungen

* Sonst noch etwas?

 

Danke!

-Zhong

 

 

 

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #129821

Hallo,

 

Es handelt sich nicht um eine Auslagerung des Systemspeichers. SQ verwendet Dateien, um Strategiedaten zu speichern, so dass nicht alles im Speicher gehalten werden muss, und auch, um einen Absturz zu verhindern.

In der Regel wird jede Strategie in der Datenbank auch als Datei gespeichert, und die Liste der Trades (die am meisten Speicherplatz beansprucht) wird in einer temporären Datei gespeichert.

 

Das Einzige, was sich wirklich darauf auswirkt, ist die Anzahl der Strategien in Datenbanken, sowohl in der Ergebnisdatenbank als auch in der letzten Generation.

Man kann sie also verringern, indem man die Populationsgröße und die Gesamtzahl der Datenbanken verringert, aber die beste Lösung wäre der Kauf einer schnelleren SSD-Disk.

 

Aber selbst mit einer normalen Festplatte sollte dies nicht so zeitaufwändig sein, der zeitaufwändigste Prozess ist die Durchführung des Backtests, der einige Male mehr Zeit in Anspruch nimmt als das Schreiben/Lesen von Dateien auf die Festplatte.

Mark
StrategyQuant Architekt

0

panz

Kunde, bbp_participant, Gemeinschaft, 10 Antworten.

Profil besuchen

vor 9 Jahren #129825

Mark,

 

Vielen Dank für das tolle Produkt und die schnelle Antwort!

 

Ich habe gestern eine 240GB SSD installiert und mein Windows 7 Professional 64-bit darauf migriert, zusammen mit StrategyQuant. Ich habe die Evolution über Nacht laufen lassen, diesmal mit der Beschränkung auf nur 2 Threads (ich habe einen Quad-Core), 250 Populationsgröße, 2000 für die Datenbank mit ziemlich strengen Regeln (ich vermute, dass es nur wenige schaffen können) und 6G maximaler RAM-Nutzung (ich habe insgesamt 8G RAM). Leider lässt sich das StrategyQuant-Fenster heute Morgen nicht mehr anzeigen. Windows reagiert zwar noch auf einige Befehle, aber sehr träge und halb eingefroren. StrategyQuant scheint minimiert zu sein und das Wiederherstellen oder Maximieren bringt das Fenster nicht zum Vorschein. Der "System Explorer" zeigt eine RAM-Auslastung von 76% und eine CPU-Auslastung von 55%, StrategyQuant verwendet 4071MB RAM und 5026MB SWP (siehe Anhang).

 

Was die SWAP-Nutzung angeht, so vermute ich, dass die Java VM dies automatisch tut. Wenn ich den Parameter so einstelle, dass die Java VM maximal 6 GB verwenden darf, das Programm aber tatsächlich 12 GB verwendet, wird die Java VM vermutlich automatisch die zusätzlichen 6 GB zwischen dem physischen RAM und der Auslagerungsdatei auf der Festplatte auslagern. Natürlich ist dies eine vereinfachte Sichtweise - selbst wenn das RAM-Limit höher eingestellt ist als die tatsächliche Nutzung, findet möglicherweise noch ein Swapping statt.

 

Ich werde dieses Mal eine kleinere Populationsgröße mit 1 Faden versuchen.

 

Schließlich eine Frage: Wenn ich 2 Threads verwende, verdoppelt sich der RAM-Verbrauch ungefähr (zumindest für den Teil, der die aktuelle Bevölkerung speichert), vorausgesetzt, dass keine Begrenzung durch den Befehlszeilenparameter erfolgt?

 

P.S. Ich habe gerade den StrategyQuant-Prozess gewaltsam beendet, und jetzt ist die RAM-Auslastung wieder bei 22% und die CPU bei 2%. Das System ist wieder reaktionsfähig. Dieser Desktop ist StrategyQuant gewidmet, so dass kein anderer teurer Prozess lief - außer TeamViewer für den Fernzugriff, der etwa 500MB RAM und 1 bis 3% CPU benötigt. Gibt es irgendwelche Bedenken, dass TeamViewer oder andere Remote-Desktop-Anwendungen nicht gut mit StrategyQuant zusammenarbeiten?

 

Danke,

-Zhong

0

panz

Kunde, bbp_participant, Gemeinschaft, 10 Antworten.

Profil besuchen

vor 9 Jahren #129829

Nur um weitere Informationen hinzuzufügen. 

 

Bei meinem oben erwähnten Nachtlauf wurden die folgenden Parameter verwendet:

StrategyQuant64.exe -J-server -J-Xmx6g -J-XX:+ParallelGC verwenden -J-XX:+ParallelOldGC verwenden -J-XX:+ExpliziteGC deaktivieren -J-XX:+AggressiveOpts
 
Ich habe einen neuen Lauf mit verschiedenen Garbage-Collector-Tuning, das ich online gefunden habe, versucht:
StrategyQuant64.exe -J-Xmx6g -J-XX:+UseConcMarkSweepGC
 
Nach etwa 1 Stunde scheint der Prozess wieder ins Stocken zu geraten, da die Generierung jedes Gens länger und länger dauert. Ich habe VisualVM dieses Mal ausgeführt, um die Anwendungsleistung zu beobachten und hoffe, herauszufinden, warum die Verlangsamung passiert, so kann ich sagen, dass, wenn dies geschah, RAM-Nutzung war nähert sich Grenze, die ich eingestellt, und die GC-Aktivität schoss.
 
So scheint es für meine 6G RAM Grenze zu StrategyQuant kann ich nur bis etwa 170 in der Bevölkerung Größe mit 2 Threads zu erreichen, und darüber hinaus ist die Verlangsamung erheblich.
 
Bei den historischen Daten handelt es sich übrigens um 1-Minuten-Bar-Daten des SPY seit April 2007, die 7 Jahre abdecken (das letzte Jahr wird noch nicht verwendet - diese sind für Stabilitätstests reserviert). Vielleicht macht dieser große Umfang an historischen Daten die Bewertung der Fitness auch langsam?
 
 

0

geektrader

Customer, bbp_participant, community, 522 replies.

Profil besuchen

vor 9 Jahren #129832

Ich habe über Wochen hinweg umfangreiche Tests durchgeführt und kann Ihnen folgendes sagen, wenn Sie Strategien mit diesen Parametern generieren:

 

Nur 1 Gewinde (!)

14 Jahre an Daten

30M Zeitrahmen

Ausgewählter Modus "Nur Zeitrahmen

Alle verwendeten Indikatoren

250 Populationsgrößen (aber Dezimierungsfaktor 10 für die erste Zufallsgenerierung, so dass zunächst 2500 erzeugt werden)

unbegrenzte Anzahl von Generationen, aber Anhalten der Evolution, wenn die Fitness 3 Generationen lang stagniert

Speicherung von maximal 50 Strategien in der Datenbank

 

Sie kommen mit 4 GB pro Instanz aus, wenn Sie diese Startlinie verwenden, und der Speicher in Java wird nicht knapp, und SQ beginnt nicht mit dem Auslagern: StrategyQuant64.exe -J-server -J-Xmx4g -J-XX:+ParallelGC verwenden -J-XX:+ParallelOldGC verwenden -J-XX:+ExpliziteGC deaktivieren -J-XX:+AggressiveOptionen

 

Sobald man die Populationsgröße über 250 erhöht, steigt der RAM-Verbrauch extrem an, ich weiß nicht warum, aber es ist so.

 

Wenn man von M30 zu M15 wechselt, verdoppelt sich der RAM-Verbrauch fast, ebenso wenn man dann zu M5 und wieder zu M1 wechselt (absolut unmöglich, damit auf Dauer zu generieren, ohne der Instanz mit nur 1 Thread mindestens 32GB RAM zuzuweisen!)

 

Wenn Sie mehr als 1 Thread zulassen, verdoppelt sich auch die RAM-Auslastung von 1 auf 2 Threads und steigt stark an, wenn Sie noch mehr zulassen, während die CPU-Auslastung nicht wirklich viel besser ist. Während der Generierung von Strategien (ich habe dies bereits als "Bug" gemeldet), verwendet SQ im Durchschnitt fast immer nur 1 Kern. Es lohnt sich also nicht wirklich, mehr als 1 Thread zuzuweisen, wenn man Strategien generiert, es verschwendet nur Arbeitsspeicher (für den Optimierer allerdings, er nutzt alle Kerne gut aus).

 

 

Sie sehen also, wenn Sie M1 verwenden, haben Sie mit 6 GB RAM keine Chance, absolut nicht. Versuchen Sie die oben vorgeschlagenen Dinge für jetzt und Sie werden in Ordnung sein, laufen SQ für Tage ohne Probleme. Meiner Meinung nach muss SQ aber noch viel effizienter werden, um wirklich brauchbar zu sein. Ich habe große Hoffnungen für V4 mit dem....


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

panz

Kunde, bbp_participant, Gemeinschaft, 10 Antworten.

Profil besuchen

vor 9 Jahren #129834

Danke geektrader für diese ausführliche Antwort! Das war wirklich hilfreich. Ich versuche Ihre Vorschläge; außerdem werde ich bis morgen 16G RAM an Bord haben, um die Situation zu verbessern.

 

Zwei Informationen möchte ich hinzufügen:

 

(1) Ich habe vorhin einen Fehler gemacht, indem ich die 1-Minuten-Bar-Daten von 4 anderen Symbolen in "Zusätzliche Daten für Tests" aufgenommen habe. Ich dachte, das wäre für den Test nach der Entwicklung, aber offensichtlich lag ich falsch - die Leistung der zusätzlichen Daten wurde zusammen mit den Hauptdaten während der Entwicklung berechnet. Durch das Deaktivieren der zusätzlichen Daten ist die Entwicklung viel schneller und die RAM-Nutzung geringer.

 

(2) Da StrategyQuant während der Ausführung viel auf der Festplatte liest/schreibt (mehrere GB temporäre Dateien werden während der Entwicklung auf die Festplatte geschrieben), wird die Verwendung einer SSD dringend empfohlen. Wenn man jedoch genügend RAM zur Verfügung hat, besteht eine weitere Möglichkeit zur Beschleunigung darin, das gesamte Programm auf einem virtuellen RAM-Laufwerk laufen zu lassen (kann z. B. mit ImDisk leicht erstellt werden), das sogar um ein Vielfaches schneller als SSD ist. Der Nachteil ist natürlich, dass weniger RAM für das Programm selbst zur Verfügung steht, und RAM ist flüchtig, so dass bei einem Stromausfall oder einem unerwarteten Neustart/Herunterfahren alle Ergebnisse verloren gehen. Vielleicht ist es trotzdem einen Versuch wert - ich werde es tun, wenn die 16G eintrifft und hier berichten, wenn ein gutes Ergebnis erzielt wird.

 

-Zhong

0

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)