En Windows 7, usando el Administrador de dispositivos, mostrando las propiedades de un disco y yendo a la pestaña Políticas, hay 2 elementos de cambio. El caché de escritura, del que no se trata esta pregunta.
y
[X] Desactiva el vaciado del búfer de escritura de Windows en el dispositivo <--- ¡este solo!
Microsoft pone un descargo de responsabilidad en la pestaña de ese elemento. "Para evitar la pérdida de datos, no seleccione esta casilla de verificación a menos que el dispositivo tenga una fuente de alimentación separada que le permita descargar su búfer en caso de pérdida de energía".
En términos simples, ¿qué cambia esto para la escritura, el almacenamiento y la copia de archivos?
1. Cambio de acciones de escritura para programas paranoicos: (realidad o ficción)
¿Cambia la forma en que funcionan los vaciado de escritura para un programa que obliga a que se produzca un vaciado de caché? Algunos programas tienen mucha intención de terminar la escritura, sin especular, ¿pueden estos programas continuar con su escritura protectora, o esto también cambia para esos programas?
2. Tipos de programas efectuados:
¿Cuáles son los tipos de acciones / programas que se verían afectados o no por el cambio? Escriba, algunos programas transmiten, algunos escriben rápidamente, algunos son continuos, otros son protectores (o cualquier otro tipo que pueda definir en términos simples).
3. ¿Vio algo, o incluso un punto de referencia?
Si la configuración está activada, ¿cuáles son los cambios observables por escrito? Cualquier ejemplo suelto de un cambio observado en el comportamiento. u observado ningún cambio en el comportamiento?
4. ¿Cuál es el atraco o retraso?
Sabemos que la mayoría de estas acciones son muy rápidas en la mayoría de las computadoras. Los datos eventualmente se escribirán. En relación con la velocidad de la unidad, ¿es importante la cantidad de tiempo?
A los fines de mi pregunta, el riesgo que existe no es una de las preguntas, si desea cubrirlo, no se interpondrá en el camino.
Lo que significa "Vaciar el búfer de memoria caché de escritura" es casi un engaño de esto, pero el enlace es para un sistema operativo diferente. Aunque la A tiene alguna información, incluso el término utilizado en el enlace no es el mismo. Tampoco responde las cosas más importantes que un usuario quisiera saber, que he tratado de resumir aquí.
fuente
Respuestas:
Su afirmación en la primera pregunta es ficción. Las llamadas a la API de Windows, como todavía, garantizarán que los datos lleguen a los medios físicos, incluso con el vaciado del búfer de escritura deshabilitado. Entonces, los programas que son "seguros" y saben lo que están haciendo estarán bien. Las llamadas como en .NET, etc. eventualmente llaman a esta API.
FlushFileBuffers()
FileStream.Flush()
Los programas que realizan una gran cantidad de E / S de disco sin llamar
FlushFileBuffers()
directamente, o cualquier API auxiliar que eventualmente lo llame, verían el aumento de rendimiento más notable. Por ejemplo, si estaba ejecutando E / S no esenciales donde está bien si se pierden datos, como BOINC (si se pierde, simplemente vuelva a descargar el archivo o intente volver a calcular los cálculos), podría evitar llamarFlushFileBuffers()
, y simplemente llame a una API comoWriteFile()
: los datos se almacenarán en el búfer para escribirse, pero en realidad no se escribirán durante un tiempo potencialmente largo, como cuando se cierra el descriptor de archivo o cuando se cierra el programa. Desafortunadamente, también es posible que si el sistema falla (como un BSOD), todos los datos se pierden, por lo que es realmente importanteque si está tratando con algún tipo de datos valiosos / no reemplazables a los que sí llamaFlushFileBuffers()
, ¡ya sea que el lavado del búfer esté habilitado o no! De lo contrario, un simple error del controlador (por ejemplo, en su controlador de gráficos) podría hacer que pierda muchos datos.No puedo encontrar ningún punto de referencia, pero lo notará más con los programas que se ajustan a la descripción en el segundo elemento anterior.
Sincronizar datos con el disco no es realmente tan rápido, especialmente si se realiza con frecuencia en un ciclo cerrado. De manera predeterminada, si recuerdo correctamente al leer los libros de Windows Internals, NTFS sincroniza de manera predeterminada todos los búferes de sistema de archivos sucios en el disco cada 5 segundos . Aparentemente, esta es una compensación decente entre estabilidad y rendimiento. El problema con la sincronización frecuente de datos es que hace que el disco duro haga muchas búsquedas y escrituras.
Considere el siguiente pseudocódigo:
Con el lavado automático del búfer de 5 segundos encendido :
Con automática de 5 segundo tampón de lavado fuera (el efecto de la casilla de verificación en su pregunta):
Teniendo en cuenta que un sistema ocupado puede experimentar entre cientos y decenas de miles de escrituras en archivos por segundo, esto es excelente para el rendimiento, especialmente en los discos duros giratorios tradicionales (es menos impresionante en los SSD). La RAM es 20 veces más rápida que los discos duros como medida general, aunque esa brecha es menor con los SSD.
La razón por la que dicen que debe usar una batería de respaldo es que no desea tener 35 minutos de datos escritos almacenados en la memoria RAM que no se escriben en el disco solo porque su programador fue flojo y no llamó
FlushFileBuffers()
, y luego Una falla de energía. Por supuesto, una batería de respaldo no lo protege contra los errores del controlador que causan un BSOD ...fuente
En apoyo de la respuesta de ChatBot John Cavil , he escrito un pequeño programa de prueba:
Y ejecútelo en un disco Samsung 950pro NVMe con la opción "Desactivar el vaciado del búfer de escritura de Windows en el dispositivo" habilitado.
El resultado es:
Por lo tanto, puede ver que el
FlushFileBuffers
sistema no omite la solicitud (Windows no ignora laFlushFileBuffers
llamada, incluso si las opciones están habilitadas).fuente
swTest
(y por qué no se declara)? (2) ¿Está diciendo que hizo dos copias de su programa, una incluyendo lasfTest.Flush()
llamada y otra no (es decir, con comentarios) y las comparó? Por favor explique. (3) Sé inglés, pero no puedo entender tu última oración.FlushFileBuffers
llamadas, incluso si las opciones están habilitadas (vi algunas otras fuentes triste que la llamada sería ignorada cuando esta opción se haya habilitado ) Agregaré algunos comentarios más en la respuesta, gracias :-)