Escritura de pulsaciones de teclas en SSD y nivelación de desgaste

Escritura de pulsaciones de teclas en SSD y nivelación de desgaste

Estoy planeando escribir una aplicación que intente escribir la mayor cantidad posible en el archivo para no perder nunca una cantidad significativa de datos. Escribirá en el disco cada pulsación de tecla, incluida la sincronización de micro o incluso nanosegundos. Ahora bien, esto parece mucho, pero todavía llevará bastante tiempo alcanzar un GB de datos escritos. Para aliviar las cosas, planeo escribir estos datos como actualizaciones al final del archivo usando una secuencia de salida, pero eliminaré la secuencia inmediatamente después.

Ahora, con los SSD, cada vez que escribo datos, generalmente los escribiré en una ubicación diferente cada vez que se realiza una actualización. Supongo que el sistema operativo/FS simplemente envía "sectores" a la unidad y que no podrá distinguir que son solo actualizaciones al final de un archivo. Entonces eso significaría que, aunque las actualizaciones sean pequeñas, definitivamente fijará la nivelación de desgaste del SSD sin fin.

¿Es correcta la descripción anterior? ¿Debo considerar una cantidad razonable de almacenamiento en búfer en la aplicación? ¿Cuánto se almacenarán en caché los sistemas de archivos modernos antes de escribir en SSD? ¿O el almacenamiento en búfer dentro del SSD vendrá al rescate? ¿Alguien ha realizado un análisis de dicho uso?

Respuesta1

En una situación como esta, el sistema operativo debería almacenar en búfer sus escrituras y vaciarlas cada pocos segundos aproximadamente. Además, la mayoría de los SSD implementan alguna forma limitada de almacenamiento en búfer de escritura que es "seguro" para que no se pierdan datos en caso de un corte de energía. Tenga en cuenta que la mayoría de los dispositivos de almacenamiento y sistemas operativos funcionan en bloques de 4 KB, por lo que el sistema no escribirá bytes individuales en el disco.

Dicho esto, si su aplicación necesita escribir continuamente pequeñas cantidades de datos en el disco, es mejor usar explícitamente un búfer de escritura, ya sea implementando uno propio o usando una función adecuada del sistema operativo. Cada escritura en disco conlleva una cantidad no trivial de sobrecarga a nivel del sistema operativo, por lo que debería escribir en un búfer de memoria que se vacía en un intervalo apropiado o cuando el búfer alcanza un cierto tamaño (por ejemplo, varias decenas o cientos de KB).

Si escribe fragmentos de datos razonablemente grandes a intervalos regulares y no sobrescribe datos en lugares aleatorios del disco (y parece que simplemente está escribiendo un flujo continuo de datos de registro), no debería experimentar una amplificación excesiva ni una degradación de la escritura. actuación. La nivelación del desgaste de la unidad funcionará bien aquí.

información relacionada