Risposta

Proper evitare l'utilizzo intensivo di SWAP

5 risposte

panz

Cliente, bbp_partecipante, comunità, 10 risposte.

Visita il profilo

9 anni fa #113597

Ciao,

 

Sto eseguendo StrategyQuant su un computer quad-core con 8G di RAM fisica. Ho assegnato 3 thread a StrategyQuant e gli ho permesso di usare 7G di RAM, cioè ho usato la seguente opzione Java VM all'avvio del programma:

StrategyQuant64.exe -J-Xmx7g

 

Il mio problema è che quando l'evoluzione progredisce, StrategyQuant utilizza molta memoria SWAP (file di pagina sul disco rigido) per evitare di superare il limite della RAM fisica. Questo rallenta notevolmente le cose. Anche se aggiornerò il mio disco rigido con un SSD e aumenterò la dimensione della RAM, a un certo punto si presenterà comunque un collo di bottiglia.

 

La mia domanda è: approssimativamente come scala l'utilizzo della memoria con i seguenti parametri? Esiste un insieme di impostazioni consigliate/di riferimento in base alle quali possiamo regolare in base alle specifiche hardware e alla regola di scalatura? 

* Numero di fili

* Dimensione della popolazione

* Numero massimo di generazioni (supponendo che non si verifichi una stagnazione) 

* Numero massimo di strategie da mantenere nella banca dati

* Numero totale di barre per i dati storici IS e/o OOS

* Numero di blocchi abilitati

* Profondità massima dell'albero per la generazione casuale della popolazione

* Nient'altro?

 

Grazie!

-Zhong

 

 

 

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #129821

Salve,

 

non si tratta di uno swap della memoria di sistema, SQ usa i file per memorizzare i dati della strategia in modo da non doverli tenere tutti in memoria e anche per prevenire gli arresti anomali.

In genere salva ogni strategia nella banca dati anche come file e salva l'elenco delle operazioni (la cosa che consuma più memoria) in un file temporaneo.

 

L'unica cosa che influisce realmente è il numero di strategie nelle banche dati, sia nella banca dati dei risultati che in quella di ultima generazione.

È quindi possibile ridurlo utilizzando una popolazione di dimensioni inferiori e un numero totale di banche dati, ma la soluzione migliore sarebbe quella di acquistare un disco SSD più veloce.

 

Ma anche con un normale disco rigido non dovrebbe essere così dispendioso in termini di tempo; il processo più dispendioso è l'esecuzione del backtest, che è poche volte più dispendioso in termini di tempo rispetto alla scrittura/lettura dei file sul disco.

Marchio
Architetto StrategyQuant

0

panz

Cliente, bbp_partecipante, comunità, 10 risposte.

Visita il profilo

9 anni fa #129825

Mark,

 

Grazie per l'ottimo prodotto e la risposta rapida!

 

Ieri ho installato un SSD da 240 GB e vi ho migrato il mio Windows 7 professional 64 bit, insieme a StrategyQuant. Ho eseguito l'evoluzione durante la notte, questa volta limitando a soli 2 thread (ho un quad-core), 250 dimensioni della popolazione, 2000 per la banca dati con regole piuttosto rigide (quindi sospetto che solo pochi riescano a entrare) e 6G di utilizzo massimo della RAM (ho 8G di RAM totale). Purtroppo questa mattina la finestra StrategyQuant non può più essere visualizzata. Windows risponde ancora ad alcuni comandi, ma è molto lento e semi-congelato. StrategyQuant sembra essere ridotto a icona e ripristinarlo o massimizzarlo non fa apparire la finestra. "System Explorer" mostra che l'utilizzo della RAM è di 76% e della CPU di 55%, StrategyQuant utilizza 4071MB di RAM e 5026MB di SWP (vedi allegato).

 

Per quanto riguarda l'utilizzo dello SWAP, ritengo che Java VM lo faccia automaticamente. Se ho impostato il parametro per limitare l'uso di Java VM a 6G al massimo, ma il programma ne usa effettivamente 12G, credo che Java VM gestisca automaticamente lo swapping tra la RAM fisica e il file di pagina su disco per i 6G in più. Naturalmente si tratta di una visione semplicistica: anche con il limite di RAM impostato più alto rispetto all'utilizzo effettivo è possibile che avvenga comunque uno swapping.

 

Questa volta proverò con una popolazione più piccola con 1 filo.

 

Infine una domanda: quando utilizzo 2 thread, l'utilizzo della RAM raddoppia circa (almeno per la parte che memorizza la popolazione corrente), supponendo che nessun limite provenga dal parametro della riga di comando?

 

P.S. Ho appena terminato il processo StrategyQuant con la forza e ora l'utilizzo della RAM è tornato a 22% e la CPU a 2%. Il sistema è di nuovo reattivo. Questo desktop è dedicato a StrategyQuant, quindi non era in esecuzione nessun altro processo costoso, tranne TeamViewer per l'accesso remoto che occupa circa 500 MB di RAM e da 1 a 3% di CPU. È possibile che TeamViewer o altre applicazioni di desktop remoto non funzionino bene con StrategyQuant?

 

Grazie,

-Zhong

0

panz

Cliente, bbp_partecipante, comunità, 10 risposte.

Visita il profilo

9 anni fa #129829

Solo per aggiungere ulteriori informazioni. 

 

