Según mis observaciones como desarrollador de Java que trabaja en estaciones de trabajo de Windows, NTFS es lento en comparación con los sistemas de archivos de Linux. La pregunta es, ¿hay algo en el controlador NTFS que pueda ajustarse manualmente, por ejemplo, darle más memoria para caché? ¿Habilitar algunos algoritmos experimentales? Si eso no está disponible, ¿hay quizás otro sistema de archivos que pueda usarse en Windows, tal vez incluso comercial, que sea más rápido que NTFS?
Para ser claros, no estoy buscando mejorar las velocidades de compilación para proyectos de Maven, me gustaría obtener una mejora general para el sistema operativo. Tengo la sensación de que NTFS está desactualizado y es lento en comparación con los sistemas de archivos de Linux. Me parece extraño que el sistema operativo más popular del planeta tenga solo un sistema de archivos que todavía requiera desfragmentación manual. Tal vez no es una alternativa?
Actualización: Esto es lo que es lento según mis observaciones. Estoy construyendo / empaquetando un proyecto, lo que significa muchas operaciones de lectura / escritura en el disco. El sistema de compilación es multiplataforma (Java, Maven), por lo que puedo realizar exactamente las mismas acciones cuando arranco en Ubuntu, por ejemplo.
En Linux mis compilaciones son al menos 1/3 más rápidas. De ahí la pregunta sobre el sistema de archivos. Lo siento si está fuera de lugar.
Respuestas:
Si bien me encantaría ver algo como ZFS disponible para los hosts de Windows, NTFS no es un sistema de archivos horrible. Admite la mayoría de las funciones del sistema de archivos "modernas" (atributos extendidos, registro en diario, ACL, lo que sea), pero se ve obstaculizado por Explorer y la mayoría de las otras aplicaciones que no admiten ninguna de estas.
Una cosa que matará absolutamente su rendimiento es tener "demasiadas" entradas en un directorio. Una vez que pase un par de miles de entradas en un directorio, todo se ralentizará. Literalmente, toda la máquina dejará de esperar a que NTFS cree o elimine entradas cuando esto ocurra.
Solía trabajar con una aplicación que generaba documentos basados en HTML para ensamblados .NET; crearía un archivo por propiedad, método, clase, espacio de nombres, etc. Para ensamblajes más grandes veríamos 20 + k archivos, todos bien volcados en un solo directorio. La máquina pasaría un par de horas durante la compilación bloqueada en NTFS.
En teoría, Windows admite complementos del sistema de archivos, que harían posible ZFS nativo, ext3 o lo que sea (incluso FUSE). En la práctica, las API no están documentadas, por lo que está completamente solo.
Ahora, ya que está haciendo el desarrollo de Java, ¿podría instalar un sistema operativo diferente en su máquina, o usar una máquina virtual sobre Windows?
Además, es posible que desee probar algunos puntos de referencia del sistema de archivos independientes de la plataforma (iozone, bonnie ... probablemente haya otros más modernos que no conozco, tal vez incluso algunos escritos en Java) para ver si es en realidad el sistema de archivos te detiene, o si es algo más. Optimización prematura y todo eso ...
fuente
Supongo que la solución real sería reescribir su sistema de compilación para que use la API nativa del sistema de archivos de Windows, en lugar de la API de Unix (fopen, etc.) debajo del marco de portabilidad. Pero eso no va a suceder, así que básicamente estás atrapado con cualquier nivel de rendimiento que ellos pensaban que era aceptable.
A menudo, cuando se utilizan sistemas no escritos originalmente para Windows, se da cuenta de que el recorrido del directorio se ha manejado muy mal, así que asegúrese de tener un árbol de directorios muy plano.
fuente
Hay un sistema de archivos que es compatible con el nuevo sistema operativo Windows Y es más rápido que NTFS. Es exFAT. Existe la posibilidad de usarlo para la unidad del sistema. Pero no se sabe qué complicaciones podría tener.
Sin embargo, ciertamente puede usarlo para otras particiones. Es más rápido con operaciones de lectura / escritura aleatorias. Perfecto para un SSD por ejemplo.
fuente
opendir()
llamada (o equivalente).¿Tiene un programa antivirus en ejecución que realiza la comprobación de acceso / escritura para la carpeta de su proyecto?
La compilación implica leer y escribir muchos archivos pequeños en rápida sucesión, lo que puede abrumar al antivirus. Agregue su carpeta de proyecto a la lista de carpetas excluidas y vea si eso mejora la situación.
En Linux usted (probablemente) no tiene ningún software antivirus ...
fuente