2008-09-17 19 views
6

Estoy buscando desesperadamente formas económicas de reducir los tiempos de compilación en la PC de mi casa. Acabo de leer un archivo article about disabling the Last Access Time attribute de un archivo en Windows XP, por lo que las lecturas simples no escriben nada en el disco.Archivos en XP: ¿Está seguro el "último acceso" seguro?

Es muy simple también. En una línea de escritura-DOS:

fsutil behavior set disablelastaccess 1

haya intentado cualquier persona que en el contexto de edificio C++ proyecta? ¿Alguna desventaja?

[Editar] Más sobre el tema here.

Respuesta

4

No he probado esto en una caja de Windows (Estaré esta noche, gracias) pero lo similar en Linux (opción noatime al montar la unidad) aceleró las cosas considerablemente.

No se me ocurre ningún uso en el que el último tiempo de acceso sea útil para fines de auditoría e, incluso entonces, ¿Windows almacena al usuario que accedió a él? Sé que Linux no.

4

Sugiero que lo intentes y veas si hace la diferencia.

Sin embargo, soy pesimista sobre esto, realmente hace la diferencia, ya que en las construcciones más grandes/limpias estarás escribiendo grandes cantidades de datos de todos modos, por lo que ajustar los tiempos de acceso al archivo no tomaría mucho tiempo (más probablemente sería almacenado en caché de todos modos).

Aunque me encantaría que se demuestre lo contrario.


Resultados:

corrió unos construye sobre la base de código en el trabajo, tanto en depuración y liberación configuraciones con el último tiempo de acceso habilitado y deshabilitado.

Nuestro código fuente es de aproximadamente 39 MB (48 MB de tamaño en el disco), y construimos aproximadamente la mitad de eso para la configuración que construí para estas pruebas. La compilación de depuración generó 1.76 GB de archivos temporales y de salida, mientras que la versión generó aproximadamente 600 MB de dichos datos. Construimos sobre la línea de comando usando una combinación de herramientas construidas por Ant y Visual Studio.

Mi máquina es un Core 2 Duo 3GHz, con 4 GB de ram, un disco duro de 7200rpm, con Windows XP de 32 bits.

Edificio con la hora del último acceso para minusválidos:

veces debug = 6:17, tiempos de 5:41

Release = 6:07, 6:06

edificio con la última el tiempo de acceso habilitado:

veces debug = 6:00, tiempos de 5:47

Release = 6:19, 5:48

En general, no noté ninguna diferencia entre los dos modos, ya que en ambos casos los archivos probablemente ya están en la memoria caché del sistema, por lo que debería estar leyendo desde la memoria.

Creo que obtendrás el mayor beneficio de tu inversión simplemente implementando encabezados precompilados (no los generados automáticamente que Visual Studio crea en un proyecto). Implementamos esto hace unos años en el trabajo (cuando la base de código era mucho más pequeña) y redujimos nuestro tiempo de construcción a un tercio de lo que era.

+0

¡Interesante! Sin embargo, esperaría que la ganancia real sea al tocar un solo archivo que tenga muchas inclusiones y luego reconstruir: la comprobación de dependencia debería comenzar a buscar una gran cantidad de archivos, lo que podría desencadenar una escritura del último tiempo de acceso. Tal vez ... –

0

mejorará un poco el rendimiento. Aparte de eso, no hará mucho más (por supuesto, no podrás ver cuándo se accedió por última vez al archivo). Lo tengo activado por defecto cuando instalo Windows XP usando nLite para cortar la hinchazón que no necesito.

1

Es una buena alternativa, pero afectará algunas herramientas. Al igual que el servicio de almacenamiento remoto, y otros utilies que dependen de las estadísticas de acceso a archivos para optimizar el sistema de archivos (por ejemplo, Norton desfragmentación)

7

De SetFileTime's documentation:

"NTFS retrasa cambios a la última hora de acceso de un archivo hasta a una hora después del último acceso ".

No hay ningún punto real para desactivar esto: el artículo original es incorrecto, los datos no están escritos en cada acceso.

EDIT:

