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.
| 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 |