Consideraciones de rendimiento

En esta página, se proporciona orientación para configurar tu entorno de Parallelstore para obtener el mejor rendimiento.

Recomendaciones generales

  • Quita cualquier alias de ls para mejorar el rendimiento predeterminado. En muchos sistemas, tiene un alias de ls -color=auto, que es mucho más lento con la configuración predeterminada de Parallelstore.

  • Si el rendimiento de las operaciones de lista es lento, considera habilitar la caché para el montaje de dfuse.

Biblioteca de intercepción

La biblioteca libioil se puede usar para mejorar el rendimiento de las operaciones de lectura y escritura en DFuse desde aplicaciones que usan libc. La biblioteca evita el kernel interceptando las llamadas de lectura y escritura de POSIX desde la aplicación para entregarlas directamente en el espacio de usuario. Consulta la biblioteca de intercepción para obtener más detalles.

En la mayoría de los casos, te recomendamos que uses la biblioteca de intercepción en una invocación por proceso o por aplicación.

Entre las situaciones en las que es posible que no quieras o no necesites usar la biblioteca de intercepción, se incluyen las siguientes:

  • Solo las aplicaciones compiladas con libc pueden usar la biblioteca de intercepción.
  • Si tienes una carga de trabajo que se beneficia de la caché, como acceder a los mismos archivos de forma reiterada, te recomendamos que no uses la biblioteca de intercepción.
  • Si tu carga de trabajo requiere muchos metadatos, por ejemplo, si trabajas con muchos archivos pequeños o una lista de directorios muy grande, es probable que la biblioteca de intercepción no mejore el rendimiento.

La invocación de LD_PRELOAD se puede establecer como una variable de entorno en tu entorno de shell, pero hacerlo a veces puede causar problemas. En su lugar, te recomendamos que lo especifiques con cada comando.

Como alternativa, es posible vincular la biblioteca de intercepción a tu aplicación en el tiempo de compilación con la marca -lioil.

Almacenamiento en caché de dfuse

El almacenamiento en caché está habilitado en dfuse de forma predeterminada.

dfuse usa dos marcas relacionadas con la caché cuando activa una instancia de Parallelstore:

  • --disable-wb-cache usa el almacenamiento en caché de escritura directa en lugar de la escritura en caché de escritura.
  • --disable-caching inhabilita todo el almacenamiento en caché.

Las siguientes sugerencias se aplican al almacenamiento en caché y al rendimiento:

  • Si usas la biblioteca de intercepción, se omite la caché de escritura. Te recomendamos que especifiques --disable-wb-cache cuando uses la biblioteca de intercepción.
  • Si tu carga de trabajo implica leer muchos archivos a la vez, debes inhabilitar el almacenamiento en caché.
  • En el caso de las cargas de trabajo que involucran a muchos clientes que modifican archivos y las actualizaciones deben estar disponibles de inmediato para otros clientes, debes inhabilitar el almacenamiento en caché.
  • Si tu carga de trabajo lee los mismos archivos de forma reiterada, el almacenamiento en caché puede mejorar el rendimiento. Esto es muy importante si los archivos caben en la memoria de los clientes. dfuse usa la caché de páginas de Linux para su almacenamiento en caché.
  • Para las cargas de trabajo que consisten en E/S pequeñas a archivos grandes, además de habilitar la caché, puede ser beneficioso aumentar la lectura anticipada de dfuse. Para aumentar la lectura anticipada de dfuse, después de activar dfuse, ejecuta los siguientes comandos:

    echo 4096 > /sys/class/bdi/\$(mountpoint -d /mnt)/read_ahead_kb
    echo 100 > /sys/class/bdi/\$(mountpoint -d /mnt)/max_ratio
    

Si tus cargas de trabajo incluyen una combinación de las situaciones anteriores, puedes activar la misma instancia de Parallelstore en varios puntos de activación con diferentes parámetros de configuración de almacenamiento en caché.

Recuento de subprocesos y recuento de colas de eventos

Cuando actives tu instancia de Parallelstore, te recomendamos los siguientes valores para --thread-count y --eq-count:

  • El valor de recuento de subprocesos no debe exceder la cantidad de núcleos de CPU virtual.
  • El valor máximo recomendado de recuento de subprocesos es de entre 16 y 20. Más allá de esta cantidad, el beneficio de rendimiento es mínimo o nulo, independientemente de la cantidad de núcleos disponibles.
  • El valor de la cola de eventos debe ser la mitad del valor del recuento de subprocesos.

Si tu carga de trabajo incluye una cantidad muy alta de operaciones de archivos pequeños y un acceso intensivo a los metadatos, puedes experimentar con el aumento de las cantidades más allá de estas recomendaciones.

Configuración de división de archivos

