Respuesta

Proper ajustes para evitar el uso intensivo de SWAP

5 respuestas

panz

Cliente, bbp_participant, comunidad, 10 respuestas.

Visitar el perfil

hace 9 años #113597

Hola,

 

Estoy ejecutando StrategyQuant en un ordenador de cuatro núcleos con 8G de RAM física. He asignado 3 hilos a StrategyQuant y le he permitido utilizar 7G de RAM, es decir, he utilizado la siguiente opción de Java VM al iniciar el programa:

StrategyQuant64.exe -J-Xmx7g

 

Mi problema es que cuando la evolución avanza, StrategyQuant utilizará mucha memoria SWAP (archivo de página en el disco duro) para evitar sobrepasar el límite de RAM física. Esto ralentiza significativamente las cosas. Aunque voy a actualizar mi disco duro a SSD y aumentar mi tamaño de RAM, todavía llegará a un cuello de botella en algún momento.

 

Mi pregunta es, ¿aproximadamente cómo se escala el uso de memoria con los siguientes parámetros? ¿Existe un conjunto de configuraciones recomendadas/de referencia que podamos ajustar según las especificaciones del hardware y la regla de escalado? 

* Número de hilos

* Tamaño de la población

* Número máximo de generaciones (suponiendo que no se produzca estancamiento) 

* Número máximo de estrategias en la base de datos

* Número total de barras para datos históricos IS y/o OOS

* Número de bloques de construcción habilitados

* Profundidad máxima del árbol para generar una población aleatoria

* ¿Algo más?

 

¡¡Gracias!!

-Zhong

 

 

 

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #129821

Hola,

 

no es un intercambio de memoria del sistema, SQ utiliza archivos para almacenar datos de estrategia para no tener que mantenerlos todos en memoria y también como prevención de crash.

En general, guarda cada estrategia en el banco de datos también como un archivo, y guarda la lista de operaciones (lo que consume más memoria) en un archivo temporal.

 

Lo único que realmente afecta a esto es el número de estrategias en los bancos de datos, tanto en el banco de datos de resultados como en la última generación.

Así que puedes disminuirlo utilizando un tamaño de población y un número total de bancos de datos menores, pero la mejor solución sería comprar un disco SSD más rápido.

 

Pero incluso con un disco duro normal esto no debería llevar tanto tiempo, el proceso que más tiempo lleva es ejecutar el backtest, que es varias veces más costoso que escribir/leer archivos en el disco.

Mark
Arquitecto de StrategyQuant

0

panz

Cliente, bbp_participant, comunidad, 10 respuestas.

Visitar el perfil

hace 9 años #129825

Marca,

 

Gracias por el gran producto y la rápida respuesta.

 

Ayer instalé un SSD de 240 GB y migré mi Windows 7 profesional de 64 bits en él, junto con StrategyQuant. Ejecuté la evolución durante la noche, esta vez limitando a sólo 2 hilos (tengo quad-core), 250 tamaño de la población, 2000 para el banco de datos con reglas bastante estrictas (por lo que sospecho que sólo unos pocos pueden hacerlo en), y 6G máximo de uso de RAM (tengo 8G RAM total). Por desgracia, esta mañana la ventana StrategyQuant ya no se puede mostrar. Windows sigue respondiendo a algunos comandos, pero muy muy lento y semi-congelado. StrategyQuant parece estar minimizado y al restaurarlo o maximizarlo no aparece la ventana. El "Explorador del Sistema" muestra que el uso de RAM está en 76% y el de CPU en 55%, StrategyQuant está usando 4071MB de RAM, y 5026MB de SWP (ver adjunto).

 

En cuanto al uso de SWAP, creo que Java VM lo hace automáticamente. Si configuro el parámetro para limitar Java VM a un uso máximo de 6G, pero el programa realmente utiliza 12G, supongo que Java VM se encargará automáticamente del intercambio entre la RAM física y el archivo de página en el disco para los 6G adicionales. Por supuesto, esto es una visión simplista - incluso con el límite de RAM fijado por encima del uso real, es posible que se siga produciendo algún intercambio.

 

Esta vez probaré con una población más pequeña y 1 hilo.

 

Por último, una pregunta: cuando utilizo 2 hilos, ¿se duplica aproximadamente el uso de RAM (al menos para la parte que almacena la población actual), suponiendo que no haya ningún límite procedente del parámetro de la línea de comandos?

 

P.D. Acabo de terminar el proceso StrategyQuant por la fuerza, y ahora el uso de RAM vuelve a 22% y CPU a 2%. El sistema responde de nuevo. Este escritorio está dedicado a StrategyQuant por lo que ningún otro proceso caro se estaba ejecutando - excepto TeamViewer para el acceso remoto que toma alrededor de 500 MB de RAM y 1 a 3% CPU. ¿Hay algún riesgo de que TeamViewer u otra aplicación de escritorio remoto no funcione bien con StrategyQuant?

 

Gracias,

-Zhong

0

panz

Cliente, bbp_participant, comunidad, 10 respuestas.

Visitar el perfil