L'esecuzione notturna di cui ho parlato sopra ha utilizzato i seguenti parametri:

StrategyQuant64.exe -J-server -J-Xmx6g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts
 
Ho provato una nuova esecuzione con una diversa messa a punto del garbage collector che ho trovato online:
StrategyQuant64.exe -J-Xmx6g -J-XX:+UseConcMarkSweepGC
 
Dopo circa un'ora il processo sembra bloccarsi di nuovo e ogni gene impiega sempre più tempo per essere generato. Questa volta stavo eseguendo VisualVM per osservare le prestazioni dell'applicazione e sperare di scoprire il motivo del rallentamento, quindi posso dire che quando è successo, l'utilizzo della RAM si stava avvicinando al limite che avevo impostato e l'attività GC è aumentata.
 
Quindi sembra che per il mio limite di 6G di RAM a StrategyQuant posso arrivare solo a circa 170 in dimensione di popolazione con 2 thread, e oltre questo il rallentamento è significativo.
 
BTW i dati storici sono dati di barre a 1 minuto di SPY dall'aprile 2007 che coprono 7 anni (non sto ancora usando l'ultimo anno - quelli sono riservati ai test di stabilità). Forse questa grande dimensione dei dati storici rende lenta anche la valutazione della idoneità?
 
 

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

9 anni fa #129832

Ho effettuato test approfonditi per settimane e posso dirvi quanto segue quando si generano strategie con questi parametri:

 

1 solo filo (!)

14 anni di dati

Periodo di tempo di 30 milioni di euro

Modalità solo Timeframe selezionato

Tutti gli indicatori utilizzati

250 dimensioni della popolazione (ma fattore di decimazione di 10 per la generazione casuale iniziale, quindi all'inizio ne vengono generate 2500)

Numero illimitato di generazioni, ma arresto dell'evoluzione se la fitness ristagna per 3 generazioni

memorizzazione di un massimo di 50 strategie nel database

 

Usando questa linea di lancio, si può arrivare a 4 GB per istanza e non si esaurirà la memoria in Java né SQ inizierà a fare swap: StrategyQuant64.exe -J-server -J-Xmx4g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts

 

Una volta che si aumenta la dimensione della popolazione oltre i 250, l'utilizzo della RAM aumenta moltissimo, non so perché, ma è così.

 

Quando si passa a M15 da M30, l'utilizzo di RAM quasi raddoppia, lo stesso se si passa a M5 e di nuovo a M1 (assolutamente impossibile generare con questo nel lungo periodo senza assegnare almeno 32 GB di RAM all'istanza con un solo thread).

 

Se si consente l'utilizzo di più di un thread, anche l'utilizzo della RAM raddoppia da 1 a 2 thread e aumenta pesantemente se si consente un numero ancora maggiore di thread, mentre l'utilizzo della CPU non migliora di molto. Durante la generazione delle strategie (l'ho già segnalato come "bug"), SQ utilizza quasi sempre un solo core in media. Quindi non vale la pena di assegnare più di un thread alla generazione delle strategie, si spreca solo RAM (per l'ottimizzatore, invece, si usano benissimo tutti i core).

 

 

Quindi, usando M1, non avrete alcuna possibilità con 6GB di RAM, assolutamente no. Provate le cose suggerite sopra per ora e sarete in grado di far funzionare SQ per giorni senza problemi. A mio parere, però, SQ deve diventare MOLTO PIÙ EFFICIENTE per essere davvero utilizzabile. Ho grandi speranze per la V4 con questo....


🚀 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

Cliente, bbp_partecipante, comunità, 10 risposte.

Visita il profilo

9 anni fa #129834

Grazie geektrader per la risposta così dettagliata! È stato davvero utile. Sto provando i tuoi suggerimenti; inoltre entro domani avrò 16G di RAM a bordo per migliorare la situazione.

 

Vorrei aggiungere due informazioni:

 

(1) Prima ho commesso un errore includendo i dati delle barre a 1 minuto di altri 4 simboli in "Dati aggiuntivi per i test". Pensavo che servisse per i test dopo l'evoluzione, ma ovviamente mi sbagliavo: le prestazioni dei dati aggiuntivi sono state calcolate insieme a quelle dei dati principali durante l'evoluzione. Deselezionando i dati aggiuntivi, l'evoluzione è molto più veloce e l'utilizzo della RAM è inferiore.

 

(2) Poiché StrategyQuant esegue molte letture/scritture su disco durante l'esecuzione (durante l'evoluzione vengono scritti su disco diversi GB di file temporanei), si raccomanda vivamente l'uso di un SSD. Ma se si ha abbastanza RAM a disposizione, un'altra possibilità di accelerazione è quella di eseguire l'intero programma su un'unità virtuale RAM (che può essere creata facilmente, ad esempio con ImDisk), che sarà più volte più veloce anche dell'SSD. Il rovescio della medaglia è ovviamente la minore quantità di RAM disponibile per il programma stesso, e la RAM è volatile, quindi in caso di interruzione di corrente o di riavvio/spegnimento imprevisto tutti i risultati andranno persi. Vale comunque la pena di provare - lo farò quando arriverà il 16G e riferirò qui se si otterranno buoni risultati.

 

-Zhong

0

Stai visualizzando 5 risposte - da 1 a 5 (di 5 totali)