Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:New features of ossfs 1.0 and later and ossfs performance benchmarking

Última actualización: Sep 04, 2026

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+

stat_cache_expire

TTL de la caché de metadatos. Unidad: segundos.

-1 (nunca caduca)

900

multipart_threshold

Umbral de tamaño de archivo para la carga multiparte. Unidad: MB.

5 x 1024

25

max_dirty_data

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+

multipart_size

Tamaño de parte para la carga multiparte. Unidad: MB.

10

30

parallel_count

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 chmod y chown no 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

readdir_optimize

Habilita la función de optimización de readdir. Actívela con -o readdir_optimize (no requiere valor).

Deshabilitado

symlink_in_meta

Registra los metadatos de enlaces simbólicos para que se muestren correctamente. Actívelo con -o symlink_in_meta (no requiere valor).

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_cache no tiene efecto.

La siguiente tabla describe los parámetros de la función de lectura directa:

Parámetro

Descripción

Valor predeterminado

direct_read

Habilita la función de lectura directa. Actívela con -o direct_read (no requiere valor).

Deshabilitado

direct_read_prefetch_limit

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 direct_read (-o direct_read)

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 (-o kernel_cache)

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 (-o use_cache=/path/to/cache)

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 readdir_optimize (-o readdir_optimize)

Elimina las llamadas HeadObject por objeto durante el recorrido de directorios

direct_read y use_cache son mutuamente excluyentes. Cuando direct_read está habilitado, use_cache no 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.

Importante

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.

image

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 ls es 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 find es 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.

image

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.

image

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:

Despliegue del entorno de prueba de Sysbench

  1. Cree un archivo llamado sysbench.yaml con el siguiente contenido. Este archivo despliega un contenedor de Sysbench con la PVC montada en /data.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sysbench
      labels:
        app: sysbench
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sysbench
      template:
        metadata:
          labels:
            app: sysbench
        spec:
          containers:
          - name: sysbench
            image: registry.cn-beijing.aliyuncs.com/tool-sys/tf-train-demo:sysbench-sleep
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-oss
                mountPath: "/data"
            livenessProbe:
              exec:
                command:
                - sh
                - -c
                - cd /data
              initialDelaySeconds: 30
              periodSeconds: 30
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                claimName: pvc-oss
  2. Despliegue la aplicación Sysbench:

    kubectl apply -f sysbench.yaml
  3. Inicie sesión en el contenedor de Sysbench y ejecute los siguientes comandos en la ruta de montaje para medir el throughput de lectura y escritura.

    Ajuste los valores de los parámetros según las especificaciones de su nodo. Para pruebas consecutivas, prepare nuevos archivos de prueba cada vez con el fin de evitar interferencias de la caché.

    Operación

    Comando

    Preparar archivos de prueba

    sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=rndrw prepare

    Probar E/S de escritura secuencial

    sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=seqwr --file-fsync-freq=0 run

    Probar E/S de lectura secuencial

    sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=seqrd --file-fsync-freq=0 run

    Probar E/S de lectura/escritura aleatoria

    sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=rndrw --file-fsync-freq=0 run

    Eliminar archivos de prueba

    sysbench --test=fileio --file-total-size=1G cleanup

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 ls y find en la ruta de montaje.

  • Pruebe la lectura directa agregando -o direct_read al campo otherOpts de su PV y ejecutando lecturas secuenciales concurrentes.