El seccionamiento de archivos es una técnica de almacenamiento de datos en la que un archivo se divide en bloques o franjas y se distribuye en varios destinos de almacenamiento. El seccionamiento de archivos puede aumentar el rendimiento, ya que permite lecturas y escrituras en paralelo en más de un destino de almacenamiento que respalda la instancia.

Cuando crees tu instancia de Parallelstore, puedes especificar una de las tres configuraciones de fragmentación de archivos:

  • Mínimo
  • Equilibrado
  • Máximo

Esta configuración puede tener una importancia significativa en el rendimiento de Parallelstore. Para la mayoría de las cargas de trabajo, recomendamos el parámetro de configuración equilibrado, que debería ser una compensación razonable para la mayoría de las cargas de trabajo. Si el rendimiento con la configuración equilibrada no es aceptable, haz lo siguiente:

  • La configuración mínima puede mejorar el rendimiento de las cargas de trabajo con muchos archivos pequeños, en particular, cuando el tamaño promedio del archivo es inferior a 256 KB.

  • La configuración máxima puede mejorar el rendimiento de las cargas de trabajo con archivos muy grandes, generalmente superiores a 8 GB, en especial cuando muchos clientes comparten el acceso a los mismos archivos.

Para el ajuste avanzado, la herramienta daos proporciona parámetros de configuración por archivo o por directorio. Experimentar con el ajuste avanzado conlleva riesgos relacionados con el rendimiento y, por lo general, no se recomienda. Consulta Información sobre la redundancia de datos y el fragmentación en los DAOS para obtener más detalles.

Configuración de la división de directorios

Cuando crees tu instancia de Parallelstore, puedes especificar una de las tres opciones de configuración de la fragmentación de directorios:

  • Mínimo
  • Equilibrado
  • Máximo

Para la mayoría de las cargas de trabajo, recomendamos el parámetro de configuración máximo.

Para las cargas de trabajo que involucran muchas listas de directorios grandes, la configuración equilibrada o mínima puede mejorar el rendimiento de las listas. Sin embargo, el rendimiento de otras operaciones, en particular la creación de archivos, puede verse afectado.

multiusuario

Cuando uses la herramienta dfuse para activar tu instancia de Parallelstore, te recomendamos que especifiques la marca --multi-user. Esta marca le indica al kernel que ponga el sistema de archivos disponible para todos los usuarios de un cliente, en lugar de solo para el usuario que ejecuta el proceso de DFuse. Luego, DFuse aparece como un sistema de archivos genérico para varios usuarios, y se habilitan las llamadas estándar a chown y chgrp. El usuario que las creó es el propietario de todas las entradas del sistema de archivos, como es habitual en un sistema de archivos POSIX.

Cuando especifiques la marca --multi-user, también debes actualizar /etc/fuse.conf como raíz. Para ello, agrega la siguiente línea:

user_allow_other

Al parecer, no hay una implicación de rendimiento para activar tu instancia como multiusuario.

Configuración de codificación por borrado

La codificación por borrado se establece en 2+1. No se puede cambiar esta configuración. Se rechaza cualquier E/S que no use EC2+1.

Asignación de recursos de contenedores secundarios de Google Kubernetes Engine

En la mayoría de los casos, el rendimiento insatisfactorio de Google Kubernetes Engine y Parallelstore se debe a que no hay suficiente CPU o memoria asignada al contenedor lateral de Parallelstore. Para asignar recursos de forma adecuada, ten en cuenta las siguientes sugerencias:

  • Lee las consideraciones destacadas en Configura recursos para el contenedor de sidecar. Aprenderás por qué podrías necesitar aumentar la asignación de recursos y cómo configurar la asignación de recursos del contenedor de Sidecar con anotaciones de Pod.

  • Puedes usar el valor 0 para desactivar cualquier límite o solicitud de recursos en los clústeres Standard. Por ejemplo, si configuras gke-parallelstore/cpu-limit: 0 y gke-parallelstore/memory-limit: 0, los límites de CPU y memoria del contenedor de sidecar estarán vacíos y se usarán las solicitudes predeterminadas. Este parámetro de configuración es útil cuando no sabes cuántos recursos necesita dfuse para tus cargas de trabajo y deseas que use todos los recursos disponibles en un nodo. Una vez que averigües cuántos recursos necesita dfuse según las métricas de tu carga de trabajo, puedes establecer los límites adecuados.

  • En los clústeres de Autopilot, no puedes usar el valor 0 para anular los límites y las solicitudes de recursos del contenedor lateral. Debes establecer de forma explícita un límite de recursos más grande para el contenedor del contenedor secundario en los clústeres de Autopilot y confiar en las métricas de Google Cloud para decidir si es necesario aumentar el límite de recursos.