¿Discos SATA que manejan el almacenamiento en caché de escritura correctamente?

15

Es bastante común ver consejos para deshabilitar la memoria caché de escritura en discos individuales utilizados para bases de datos porque, de lo contrario, algunos discos reconocerán las escrituras que aún no han llegado a la superficie del disco.

Esto implica que algunos discos no reconocen las escrituras hasta que llegan a la superficie del disco (Actualización: o que informan con precisión cuando se les pide que vacíen la memoria caché. ¿Dónde puedo encontrar dichos discos o dónde puedo buscar información autorizada? ¿Dónde encontrar tales discos?

Estoy configurando algunos servidores de base de datos que realmente se beneficiarían con el uso de caché de escritura, pero la aplicación es sensible al precio y prefiero no duplicar el costo de mi subsistema de disco para algunos controladores RAID de almacenamiento en caché porque no tengo suficiente información para saber si puedo confiar en el caché en cada unidad.

eas
fuente
Linux permite deshabilitar la memoria caché de escritura unidad por unidad a través de hdparam. Para las unidades SATA, creo que esto debe ser programado para que se vuelva a aplicar en cada reinicio. Puedo seguir ese camino si aún puedo cumplir con nuestros requisitos de rendimiento sin usar un controlador de banda con respaldo de batería. Prefiero usar RAID de software cuando sea posible, ya que es más simple y más barato. De cualquier manera, definitivamente tendré un UPS.
eas

Respuestas:

15

En términos generales, en respuesta directa a su pregunta, no conozco ninguna de las principales marcas de unidades SATA de que la unidad en sí haya tenido errores en relación con el funcionamiento adecuado con el almacenamiento en caché de escritura habilitado. Es decir, solo desde una perspectiva de unidad, la unidad hace lo que se supone que debe hacer desde una perspectiva de almacenamiento en caché. También me gustaría señalar que incluso cuando el almacenamiento en caché de escritura está habilitado, el retraso de una escritura de disco en el cable SATA a los medios rotativos que se actualizan físicamente todavía es muy corto (~ 50 a 100 ms típicamente). No es como si los datos de caché sucios permanecieran allí por segundos a la vez ..... la unidad está continuamente tratando de obtener datos sucios del cachéen los medios físicos tan pronto como sea posible. No se trata solo de la seguridad de los datos, sino de estar listo para aceptar futuras escrituras sin demora (es decir: publicación de escritura).

El problema que surge cuando el almacenamiento en caché está habilitado es que el orden de escritura en la unidad a través del cable SATA y el orden de escritura en el medio giratorio no es el mismo. Esto nunca puede causar un problema A MENOS que tenga una pérdida de energía o un bloqueo del sistema antes de que todo el contenido de la memoria caché llegue al disco. ¿Por qué? ->

El problema que puede surgir aquí es relativo a la robustez de la transacción del sistema de archivos y / o el contenido del archivo de la base de datos a estas escrituras perdidas fuera de orden. En efecto, las escrituras fuera de orden potencialmente perdidas pueden corromper teóricamente la integridad de la lógica de transacción que de otro modo habría sido garantizada por las escrituras en disco que ocurren en un orden muy específico para los medios.

Ahora, por supuesto, los diseñadores del sistema de archivos, bases de datos, controladores RAID, etc. están al tanto (o ciertamente deberían estar al tanto) de este fenómeno en relación con el almacenamiento en caché de escritura. El almacenamiento en caché de escritura es extremadamente deseable desde el punto de vista del rendimiento en la mayoría de los escenarios de E / S de acceso aleatorio. De hecho, tener disponible el almacenamiento en caché de escritura es un elemento clave para poder tener un beneficio real para la cola de comandos nativos más avanzada ( NCQ) compatible con SATA más recientes y las últimas generaciones de implementaciones de PATA. Por lo tanto, para garantizar el orden a los medios físicos en ciertos momentos críticos, el sistema de archivos y / o la aplicación, etc., pueden solicitar específicamente un vaciado de las memorias caché de escritura en los medios. Al completar esta solicitud de sincronización, todo lo pendiente de (potencialmente) almacenamientos intermedios de archivos, almacenamiento en caché de disco del sistema operativo, almacenamiento en caché de disco físico, etc. está realmente en los medios según el diseño del sistema de transacción en las operaciones críticas correctas. Es decir, esto sucede correctamente si los programadores hacen las llamadas correctas en la parte superior Y cada elemento de esta cadena de capas de software y hardware hizo su trabajo correctamente. es decir: no hay errores al respecto en la unidad, los controladores RAID, los controladores de disco, los cachés del sistema operativo, el sistema de archivos, el motor de la base de datos, etc. Este es un montón de software que tiene que funcionar exactamente bien. Además, verificar la corrección a este respecto es muy difícil porque, en casi cualquier situación, normalmente el orden de escritura no importa en absoluto ... y los escenarios de falla de energía y bloqueo son pruebas difíciles de construir. Entonces, al final, "desactivar el almacenamiento en caché de escritura" en una o más de las diversas capas y / o significados de este término ... tiene la reputación de "arreglar" ciertos tipos de problemas. En efecto, apagar los comportamientos de almacenamiento en caché de escritura del controlador RAID o las memorias caché de disco del sistema operativo, o la unidad, etc., está evitando uno o más errores en el sistema ... y la fuente de dicha tradición. y los escenarios de fallas de energía y fallas son pruebas difíciles de construir. Entonces, al final, "desactivar el almacenamiento en caché de escritura" en una o más de las diversas capas y / o significados de este término ... tiene la reputación de "arreglar" ciertos tipos de problemas. En efecto, apagar los comportamientos de almacenamiento en caché de escritura del controlador RAID o las memorias caché de disco del sistema operativo, o la unidad, etc., está evitando uno o más errores en el sistema ... y la fuente de dicha tradición. y los escenarios de fallas de energía y fallas son pruebas difíciles de construir. Entonces, al final, "desactivar el almacenamiento en caché de escritura" en una o más de las diversas capas y / o significados de este término ... tiene la reputación de "arreglar" ciertos tipos de problemas. En efecto, apagar los comportamientos de almacenamiento en caché de escritura del controlador RAID o las memorias caché de disco del sistema operativo, o la unidad, etc., está evitando uno o más errores en el sistema ... y la fuente de dicha tradición.

De todos modos, volviendo al núcleo de la pregunta: bajo SATA, el manejo específico de todos los comandos de lectura / escritura del disco y los comandos de caché de vaciado están bien definidos por las especificaciones SATA . Además, los fabricantes de unidades deben tener documentación detallada para cada modelo de unidad o familia de unidades que describa su implementación y cumplimiento de estas reglas como este ejemplo para unidades Seagate Barracuda . En particular, vea los detalles de las CARACTERÍSTICAS DEL SATA SETEl comando que controla el modo operativo de la unidad y específicamente la opción 82h se puede usar para deshabilitar el almacenamiento en caché de disco en el nivel de la unidad porque el valor predeterminado es ciertamente el almacenamiento en caché de escritura habilitado en todas las unidades que conozco. Si realmente desea deshabilitar la memoria caché, este comando debe ejecutarse al inicio de cada reinicio o encendido de la unidad y, por lo general, está bajo el control de los controladores de disco de su sistema operativo. Es posible que pueda alentar a su controlador de sistema operativo a configurar este modo a través de una cosa de tipo IOCTL y / o configuración de registro, pero esto varía ampliamente.

Jeff alto
fuente
55
Una nota editorial a mi respuesta: los controladores RAID de hardware tienen errores en relación con muchos problemas, incluidos los problemas relacionados con su implementación interna del almacenamiento en caché de escritura. No tengo idea de por qué, pero, desde un punto de vista anecdótico, los controladores RAID parecen ser algunos de los software más defectuosos jamás escritos en términos de algo que tiene un uso tan extendido. Ciertamente vale la pena usar hardware RAID muy convencional, bien establecido y ampliamente implementado de proveedores muy acreditados ... ¡e incluso entonces los parches a problemas no triviales parecen demasiado frecuentes!
Tall Jeff
Gracias Jeff. He estado leyendo mucho sobre esto, y estoy tan confundido como siempre. Creo que el problema con el que estoy luchando ahora tiene que ver con las "barreras de escritura" que permiten que las aplicaciones y los sistemas de archivos instruyan a la capa de bloque para garantizar un orden de escritura adecuado utilizando los diversos mecanismos disponibles. Desafortunadamente, hay todo tipo de problemas con la implementación de barreras. LVM, por un lado, aparentemente no los admite, incluso si los dispositivos subyacentes lo hacen. Además, me parece que los administradores de sistemas deberían tener la opción de hacer que fsync fuerce el vaciado de la memoria caché de la unidad
fácil el
@eas: supongo que el término "barreras de escritura" al que se refiere es el mismo mecanismo básico que denominé "sincronización" o "descarga" de los cachés en mi respuesta anterior. A su punto, esto puede iniciarse en varias capas en la "pila" de acceso a archivos. Para construir una verdadera barrera de escritura, tiene que surtir efecto a través de todas las capas que tienen datos de escritura pendientes (es decir: cachés sucias o búferes de reescritura) hasta los medios físicos para que realmente funcionen según lo previsto. Cualquier enlace desconectado en esa cadena es lo que introduce problemas potenciales cuando las escrituras se reordenan.
Tall Jeff
Los discos pueden retrasar las escrituras en los medios durante varios segundos, por supuesto, si hay muchas escrituras adicionales que desbordan la caché del disco, forzará una escritura en los medios. NCQ no necesita estrictamente la caché de escritura, todavía puede tener muchos comandos de escritura y lectura pendientes y emitirlos en el orden que el disco cree que obtendrá el mejor rendimiento, también con NCQ no hay significado para el orden de las escrituras que hace los sistemas de archivos y las bases de datos necesitan usar barreras de E / S.
Baruch Even
3

Según mi experiencia, un controlador de disco de almacenamiento en caché respaldado por batería deshabilitará el caché en la unidad. De lo contrario, no conozco una forma de deshabilitar la caché en disco. Incluso si pudiera deshabilitar el caché en disco, el rendimiento se vería afectado significativamente.

Para una opción de bajo costo, puede usar un UPS económico que puede indicarle a su sistema un apagado ordenado.

kevintechie
fuente
Mi comentario anterior debería haberse agregado aquí. Todavía estoy aprendiendo este sitio.
eas
Algunos controladores RAID deshabilitan la memoria caché en el disco todo el tiempo, algunos no y algunos tienen una configuración. Este comportamiento depende fundamentalmente de cómo sea la implementación de la estrategia de almacenamiento en caché del controlador RAID. En algunas implementaciones, realmente quieren controlar el orden de escritura en el disco ... y en otras es menos importante. Aludo a algunos de los problemas aquí en mi respuesta.
Tall Jeff
En mi pequeño conjunto de pruebas (controladores RAID LSI 9261, unidades SATA, NL SAS y SAS), descubrí que habilitar la memoria caché de escritura de la unidad cuando la unidad estaba conectada a un controlador RAID con memoria caché respaldada por batería / capacidad, no hizo ninguna diferencia en rendimiento más allá de simplemente tener el caché de la controladora RAID. Todavía no diría que esta es una regla difícil y rápida, pero definitivamente está claro para mí que el controlador RAID que desactiva la memoria caché de la unidad no es necesariamente un problema.
Daniel Lawson
2

Utilizo un sistema RAID con un supercondensador en lugar de una batería para mantener el caché. Las baterías se desgastan, deben ser monitoreadas, deben reemplazarse y representan un punto potencial de falla en esos aspectos. Un condensador se carga al inicio, vacía la memoria caché cuando falla la alimentación del UPS, dura prácticamente para siempre, no requiere monitoreo, etc. Sin embargo, a menos que esté ejecutando un negocio en la línea de pobreza (no es raro en estos días) debería tener un UPS y software que apaga el sistema de manera limpia en caso de falla; por lo general, le doy 5-15 minutos (dependiendo de la carga del UPS y, por lo tanto, de la batería disponible) antes del apagado en caso de que vuelva la energía.

Durante una tormenta eléctrica, puede (o puede que los sistemas de energía estén mejorando) ver las luces parpadear, a veces justo antes de que se apaguen. Este es un dispositivo llamado reconectador. Es un disyuntor que cuando se dispara intenta cerrar el interruptor abierto en caso de que la sobrecarga fuera transitoria, que es la mayoría. Si no puede permanecer cerrado después de tres intentos, permanece abierto. El pobre hombre tiene que salir bajo la lluvia y lidiar con eso. No sientas lástima por él, mientras haces solo el doble de lo que tú y yo hacemos y el doble de que si es tiempo extra, es un trabajo peligroso.

Richard Rankin
fuente
2

Una de las ideas erróneas si las memorias caché de escritura de disco es que solo pierden datos por pérdida de energía. Este no es siempre el caso, especialmente en dispositivos sATA. Si un dispositivo sATA tiene un error (como un error de FW del caso de la esquina o un error del controlador) y se restablece o se restablece externamente, no hay garantía de que los datos en la caché de reescritura sigan disponibles después del bloqueo.

Esto puede conducir a escenarios en los que un dispositivo tiene un error transitorio, se restablece, se produce la pérdida de datos en la pérdida de cualquier caché sucia, y esto es silencioso por encima del nivel de bloque de los controladores.

Peor aún, deshabilitar la memoria caché de la unidad a través de las herramientas del sistema operativo también se perderá en los reinicios del dispositivo, por lo que incluso si un dispositivo tiene su memoria caché deshabilitada al comienzo del día, si el dispositivo se restablece, volverá a habilitar el almacenamiento en caché de reescritura. En otro reinicio, el dispositivo perderá datos.

Las unidades SCSI / SAS y algunas unidades sATA tienen la capacidad de guardar el estado del perfil de reescritura para garantizar que no se pierda la propiedad, pero en la práctica esto rara vez se usa.

Los controladores RAID que integran la capa de bloque en las capas superiores pueden notar el restablecimiento de la unidad y deshabilitar la memoria caché de reescritura nuevamente, pero los controladores sATA y SAS estándar no lo harán.

Esta limitación también se aplica a otros SET FEATURE y parámetros similares que están configurados para el rendimiento y la fiabilidad.

Jon Brauer
fuente
1

Como usted dice, un controlador RAID con batería de respaldo adecuado será costoso, pero puede encontrar controladores Dell Perc5 / i en eBay por £ 100 ($ 150) y especialmente con RAID5 la velocidad de un controlador como el Perc5 / i lo sorprenderá. Tengo varios servidores con Perc5 / is y seis matrices RAID5 de disco, y se encuentran entre los discos más rápidos que he visto. Especialmente para aplicaciones de bases de datos, los discos rápidos realmente mejorarán el rendimiento.

Mordería la bala y compraría un controlador RAID.

JR

John Rennie
fuente
1

Según tengo entendido, la falsificación fsync () es una propiedad de los controladores RAID respaldados por batería, no de las unidades. El controlador RAID contiene una batería que puede alimentar su caché de escritura hasta que se restablezca la alimentación en la unidad y la escritura pueda confirmarse de forma segura en el disco. Esto permite que el controlador regrese inmediatamente al sistema operativo, ya que ofrece cierto nivel de garantía de que la escritura se escribirá en el disco.

Cabe señalar que si la memoria caché de reescritura de las unidades se llena, las escrituras se bloquearán hasta que la memoria caché se haya vuelto a escribir en la unidad. Esto significa que el caché generalmente no es tan efectivo bajo escrituras sostenidas.

¿Cuántos IOPS requiere su aplicación? ¿Está seguro de que está limitado por la memoria caché de escritura de las unidades o que un pequeño (en comparación con la memoria de su servidor) en la unidad será beneficioso?

Dave Cheney
fuente
La prueba que estoy haciendo ahora es determinar la envolvente de rendimiento de nuestra aplicación para que podamos descubrir cómo escalar y escalar mejor. El caché de la unidad puede ser relativamente pequeño, pero con el almacenamiento en caché de escritura, le da a la unidad la capacidad de reordenar las escrituras (cuando sea apropiado), lo que parece que puede duplicar el rendimiento de escritura sostenido.
eas