2010-08-31 12 views
10

Quiero poner a prueba las capacidades de gestión de memoria de un programa, por ejemplo (por ejemplo, nombre del programa es director)¿Cómo escribir un programa en C o C++ para que actúe como una memoria y relleno de ciclo de la CPU?

  1. ¿Qué pasa si algunos otros procesos tienen demasiada memoria, y no es demasiado menos memoria para el director ¿correr? ¿Cómo se comporta el director?
  2. ¿Qué sucede si un programa utiliza demasiados ciclos de la CPU mientras se está ejecutando el director?
  3. ¿Qué sucede si la memoria utilizada por los otros programas se libera después de algún tiempo? Cómo el director reclama la memoria y comienza a trabajar con todas las capacidades. etc.

Haré estos experimentos en una máquina Unix. Una forma es limitar la cantidad de memoria disponible para el proceso usando ulimit, pero no hay una buena forma de controlar la utilización del ciclo de la CPU.

Tengo otra idea. ¿Qué sucede si escribo algún programa en C o C++ que actúa como una memoria dinámica y relleno de CPU, es decir, no hace nada útil, pero se come de todos modos la memoria y/o los ciclos de la CPU?

  • Necesito algunas ideas sobre cómo se debe estructurar un programa así. Necesito tener un control dinámico (en tiempo de ejecución) sobre la memoria utilizada y la CPU utilizada.
  • Creo que la creación de muchos subprocesos sería una buena manera de bloquear los ciclos de la CPU. ¿Está bien?

¿Existe un mejor enfoque que pueda usar?

Cualquier idea/sugerencia/comentario son bienvenidos.

Respuesta

10

http://weather.ou.edu/~apw/projects/stress/

estrés es un generador de carga de trabajo deliberadamente simple para sistemas POSIX. Impone una cantidad configurable de CPU, memoria, E/S y tensión de disco en el sistema. Está escrito en C, y es software libre bajo la licencia GPLv2.

La funcionalidad que busca se superpone al conjunto de funciones de "herramientas de prueba". Así que también echa un vistazo a http://ltp.sourceforge.net/tooltable.php.

+0

Gracias @Henj, la descripción es exactamente lo que necesitaba. Comprobaré si puedo cambiar la asignación en tiempo de ejecución. O tal vez modifique la fuente para hacerlo. – Lazer

+0

@Lazer: si no es compatible con el ajuste en tiempo de ejecución, puede hacer la forma estándar * NIX. Comience un montón de procesos, cada uno comiendo algo de CPU y memoria. Para liberar algunos recursos, mate algunos de los procesos de estrés. Para que vuelvan a estar ocupados, comience nuevamente los procesos de estrés correspondientes. – Dummy00001

1

Si usted tiene un solo núcleo de esto es suficiente para poner la tensión en una CPU:

while (true) { 
    x++; 
} 

Si usted tiene una gran cantidad de núcleos, entonces usted necesita un hilo por núcleo.

Lo haces variantemente hambriento agregando unos pocos sueños.

En cuanto a la memoria, solo asigne lotes.

+0

La parte principal es el control dinámico, necesito poder aumentar o disminuir dinámicamente la utilización de la CPU y la memoria. – Lazer

0

Control de memoria dinámica, puede asignar o liberar buffers de un cierto tamaño para usar o liberar más o menos memoria. En cuanto a la utilización de la CPU, tendrá que obtener una función del sistema operativo para comprobar esto y revisarlo periódicamente y ver si necesita hacer un trabajo útil.

1

Hay varios problemas con este tipo de diseño:

  1. En un sistema de memoria virtual, el tamaño de memoria es prácticamente ilimitada. (Bueno, está limitado por su disco duro ...) En la práctica, los sistemas suelen quedarse sin espacio de direcciones mucho antes de que se agoten las existencias de la tienda y el espacio de direcciones es un recurso por proceso.
  2. Cualquier sistema operativo razonable (no en tiempo real) limitará la cantidad de tiempo de CPU y memoria que su proceso puede usar en relación con otros procesos.
  3. It's already been done.

Más importante aún, no veo por qué va a querer hacer esto.

+0

@Billy: el proceso con el que intento experimentar tiene algunas funciones complejas de administración de memoria, que se supone que se comportan de cierta manera en situaciones de alto estrés (es decir, poca memoria, ciclos de CPU). Es por eso que estoy tratando de hacer esto. Intenté explicar esto en la pregunta en sí. – Lazer

+0

@Lazer: Entonces vas a tener que usar algo como Application Verifier. Simplemente consumir memoria en el sistema no pondrá presión de memoria en el proceso objetivo, porque la memoria de su programa C o C++ no es lo mismo que la memoria física. –

+0

Gracias por el enlace de Obrut, por cierto. Algo muy similar a lo que quiero, pero solo funciona en Windows. – Lazer

Cuestiones relacionadas