hace 9 años #129829

Sólo para añadir más información. 

 

En la ejecución nocturna que mencioné anteriormente se utilizaron los siguientes parámetros:

StrategyQuant64.exe -J-server -J-Xmx6g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts
 
Probé una nueva ejecución con diferentes ajustes del recolector de basura que encontré en Internet:
StrategyQuant64.exe -J-Xmx6g -J-XX:+UseConcMarkSweepGC
 
Justo después de 1 hora el proceso parece pararse de nuevo con cada gen tardando más y más en generarse. Yo estaba corriendo VisualVM este tiempo para ver el rendimiento de la aplicación y la esperanza de averiguar por qué la desaceleración ocurre, así que puedo decir que cuando esto sucedió, el uso de RAM se acercaba límite que he establecido, y la actividad GC se disparó.
 
Así que parece que para mi 6G RAM límite a StrategyQuant sólo puedo llegar a alrededor de 170 en el tamaño de la población con 2 hilos, y más allá de que la desaceleración es significativa.
 
Por cierto, los datos históricos son datos de barras de 1 minuto de SPY desde abril de 2007 y abarcan 7 años (aún no se ha utilizado el último año, que se reserva para las pruebas de estabilidad). Tal vez este gran tamaño de los datos históricos hace que sea lento para evaluar la aptitud también?
 
 

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 9 años #129832

He realizado pruebas exhaustivas durante semanas y puedo decirle lo siguiente cuando las estrategias de generación con estos parámetros:

 

Sólo 1 hilo (!)

14 años de datos

30 millones de euros

Modo de sólo marco temporal seleccionado

Todos los indicadores utilizados

250 de tamaño de población (pero factor de diezmación de 10 para la generación aleatoria inicial, por lo que se generan 2500 al principio)

número ilimitado de generaciones, pero se detiene la evolución si la aptitud se estanca durante 3 generaciones

almacenar un máximo de 50 estrategias en la base de datos

 

Te las arreglarás con 4GB por instancia usando esta línea de lanzamiento y no te quedarás sin memoria en Java ni SQ empezando a intercambiar: StrategyQuant64.exe -J-server -J-Xmx4g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts

 

Una vez que aumentas el tamaño de la población por encima de 250, el uso de RAM aumenta extremadamente, no sé por qué, pero es así.

 

Cuando cambias a M15 desde M30, el uso de RAM casi se duplica, lo mismo si luego pasas a M5 y de nuevo a M1 (¡absolutamente imposible generar con eso a largo plazo sin asignar al menos 32GB de RAM a la instancia con sólo 1 thread!)

 

Si permite más de 1 hilo, el uso de RAM también se duplica de 1 a 2 hilos y sube mucho si permite incluso más, mientras que el uso de CPU no es realmente mucho mejor. Durante la generación de estrategias (ya he informado de esto como un "bug"), SQ utiliza casi siempre sólo 1 núcleo de media. Así que realmente no vale la pena asignar más de 1 hilo al generar estrategias, sólo desperdicia RAM (para el Optimizador, sin embargo, utiliza todos los núcleos muy bien).

 

 

Así que ya ves, usando M1, no tendrás ninguna oportunidad con 6GB de RAM, absolutamente no. Prueba las cosas sugeridas arriba por ahora y estarás bien ejecutando SQ durante días sin problemas. Sin embargo, en mi opinión, SQ necesita ser MUCHO MÁS EFICIENTE para ser realmente utilizable. Tengo grandes esperanzas para la V4 con eso....


🚀 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_participant, comunidad, 10 respuestas.

Visitar el perfil

hace 9 años #129834

Gracias geektrader por una respuesta tan detallada. Ha sido de gran ayuda. Estoy tratando de sus sugerencias, también por mañana voy a tener 16G RAM a bordo para mejorar la situación.

 

Me gustaría añadir dos datos:

 

(1) Antes cometí un error al incluir datos de barras de 1min de otros 4 símbolos en "Datos adicionales para pruebas". Pensé que era para probar después de la evolución, pero obviamente me equivoqué - el rendimiento de los datos adicionales se calculó junto con los datos principales durante la evolución. Desmarcando los datos adicionales la evolución es mucho más rápida y el uso de RAM menor.

 

(2) Dado que StrategyQuant realiza muchas lecturas/escrituras en disco durante la ejecución (se escribirían varios GB de archivos temporales en el disco durante la evolución), se recomienda encarecidamente el uso de SSD. Pero si uno tiene suficiente RAM de sobra, otro posible aumento de velocidad es ejecutar todo el programa en una unidad virtual RAM (se puede crear fácilmente por ejemplo, ImDisk), que será varias veces más rápido incluso que SSD. La desventaja es, por supuesto, menos RAM disponible para el programa en sí, y la RAM es volátil por lo que si hay una pérdida de energía o un reinicio / apagado inesperado todos los resultados se pierden. Puede todavía vale la pena probar al menos - lo haré cuando llegue el 16G e informar aquí si se obtiene un buen resultado.

 

-Zhong

0

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)