ossfs 1.91 y versiones posteriores introducen tres mejoras de rendimiento respecto a la versión 1.88.x: optimizaciones en operaciones POSIX, optimización de readdir y lectura directa. Si su clúster utiliza Container Storage Interface (CSI) 1.30.1 o superior, habilite las puertas de enlace de funciones correspondientes para actualizar ossfs.
Las funciones de ossfs solo están disponibles en nodos de Elastic Compute Service (ECS).
Para realizar la actualización, consulte Switch to ossfs 1.91 or later.
Cambios entre la versión 1.88.x y la 1.91
Las siguientes secciones describen los cambios en las funciones de ossfs 1.91 y versiones posteriores. Para consultar las notas de la versión completas, revise el registro de cambios de ossfs.
Correcciones en operaciones POSIX y valores predeterminados de parámetros
ossfs 1.91 incluye varias correcciones y actualizaciones de valores predeterminados:
Ahora es posible montar volúmenes de OSS en subrutas que no existen en los buckets de OSS.
Ya no se cargan archivos de cero bytes al crear un objeto. Se corrigió el error EntityTooSmall que ocurría ocasionalmente durante la carga multiparte. También se mejoraron las operaciones de anexado.
Los valores predeterminados de los parámetros se actualizaron con base en la versión upstream de ossfs y en los resultados de las pruebas de rendimiento.
La siguiente tabla muestra los valores predeterminados de los parámetros que cambiaron entre las versiones 1.88.x y 1.91:
|
Parámetro |
Descripción |
Valor predeterminado en 1.88.x |
Valor predeterminado en 1.91+ |
|
|
TTL de la caché de metadatos. Unidad: segundos. |
-1 (nunca caduca) |
900 |
|
|
Umbral de tamaño de archivo para la carga multiparte. Unidad: MB. |
5 x 1024 |
25 |
|
|
Umbral de tamaño de datos sucios para forzar el vaciado a disco. Unidad: MB. |
-1 (nunca se vacía) |
5120 |
Los siguientes parámetros conservan los mismos valores predeterminados que en la versión 1.88.x, pero difieren de la versión de código abierto de ossfs 1.91 con el fin de mantener el mismo nivel de rendimiento:
|
Parámetro |
Descripción |
Valor predeterminado en código abierto 1.91+ |
Valor predeterminado en Alibaba Cloud 1.91+ |
|
|
Tamaño de parte para la carga multiparte. Unidad: MB. |
10 |
30 |
|
|
Número de partes cargadas simultáneamente. |
5 |
20 |
Para modificar cualquiera de estos parámetros, actualice el campo otherOpts en su PV.
Optimización de readdir
Al montar un volumen de OSS, ossfs invoca HeadObject para cada objeto en la ruta montada con el fin de recuperar metadatos como permisos, hora de modificación, UID y GID. En rutas con muchos objetos, estas llamadas a HeadObject pueden ralentizar significativamente las operaciones de recorrido de directorios, como ls y find.
La función de optimización de readdir omite dichas llamadas a HeadObject, lo que reduce la latencia en las operaciones de directorio. Antes de habilitarla, considere los siguientes compromisos:
Los comandos
chmodychownno tienen efecto.Los enlaces simbólicos podrían no comportarse como se espera. Los enlaces duros no son compatibles.
La siguiente tabla describe los parámetros de la función de optimización de readdir:
|
Parámetro |
Descripción |
Valor predeterminado |
|
|
Habilita la función de optimización de readdir. Actívela con |
Deshabilitado |
|
|
Registra los metadatos de enlaces simbólicos para que se muestren correctamente. Actívelo con |
Deshabilitado |
Lectura directa
La función de lectura directa está diseñada para cargas de trabajo de lectura secuencial en archivos grandes. Sin esta función, ossfs descarga los archivos de OSS al disco antes de leerlos, por lo que el throughput de lectura queda limitado por la E/S del disco. Con la lectura directa, ossfs precarga los datos desde OSS directamente en la memoria y lee desde allí, eliminando el cuello de botella de la E/S de disco.
Antes de habilitar la lectura directa, tenga en cuenta los siguientes límites:
Utilícela únicamente para lecturas secuenciales. Las lecturas aleatorias provocan que ossfs reinicie la ventana de precarga, lo que degrada el throughput.
Las escrituras vacían la memoria al disco para mantener la consistencia de los datos.
Después de habilitar la lectura directa, el parámetro
use_cacheno tiene efecto.
La siguiente tabla describe los parámetros de la función de lectura directa:
|
Parámetro |
Descripción |
Valor predeterminado |
|
|
Habilita la función de lectura directa. Actívela con |
Deshabilitado |
|
|
Memoria máxima para datos precargados en todos los procesos de ossfs. Unidad: MB. |
1024 (mínimo: 128) |
Cuando los datos precargados alcanzan el límite definido por direct_read_prefetch_limit, ossfs detiene la precarga y el throughput de lectura vuelve a la velocidad de E/S de red. Para deshabilitar por completo la precarga en memoria y leer directamente desde OSS, establezca -o direct_read_prefetch_chunks=0.
Selección de una configuración de lectura
Utilice la siguiente tabla para elegir la configuración adecuada según su carga de trabajo:
|
Carga de trabajo |
Configuración recomendada |
Razón |
|
Lecturas secuenciales en archivos grandes con un solo acceso |
Habilite |
Precarga datos en memoria y elimina la E/S de disco |
|
Archivos pequeños o medianos leídos repetidamente desde el mismo nodo |
Habilite la caché de páginas del kernel ( |
Reutiliza la caché de páginas del sistema operativo entre lecturas |
|
Archivos leídos repetidamente donde la caché debe persistir tras reinicios de procesos |
Habilite la caché de disco ( |
Persiste entre reinicios; ofrece mayor capacidad que la caché de páginas |
|
Gran cantidad de objetos cuando los servicios no requieren metadatos de los objetos |
Habilite |
Elimina las llamadas HeadObject por objeto durante el recorrido de directorios |
direct_readyuse_cacheson mutuamente excluyentes. Cuandodirect_readestá habilitado,use_cacheno tiene efecto.
Mejores prácticas
Escenarios de lectura y escritura
Separe las lecturas y escrituras en distintos endpoints de OSS para obtener el mejor rendimiento. Consulte Best practices for OSS read/write splitting.
Si no es posible separarlos, actualice a ossfs 1.91 o posterior para corregir el error de carga multiparte EntityTooSmall. Para garantizar la consistencia de los datos, agregue -o max_stat_cache_size=0 al campo otherOpts.
Escenarios de solo lectura
Siga estas recomendaciones para elegir una estrategia de almacenamiento en caché:
Lectura directa (
-o direct_read): Úsela para lecturas secuenciales de una sola pasada en archivos grandes cuyos datos no volverán a consultarse. Elimina la E/S de disco al precargar los datos en memoria.Caché de páginas del kernel (
-o kernel_cache): Úsela para archivos que se leen repetidamente desde el mismo nodo. Reutiliza los datos almacenados en caché entre lecturas sin sobrecarga de escritura en disco.Caché de disco (
-o use_cache=/path/to/cache): Úsela para archivos leídos repetidamente cuando la caché debe persistir entre reinicios de procesos o superar la memoria disponible.
Cargas de trabajo intensivas en directorios
Si el bucket de OSS contiene una gran cantidad de objetos y sus servicios no requieren metadatos de los objetos, habilite -o readdir_optimize. Si el versionado está habilitado en el bucket de OSS, agregue también -o listobjectsv2.
Pruebas de rendimiento
Los resultados presentados a continuación se obtuvieron mediante Sysbench o scripts personalizados. Los resultados varían según la herramienta y el entorno utilizados.
Todas las pruebas de rendimiento utilizan un nodo ecs.g7.xlarge con un disco de sistema PL0.
Throughput (con optimización de readdir y lectura directa deshabilitadas)
Sysbench prueba 128 archivos de 8 MiB cada uno con lecturas secuenciales, escrituras secuenciales, lecturas aleatorias y escrituras aleatorias. En comparación con la versión 1.88.x:
ossfs 1.88.x genera un mayor throughput en la creación de archivos y en lecturas secuenciales.
ossfs 1.91 y versiones posteriores generan un mayor throughput en lecturas secuenciales, lecturas aleatorias y escrituras aleatorias.
Latencia de recorrido de directorios tras habilitar la optimización de readdir
La prueba ejecuta ls y find sobre 1,000 archivos y registra la latencia por ejecución. En comparación con ossfs 1.88.x y ossfs 1.91 con la optimización de readdir deshabilitada:
La latencia de
lses un 74.8% menor que en la versión 1.88.x y un 74.3% menor que en la 1.91 con la optimización de readdir deshabilitada, lo que representa una mejora de 4.0x y 3.9x, respectivamente.La latencia de
findes un 58.8% menor tanto en la versión 1.88.x como en la 1.91 con la optimización de readdir deshabilitada, lo que equivale a una mejora de 2.4x en ambos casos.
Latencia de lectura secuencial en archivos grandes tras habilitar la lectura directa
La prueba lee concurrentemente 10 archivos de 10 GiB y registra la latencia, el uso máximo de disco y el uso máximo de memoria.
El uso máximo de memoria abarca todos los procesos de ossfs, incluidos los datos precargados y otros gastos generales de la lectura directa.
En comparación con la versión 1.88.x y la 1.91 con lectura directa deshabilitada:
La latencia es un 85.3% menor que en la versión 1.88.x y un 79% menor que en la 1.91 con lectura directa deshabilitada.
El uso máximo de disco es 0: no se escriben archivos temporales en el disco.
El uso máximo de memoria es ligeramente superior, lo que permite lograr el uso nulo de disco mencionado anteriormente.
Ejecución de sus propias pruebas de rendimiento
Puede evaluar el rendimiento de ossfs en contenedores o directamente en instancias de ECS. Los siguientes pasos utilizan un entorno de Sysbench en contenedor.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un bucket de OSS y una solicitud de volumen persistente (PVC). Para la configuración, consulte Montaje de un volumen de OSS aprovisionado estáticamente
Pasos siguientes
Puede evaluar el rendimiento de diversas versiones de ossfs mediante la herramienta de pruebas de MySQL incluida en Sysbench.
Pruebe la optimización de readdir ejecutando
lsyfinden la ruta de montaje.Pruebe la lectura directa agregando
-o direct_readal campootherOptsde su PV y ejecutando lecturas secuenciales concurrentes.