Performances et bonnes pratiques de Cloud Storage FUSE

Cette page décrit les performances de Cloud Storage FUSE en termes de latence, de bande passante et de nouvelles tentatives, ainsi que les bonnes pratiques à adopter lors de son utilisation.

Lecture et écriture

Cloud Storage FUSE offre de meilleures performances pour les charges de travail de lecture et d'écriture séquentielles que pour les charges de travail de lecture et d'écriture aléatoires. Cloud Storage FUSE utilise une méthode heuristique pour détecter le moment où un fichier est lu de manière séquentielle, ce qui permet d'augmenter la taille et de réduire le nombre de requêtes de lecture Cloud Storage utilisant la même connexion TCP.

Pour optimiser les performances de lecture séquentielle, il est recommandé d'importer et de lire des fichiers d'une taille comprise entre 5 et 200 Mo. Pour optimiser les performances de lecture aléatoire, il est recommandé d'importer et de lire des fichiers d'environ 2 Mo.

Mise en cache

L'utilisation de Cloud Storage FUSE avec le cache de fichiers, de statistiques, de types, ou avec les trois types de cache peut augmenter les performances et réduire les coûts, mais peut également réduire la cohérence.

Cache de statistiques et de types

Les caches de statistiques et de types peuvent réduire le nombre d'appels série vers Cloud Storage lors de lectures répétées sur un même fichier, ce qui améliore les performances. Définissez les caches de statistiques et de types en fonction du nombre de fichiers ayant des lectures répétées et pouvant tirer parti de la mise en cache. Vous pouvez utiliser le nombre de fichiers pour représenter la taille approximative du cache. Nous recommandons les limites suivantes pour chaque type de cache :

  • stat-cache-max-size-mb : utilisez la valeur par défaut 32 si votre charge de travail implique jusqu'à 20 000 fichiers. Si votre charge de travail dépasse 20 000 fichiers, augmentez la valeur stat-cache-max-size-mb de 10 pour 6 000 fichiers supplémentaires, environ 1 500 octets par fichier.

    stat-cache-max-size-mb est une limite au niveau de l'installation, et l'utilisation réelle de la mémoire peut être inférieure à la valeur spécifiée. Vous pouvez également définir stat-cache-max-size-mb sur -1 pour permettre au cache de statistiques d'utiliser autant de mémoire que nécessaire.

  • type-cache-max-size-mb : utilisez la valeur par défaut 4 si le nombre maximal de fichiers dans un seul répertoire du bucket que vous installez est de 20 000 ou moins. Si le nombre maximal de fichiers dans un même répertoire que vous installez est supérieur à 20 000, augmentez la valeur type-cache-max-size-mb de 1 pour 5 000 fichiers, soit environ 200 octets par fichier.

    type-cache-max-size-mb est une limite au niveau de l'installation, et l'utilisation réelle de la mémoire peut être inférieure à la valeur spécifiée. Vous pouvez également définir la valeur type-cache-max-size-mb sur -1 pour permettre au cache de types d'utiliser autant de mémoire que nécessaire.

Nous vous recommandons d'exécuter une liste complète en transmettant ls -R sur votre bucket installé avant d'exécuter votre charge de travail. Vous améliorerez ainsi les performances lors de la première exécution en remplissant à l'avance le cache de type dans une méthode par lot plus rapide.

Bonnes pratiques de mise en cache des fichiers

Assurez-vous que l'intégralité de votre ensemble de données est adapté à la capacité de cache pour optimiser les performances et éviter le thrashing du cache. Tenez également compte de la capacité et des performances maximales que votre support de cache peut fournir. Si vous atteignez les performances maximales, la limite de capacité ou les deux, il est avantageux de lire directement depuis Cloud Storage, qui présente des limites beaucoup plus élevées que Cloud Storage FUSE.

IOPS (requêtes par seconde)

Filestore est une meilleure option que Cloud Storage FUSE pour les charges de travail qui nécessitent des opérations d'entrée/de sortie par seconde (IOPS) instantanées, également appelées "requêtes par seconde" dans Cloud Storage. Filestore est également la meilleure option pour un nombre très élevé d'IOPS sur un seul système de fichiers et une latence plus faible.

Vous pouvez également utiliser la fonctionnalité de cache de fichiers Cloud Storage FUSE pour exploiter les caractéristiques de performances des supports de cache sous-jacents s'ils fournissent des IOPS élevées et une faible latence.

Latence et débit

Cloud Storage FUSE a une latence supérieure à celle d'un système de fichiers local. Le débit est réduit lorsque vous lisez ou écrivez de petits fichiers un par un, car cela entraîne plusieurs appels d'API distincts. La lecture ou l'écriture simultanées de plusieurs fichiers volumineux peut contribuer à faire augmenter le débit. Utilisez la fonctionnalité de cache de fichiers de Cloud Storage FUSE pour améliorer les performances des petites E/S aléatoires.

La latence du système de fichiers de Cloud Storage FUSE affecte la commande rsync, qui ne lit et n'écrit qu'un seul fichier à la fois. Pour transférer plusieurs fichiers en parallèle vers ou depuis votre bucket, utilisez la Google Cloud CLI en exécutant la commande gcloud storage rsync. Pour en savoir plus, reportez-vous à la documentation rsync.

