¿Cómo puede la velocidad de salida ser más alta que la velocidad de escritura del disco duro?Perl: escribir misterio de la velocidad?
Actualización 1: He cambiado la siguiente:
desactivado antivirus. Ningún cambio.
Se insertó un nuevo disco físico y se usó la primera partición para la prueba. (El disco para la prueba inicial estaba en la última partición , separada de la partición del sistema, pero en el mismo disco físico). Resultado: hay la misma patrón cíclico, pero el sistema es ya no no responde durante la prueba. La velocidad de escritura es algo mayor (podría deberse al uso de la primera partición y/o ya no interfiera con la partición del sistema ). Conclusión preliminar: hubo algún tipo de interferencia de la partición del sistema .
Instalado 64 bit Perl. Los ciclos se han ido y todo es estable en una escala de tiempo de 2 segundos: 55% de CPU en el núcleo único, velocidad de escritura de aproximadamente 65 MB/s.
intentado en la unidad original con 64 bits Perl. Resultado: en algún punto intermedio. Ciclos de 8 segundos, CPU 20-50%, 35 - 65 MB/seg (en lugar de ciclos profundos de 0-100%, 0 - 120 MB/seg). El sistema solo es levemente insensible. La velocidad de escritura es de 50 MB/seg. Esto apoya la teoría de la interferencia.
Flushing en el script de Perl. No intentado todavía.
OK, tengo más allá de la first hurdle. He escrito un script en Perl que puede generar un archivo de texto muy grande (por ejemplo, 20 GB) y es esencialmente sólo un número de:
print NUMBERS_OUTFILE $line;
donde $ línea es una cadena larga con un "\ n" al el fin.
Cuando el script Perl comienza la velocidad de escritura es de unos 120 MB/s (coherente entre lo que se calcula por el script, Process Explorer y "IO Bytes de escritura/s" para el proceso de Perl en Monitor de rendimiento.) Y 100 % CPU en el núcleo único en el que se está ejecutando . Este índice es, creo, más alto que velocidad del disco duro.
Luego, después de un tiempo (por ejemplo, 20 segundos y 2,7 GB por escrito) todo el sistema deja de responder y la CPU cae a 0%. Esto último por ej. 30 segundos. La velocidad promedio de escritura en estas dos fases es consistente con la velocidad de escritura de del disco duro. Los tiempos y tamaños mencionados en este párrafo varían mucho de ejecución a ejecución. El rango de 1 GB a 4,3 GB para la primera fase se ha observado hasta el momento. Aquí hay un transcript for the run with 4.3 GB.
Hay varios de estos ciclos para un archivo de texto 9.2 GB generada en la prueba:
¿Qué está pasando?
completa Perl script y BAT driver script (HTML formateado con la etiqueta pre ). Si las dos variables de entorno MBSIZE y OUTFILE están configuradas, la secuencia de comandos Perl debería poder ejecutar sin modificaciones en otras plataformas que no sean Windows.
Plataforma: Perl 5.10.0 de ActiveState; (inicialmente 32 bit, luego 64 bit); construir 1004. Windows XP x64 SP2, ningún archivo de página, 8 GB de RAM, AMD de cuatro núcleos de CPU, discos duros de 500 GB caviar verde (velocidad de escritura 85 MB/s?).
Gracias. Ahora probé Perl de 64 bits (vea la pregunta actualizada), pero el próximo paso será intentar encender el autoflush. –
Recuerde, también puede necesitar modificar su sistema de archivos si mantiene los almacenamientos intermedios. –
autoflush hará una llamada al sistema después de cada elemento de impresión. En su ejemplo, el rendimiento será bueno porque es de 1 MB a la vez. Pero si imprime 'a', 'b', 'c', 'd' será muy malo porque son cuatro llamadas al sistema de un char cada ... tenga cuidado con eso. –