À partir de la version 2.0.9, ossfs prend en charge les écritures aléatoires via un répertoire temporaire local. En configurant l'option de montage --temp_dir, ossfs 2.0 met les données écrites en tampon sur un disque local, offrant au point de montage une sémantique complète d'écriture aléatoire POSIX, telle que l'écriture à des décalages arbitraires, la troncature à n'importe quelle taille et la lecture pendant l'écriture. Cette rubrique décrit les principes de fonctionnement, les méthodes de configuration, les contraintes d'utilisation et les recommandations relatives aux écritures aléatoires.
Informations générales
Une fois qu'un objet est créé dans OSS, il ne peut pas être modifié partiellement. Toute modification du contenu nécessite la réécriture intégrale de l'objet. Dans le mode par défaut d'ossfs 2,0, le chemin d'écriture utilise un téléchargement en flux continu : les données sont envoyées vers OSS sous forme de parties séquentielles au fur et à mesure de leur écriture, ce qui présente les limitations suivantes :
Seules les écritures séquentielles sont prises en charge. Les appels
pwriteà des positions situées au-delà de la fin du fichier ne sont pas pris en charge.La commande
truncatene permet que la troncature à zéro. La troncature à toute autre taille non nulle renvoie l'erreurENOTSUP.Il est impossible de lire un fichier pendant son écriture (avant sa fermeture). Une telle tentative renvoie l'erreur
EBUSY.
Des scénarios tels que l'exécution de code par des agents IA, l'édition de scripts sur place et le traitement des résultats intermédiaires en calcul scientifique reposent couramment sur la sémantique d'écriture aléatoire. La fonctionnalité d'écriture aléatoire d'ossfs 2,0 met les données écrites en tampon dans un répertoire temporaire local et, combinée à la gestion des blocs et au téléchargement incrémentiel, implémente les écritures aléatoires par-dessus le stockage d'objets.
Le mode d'écriture aléatoire d'ossfs 2,0 présente les caractéristiques suivantes :
Sémantique complète d'écriture aléatoire POSIX : Prend en charge
pwriteà des décalages arbitraires,O_APPENDettruncateà n'importe quelle taille (extension ou réduction).Lecture pendant l'écriture : Un fichier peut être lu pendant son écriture. Les parties modifiées sont lues depuis la zone de mise en tampon locale, tandis que les parties non modifiées sont lues directement depuis OSS.
Téléchargement incrémentiel : Lors de la synchronisation (flush) ou de la fermeture, seuls les blocs de données modifiés sont téléchargés depuis le disque local. Les parties non modifiées sont gérées via une copie côté serveur sur OSS, sans consommation d'E/S locales ni de bande passante de téléchargement.
Protection de l'espace disque : Un budget disque global intégré renvoie l'erreur
ENOSPCpour les écritures lorsque l'espace du disque de mise en tampon est faible. Vous pouvez réserver un seuil d'espace libre au moment du montage pour éviter que le disque système ne soit saturé.
Le répertoire temporaire local sert uniquement le chemin d'écriture. Il est indépendant du cache de données local (--disk_data_cache_dir, un cache en lecture). Vous pouvez activer les deux simultanément (en utilisant des répertoires différents) sans aucune interférence entre eux.
Par défaut, ossfs 1,0 utilise le répertoire /tmp comme répertoire temporaire local. Pour conserver une cohérence avec le chemin par défaut d'ossfs 1.0, configurez --temp_dir=/tmp.
Une fois les écritures aléatoires activées, les performances d'écriture sont limitées par les performances en lecture/écriture du disque où réside le répertoire temporaire local. Dans les scénarios impliquant des écritures séquentielles en masse, comme la copie de fichiers volumineux, les performances sont bien inférieures à celles du mode par défaut. N'activez cette fonctionnalité que si votre charge de travail requiert véritablement la sémantique d'écriture aléatoire.
Principes de fonctionnement
Mise en tampon locale et téléchargement fusionné
Après l'activation des écritures aléatoires, ossfs 2,0 crée un fichier de mise en tampon dans le répertoire temporaire local pour chaque fichier faisant l'objet d'une écriture aléatoire, enregistrant les dernières modifications localement selon une granularité fixe de blocs de données (chunks) :
Les données écrites atterrissent directement dans le fichier de mise en tampon local. Si une écriture ne chevauche que partiellement un bloc de données déjà existant dans le cloud, ossfs récupère d'abord ce bloc depuis OSS afin de garantir l'intégrité des données mises en tampon localement.
Lors d'un appel
fsyncouclose, les modifications mises en tampon localement sont automatiquement fusionnées et téléchargées avec les données présentes dans le cloud : les parties modifiées sont téléchargées depuis le disque local, tandis que les parties non modifiées sont gérées via une copie côté serveur sur OSS, sans retransmettre l'intégralité du fichier ni consommer de bande passante de lecture du disque local.Après un téléchargement réussi, l'espace disque de mise en tampon est automatiquement libéré.
Lecture pendant l'écriture
Un fichier peut également être lu pendant son écriture : les parties modifiées sont lues depuis la zone de mise en tampon locale, et les parties non modifiées sont lues directement depuis OSS.
Protection de l'espace disque
Au moment du montage, ossfs vérifie si l'espace libre sur le disque où réside le répertoire temporaire répond à l'exigence réservée, et rejette le montage si ce n'est pas le cas. Si l'espace disque réservé est insuffisant, les écritures renvoient l'erreur ENOSPC au lieu de provoquer le crash du processus en raison d'un disque plein.
Méthodes de configuration
|
Élément de configuration |
Requis |
Description |
Valeur par défaut |
|
temp_dir |
Non |
Chemin du répertoire temporaire local. Doit être un chemin absolu. La définition d'une valeur non vide active les écritures aléatoires. Laissez ce champ vide pour désactiver cette fonctionnalité. |
Vide |
|
temp_dir_free_bytes |
Non |
Espace disque libre minimal réservé sur le disque où réside le répertoire temporaire, en octets (prend en charge les unités telles que K, M et G). ossfs2 n'utilisera pas cet espace réservé pour la mise en tampon des données : lorsque l'espace disque libre descend en dessous de ce seuil, les nouvelles écritures renvoient ENOSPC, laissant une marge de sécurité pour les autres charges de travail sur le même disque. Si l'espace disque libre est déjà inférieur à cette valeur au moment du montage, le montage échoue. Valeur minimale : 64 MiB. |
1 GiB |
|
random_write_max_file_size |
Non |
Taille logique maximale d'un seul fichier en mode d'écriture aléatoire, en octets (prend en charge les unités telles que K, M et G). Les écritures ou troncatures dépassant cette limite renvoient EFBIG. La limite physique supérieure correspond à la capacité de téléchargement multipartie d'OSS (10 000 parties × 5 GiB, soit environ 48,8 TiB). |
100 GiB |
Contraintes :
Si le répertoire ciblé par
--temp_dirn'existe pas, il est créé automatiquement. Nous vous recommandons d'utiliser une partition ou un disque indépendant pour éviter la contention d'espace avec le disque système ou d'autres charges de travail.Les données des fichiers en cours d'écriture sont stockées dans le répertoire temporaire local. Si le disque manque de capacité, les écritures renvoient ENOSPC. L'espace disque libre restant, moins l'espace réservé par
temp_dir_free_bytes, est appelé espace disque accessible en écriture. ossfs2 utilise uniquement cette portion d'espace pour stocker les données en cours d'écriture. L'espace disque accessible en écriture doit être supérieur à la taille totale de tous les fichiers écrits simultanément (dans le pire des cas, un fichier entier peut être écrit localement).Lorsque plusieurs instances ossfs2 sont montées sur la même machine, elles peuvent partager le même répertoire temporaire, car les noms des fichiers de mise en tampon n'entrent pas en collision. Toutefois, plusieurs instances entreront en concurrence pour l'espace et les E/S du disque ; nous vous recommandons donc d'utiliser des répertoires indépendants.
Les options
--temp_diret--enable_appendable_objectsont mutuellement exclusives et ne peuvent pas être activées simultanément.
Exemple de commande de montage :
ossfs2 mount /mnt/oss/ \
--oss_bucket <your-bucket> \
--oss_endpoint <your-endpoint> \
--oss_access_key_id <ak> \
--oss_access_key_secret <sk> \
--temp_dir /mnt/disk/ossfs2/temp \
--temp_dir_free_bytes 1G
Configuration requise
|
Paramètre |
Exigence |
|
Type de disque du répertoire temporaire |
Un disque éphémère élastique, un disque NVMe local ou un disque ESSD est recommandé. Le débit d'écriture du disque affecte directement la latence des écritures aléatoires et la vitesse de téléchargement. |
|
Espace disque disponible |
Supérieur ou égal à |
Effets de la fonctionnalité
Comparaison des capacités d'écriture avant et après l'activation de --temp_dir :
|
Opération |
Mode par défaut |
Mode d'écriture aléatoire |
|
Écriture séquentielle par ajout |
Prise en charge |
Prise en charge |
|
pwrite à un décalage arbitraire (au-delà de la fin du fichier) |
Non pris en charge |
Prise en charge |
|
Troncature à 0 |
Prise en charge |
Prise en charge |
|
Troncature à n'importe quelle taille (extension ou réduction) |
Non pris en charge (ENOTSUP) |
Prise en charge |
|
Écriture O_APPEND sur un fichier existant |
Prise en charge |
Prise en charge |
|
Lecture d'un fichier pendant son écriture |
Non pris en charge (EBUSY) |
Prise en charge |
|
Écriture simultanée par plusieurs handles sur le même fichier |
Non pris en charge |
Prise en charge |
Sémantique de durabilité :
Par défaut, le mode d'écriture aléatoire suit la sémantique
fsync:fsyncdéclenche un téléchargement fusionné des modifications locales avec les données présentes dans le cloud. Un retour réussi signifie que les données ont été persistées sur OSS. Les données restantes sont également téléchargées lors de la fermeture du fichier.En cas d'échec du téléchargement, l'erreur est renvoyée à l'application, qui peut retenter l'opération via
fsync. Si le téléchargement échoue définitivement et que le fichier est fermé, les données non persistées sont perdues et le contenu du fichier revient à la dernière version téléchargée avec succès sur le côté distant.Si le processus se termine anormalement, les données mises en tampon non téléchargées sont perdues, mais l'objet dans OSS reste dans l'état de son dernier téléchargement réussi. Aucun objet corrompu n'est produit.
Recommandations d'utilisation
Les écritures aléatoires basées sur un répertoire temporaire local conviennent aux scénarios nécessitant une sémantique d'écriture similaire à celle d'un système de fichiers local sur un point de montage OSS.
Scénarios adaptés à l'activation des écritures aléatoires :
|
Scénario |
Recommandation d'utilisation |
|
Exécution de code par agent IA / environnements sandbox (les agents et interpréteurs de code effectuent des lectures et écritures arbitraires, ainsi que des éditions sur place, sur les fichiers) |
Activez les écritures aléatoires. Nous vous recommandons d'utiliser un disque indépendant haute performance pour le répertoire temporaire et de réserver l'espace disque accessible en écriture en fonction de la taille totale des fichiers écrits simultanément. |
|
Fichiers de résultats intermédiaires d'applications de calcul scientifique ou de simulation |
Activez les écritures aléatoires. Planifiez l'espace disque accessible en écriture en fonction de la taille totale des fichiers écrits simultanément. |
Scénarios pour lesquels l'activation des écritures aléatoires n'est pas recommandée :
|
Scénario |
Recommandation d'utilisation |
|
Copie de fichiers volumineux (écritures en masse sur le point de montage à l'aide de cp, rsync et outils similaires) |
Dans ce scénario, les performances d'écriture sont limitées par le disque local et sont bien inférieures à celles du mode par défaut. Utilisez plutôt le mode de téléchargement en flux continu par défaut. |
|
Écritures séquentielles par ajout pures (écritures de journaux en flux continu) |
Le chemin de téléchargement en flux continu par défaut engendre moins de surcharge, il n'est donc pas nécessaire d'activer les écritures aléatoires. Si la lecture pendant l'écriture est requise, envisagez plutôt l'option |
Recommandations relatives au budget disque :
Maintenez le répertoire temporaire séparé du disque système pour empêcher les données mises en tampon de saturer le disque système et d'affecter la stabilité de l'hôte. Si la machine ne dispose que d'un seul disque, nous vous recommandons de définir
temp_dir_free_bytessur une valeur plus élevée (par exemple, 10G) afin de réserver suffisamment d'espace libre pour le système.L'espace disque accessible en écriture (voir les contraintes ci-dessus) doit être supérieur à la taille totale des fichiers écrits simultanément.
Pour un fichier unique dépassant 100 GiB, en plus d'augmenter explicitement
--random_write_max_file_size(par exemple,--random_write_max_file_size=500G), vous devez également vous assurer que l'espace disque accessible en écriture dépasse la taille de ce fichier.