cuanto a por qué el autor de ese artículo afirmaba un 10x de velocidad en marcha, creo que él atribuyó su aceleración a lo equivocado: él también desactivada la generación de nombre de archivo 8.3. Para generar un nombre de archivo 8.3 para un archivo, NTFS tiene que generar básicamente cada posibilidad por turno y luego ver si ya está en uso (sin referencia; estoy seguro de que Raymond ha hablado de ello, pero no puede encontrar un enlace). Si todos sus archivos comparten los mismos primeros seis caracteres, este problema lo morderá, y la corroboración es que debe poner caracteres que diferencien los archivos en los primeros seis caracteres para que no entren en conflicto. Desactivar la generación de nombres cortos evitará esto.

+0

Buena información. Sin embargo, el autor del artículo original menciona una aceleración de 10x; tiene que haber algo lento con el último mecanismo de acceso de tiempo. –

0

No quiero desviar la atención de la pregunta del "último acceso", pero podría haber otras formas de acelerar sus compilaciones. Sin conocer el contexto y la configuración de su proyecto, es difícil decir lo que podría ser lento, pero podría haber algunas cosas que podrían ayudar:

Crear compilaciones "uber". Es decir, crear un único archivo uber.cpp compilación que contiene un montón de líneas como

#include "file1.cpp" 
#include "file2.cpp" 

Es posible que tenga problemas con los nombres de variables estáticas en conflicto, pero esos son generalmente fáciles de resolver.La configuración inicial es un poco dolorosa, pero los tiempos de construcción pueden aumentar drásticamente. Para nosotros, el mayor inconveniente es que en el estudio de desarrolladores, no se puede hacer clic derecho en un archivo y decir 'compilar' si ese archivo es parte de una compilación uber. No es un gran problema sin embargo. Tenemos configuraciones de compilación separadas para compilaciones 'uber' que compilan los archivos uber pero excluyen los archivos cpp individuales del proceso de compilación. Si necesitas más información, deja un comentario y puedo conseguirte eso. Además, el optimizador tiende a hacer un trabajo un poco mejor con compilaciones súper.

Además, ¿tiene una gran cantidad de archivos de inclusión, o una gran cantidad de dependencias entre los archivos de inclusión? Si es así, eso ralentizará drásticamente los tiempos de construcción.

¿Está utilizando encabezados precompilados? De lo contrario, podrías considerar eso como una solución, ya que eso también te ayudará.

Tiempos de compilación lenta son generalmente rastreados hasta un montón de archivos E/S. Ese es, con mucho, el mayor sumidero de tiempo en una compilación, solo abrir, leer y analizar todos los archivos. Si reduce la E/S de archivos, mejorará los tiempos de compilación.

De todos modos, siento desviar un poco el tema, pero la sugerencia en cuestión para cambiar cómo se establece el último tiempo de acceso de un archivo parecía ser una solución un tanto 'traviesa'.

+0

Hola Mark, gracias por las sugerencias. Sé sobre el truco de Überbuild, que no deja de cortarlo en mi caso. En realidad, hay muchas, muchas cosas que puedo hacer para acelerar las cosas, pero quiero comenzar con las que me den más beneficios. –

0

Para servidores ocupados, la desactivación del último tiempo de acceso es generalmente una buena idea. El único inconveniente potencial es si hay scripts que usan el último tiempo de acceso para, por ejemplo, indicar que un archivo ya no se está escribiendo.

Dicho esto, si está buscando mejorar los tiempos de compilación en un proyecto de C++, le recomiendo leer Recursive Make Considered Harmful. El artículo tiene una década de antigüedad, pero los puntos que hace sobre cómo las definiciones recursivas en nuestros scripts de construcción causan largos tiempos de construcción todavía vale la pena entender.

0

La desactivación del tiempo de acceso es útil cuando se utilizan ssd (unidades de estado sólido: tarjetas, unidades usb, etc.) ya que reduce la cantidad de escrituras en la unidad. Todos los dispositivos de almacenamiento de estado sólido tienen una vida que se mide por la cantidad de escrituras que se pueden realizar en cada dirección individual. Algunos medios especifican un mínimo de 100 de miles y algunos incluso 1 millón. Los sistemas operativos y otros ejecutables pueden acceder a muchos archivos en una sola operación, así como a los accesos de documentos de usuario. Esto se aplicaría a eee pc, sistemas embebidos y otros.

-1

Para Mike Dimmick:

intento conectar la unidad USB con muchos archivos y copiarlos en su disco duro interno. Ese es también el caso, además de la compilación del programa (que se describe en la publicación original).

Cuestiones relacionadas