Opciones de almacenamiento en memoria caché

La implementación de espacio de usuario del Ceph Block Device, librbd, no puede beneficiarse de la memoria caché de páginas de Linux , por lo que incluye su propia memoria caché en memoria, denominada RBD caching. El almacenamiento en memoria caché de Ceph Block Device se comporta igual que el almacenamiento en memoria caché de disco duro con un buen comportamiento.

Cuando el sistema operativo envía una barrera o una solicitud de vaciado, todos los datos sucios se graban en los OSD de Ceph. Esto significa que el uso de la memoria caché de reescritura es tan seguro como el uso de un disco duro físico con un comportamiento correcto con una máquina virtual que envía correctamente los vaciados, es decir, Linux versión de kernel 2.6.32 o superior. La memoria caché utiliza un algoritmo de menos utilizado recientemente (LRU) y, en modalidad de reescritura, puede fusionar solicitudes contiguas para obtener un mejor rendimiento.

Los dispositivos de bloque Ceph admiten el almacenamiento en memoria caché de reescritura. Para habilitar el almacenamiento en memoria caché de reescritura, establezca rbd_cache = true en la sección [client] del archivo de configuración de Ceph. De forma predeterminada, librbd no realiza ningún almacenamiento en memoria caché. Las grabaciones y lecturas van directamente al clúster de almacenamiento, y las grabaciones sólo se devuelven cuando los datos están en disco en todas las réplicas. Con el almacenamiento en memoria caché habilitado, las grabaciones se devuelven inmediatamente, a menos que haya más de rbd_cache_max_dirty bytes sin vaciar. En este caso, la escritura desencadena una reescritura y se bloquea hasta que se desechan suficientes bytes.

Los dispositivos de bloque Ceph dan soporte al almacenamiento en memoria caché de escritura directa. Puede establecer el tamaño de la memoria caché, y puede establecer destinos y límites para conmutar de la memoria caché de reescritura a la memoria caché de escritura directa. Para habilitar la modalidad de escritura directa, establezca rbd_cache_max_dirty en 0. Esto significa que las escrituras sólo se devuelven cuando los datos están en disco en todas las réplicas, pero las lecturas pueden proceder de la memoria caché. La memoria caché está en memoria en el cliente y cada imagen de Ceph Block Device tiene la suya propia. Puesto que la memoria caché es local para el cliente, no hay coherencia si hay otros que acceden a la imagen. La ejecución de otros sistemas de archivos, como GFS u OCFS, en la parte superior de Ceph Block Devices no funcionará con el almacenamiento en memoria caché habilitado.

Los valores de configuración de Ceph para dispositivos de bloque Ceph deben establecerse en la sección [client] del archivo de configuración de Ceph, de forma predeterminada /etc/ceph/ceph.conf.

La Tabla 1 lista los valores de memoria caché disponibles.
Tabla 1. IBM Storage Ceph configuración de las opciones de caché
Opción Descripción Tipo Obligatorio Restricción Valor predeterminado
rbd_cache Habilite el almacenamiento en memoria caché para RADOS Block Device (RBD). Booleano Nee N/D true
rbd_cache_size El tamaño de memoria caché de dispositivos de bloque RADOS (RBD) en bytes. Entero de 64 bits Nee N/D 32 MiB
rbd_cache_max_dirty El límite de dirty en bytes en el que la memoria caché desencadena una reescritura. Si es 0, utiliza el almacenamiento en memoria caché de escritura directa. Entero de 64 bits Nee Debe ser menor que rbd cache size. 24 MiB
rbd_cache_target_dirty dirty target antes de que la memoria caché empiece a escribir datos en el almacenamiento de datos. No bloquea las grabaciones en la memoria caché. Entero de 64 bits Nee Debe ser menor que rbd cache max dirty. 16 MiB
rbd_cache_max_dirty_age El número de segundos que los datos sucios están en la memoria caché antes de que se inicie la reescritura. Flotante Nee N/D 1.0
rbd_cache_max_dirty_object El límite sucio para los objetos. Establézcalo en 0 para calcular automáticamente a partir de rbd_cache_size. Entero N/D N/D 0
rbd_cache_block_writes_upfront Si true, bloqueará las grabaciones en la memoria caché antes de que se complete la llamada aio_write . Si false, se bloquea antes de que se llame a aio_completion . Booleano N/D N/D false
rbd_cache_writethrough_until_flush Inicie en modalidad de escritura directa y cambie a reescritura después de recibir la primera solicitud de vaciado. La habilitación de este valor es conservador pero seguro en caso de que las máquinas virtuales que se ejecutan en rbd sean demasiado antiguas para enviar vaciados, como el controlador virtio en Linux anterior a 2.6.32. Booleano Nee N/D true