Atteindre le débit maximal

Pour atteindre le débit maximal, utilisez une machine disposant de suffisamment de ressources de processeur pour augmenter le débit et saturer la carte d'interface réseau (NIC). Une utilisation insuffisante des ressources de processeur peut entraîner une limitation de Cloud Storage FUSE.

Si vous utilisez Google Kubernetes Engine, augmentez l'allocation de processeur au conteneur side-car Cloud Storage FUSE si vos charges de travail nécessitent un débit plus élevé. Vous pouvez augmenter les ressources utilisées par le conteneur side-car ou allouer des ressources illimitées.

Définissez le nombre de threads en fonction du nombre de cœurs de processeur disponibles. Si le nombre de cœurs ou de threads est supérieur à 100, remplacez –max-cons-per-host par la même valeur. Les frameworks de ML utilisent généralement num_workers pour définir le nombre de threads.

Limitation du débit

Pour limiter le débit de trafic envoyé par Cloud Storage FUSE à Cloud Storage, vous pouvez utiliser les options suivantes dans votre commande gcsfuse :

  • L'option --limit-ops-per-sec contrôle la fréquence à laquelle Cloud Storage FUSE envoie des requêtes à Cloud Storage.

  • L'option --limit-bytes-per-sec contrôle la bande passante à laquelle Cloud Storage FUSE télécharge les données depuis Cloud Storage.

Pour en savoir plus sur ces options, consultez la documentation de la ligne de commande gcsfuse.

Toutes les limites de débit sont approximatives et effectuées sur une période de 8 heures. Par défaut, aucune limite de débit n'est appliquée.

Contrôle de la procédure d'importation

Par défaut, les requêtes ayant échoué depuis Cloud Storage FUSE vers Cloud Storage sont renouvelées avec un intervalle exponentiel entre les tentatives jusqu'à une durée d'intervalle maximale spécifiée, avec une valeur par défaut de 30s (30 secondes). Une fois que l'intervalle entre les tentatives dépasse la durée maximale spécifiée, la nouvelle tentative se poursuit avec la durée maximale spécifiée. Vous pouvez utiliser l'option --max-retry-sleep dans le cadre d'un appel gcsfuse pour spécifier l'intervalle entre les tentatives.

Pour en savoir plus sur l'option --max-retry-sleep, consultez la documentation de la ligne de commande gcsfuse.

Sémantique des répertoires

Cloud Storage fonctionne avec un espace de noms plat, ce qui signifie que les répertoires n'existent pas réellement dans Cloud Storage. Les répertoires sont plutôt représentés par des noms d'objets se terminant par une barre oblique (/) (par exemple, dans le nom d'objet my-bucket/directory/file.txt, my-bucket/directory/ représente un répertoire). Les répertoires faisant partie de noms d'objet, mais qui n'existent pas en tant qu'objets réels, sont appelés des répertoires définis implicitement.

Par défaut, lorsque vous installez un bucket avec des répertoires définis implicitement, Cloud Storage FUSE ne peut ni déduire ni accéder à ces répertoires. Cloud Storage FUSE ne peut déduire que les répertoires définis explicitement, ce qui signifie que le répertoire existe en tant qu'objet réel dans le bucket Cloud Storage.

Par exemple, supposons que vous installiez un bucket nommé my-bucket, qui contient l'objet my-bucket/directory/file1.txt. Si vous exécutez ls sur le point d'installation du bucket, Cloud Storage FUSE ne peut pas accéder au répertoire my-bucket/directory/ ni à l'objet file1.txt qu'il contient, car directory n'existe pas en tant qu'objet dans Cloud Storage. Pour permettre à Cloud Storage FUSE de déduire les répertoires et les objets qu'ils contiennent, vous pouvez définir explicitement les répertoires en les créant dans votre système de fichiers local à l'aide de la commande mkdir, ou en incluant l'option --implicit-dirs dans votre commande gcsfuse.

Pour en savoir plus sur la sémantique des répertoires, y compris sur l'installation de buckets avec des préfixes existants, consultez la page Fichiers et répertoires dans la documentation GitHub. Pour en savoir plus sur l'option --implicit-dirs, consultez la documentation de la ligne de commande Cloud Storage FUSE.

Éléments à prendre en compte pour lister des objets

Lorsque vous répertoriez tous les objets d'un bucket installé (par exemple, en exécutant ls), Cloud Storage FUSE appelle l'API Objects: list sur Cloud Storage. L'API pagine les résultats, ce qui signifie que Cloud Storage FUSE peut avoir besoin d'émettre plusieurs appels, en fonction du nombre d'objets dans votre bucket. Notez que cela peut rendre une opération de liste coûteuse et lente.

Benchmarks

Pour savoir comment effectuer des tests de charge sur Cloud Storage FUSE, consultez la page Benchmarks de performances dans la documentation GitHub.

Journalisation

Pour configurer la journalisation des activités Cloud Storage FUSE, y compris la rotation des journaux, spécifiez les champs nécessaires sous la clé logging dans un fichier de configuration Cloud Storage FUSE. Par défaut, les fichiers journaux sont soumis à une rotation et consomment environ 1 Gio d'espace.