Partager via


Zones de marshaling CLFS

Un client CLFS (Common Log File System) ajoute des enregistrements de journal à une zone de marshaling dans la mémoire volatile, et CLFS écrit régulièrement ces enregistrements dans un stockage stable. Une zone de marshaling est une collection de mémoires tampons d’E/S du journal, chacune pouvant contenir plusieurs enregistrements de journal. Les mémoires tampons d’E/S du journal contiennent les enregistrements qui ont été récemment écrits dans un flux (mais qui ne sont peut-être pas vidés dans un stockage stable) ainsi que les enregistrements qui ont récemment été lus à partir du flux.

Vous créez une zone de marshaling en appelant ClfsCreateMarshallingArea, à laquelle vous devez spécifier la taille des mémoires tampons d’E/S du journal que la zone de marshaling utilisera et si ces mémoires tampons seront dans le pool paginé ou non paginé. Toutes les mémoires tampons d’E/S du journal dans une zone de marshaling sont de la même taille, et CLFS garantit que la taille est un multiple de la taille du secteur sur le support de stockage stable sous-jacent. Autrement dit, CLFS prend la taille demandée et l’arrondit si nécessaire pour rendre vos mémoires tampons d’E/S compatibles avec le support de stockage stable.

CLFS alloue et libère les mémoires tampons d’E/S du journal en fonction des besoins, mais vous avez la possibilité de définir le nombre maximal de mémoires tampons d’E/S pouvant être allouées à la fois. Vous avez également la possibilité de fournir vos propres fonctions d’allocation de mémoire tampon et de désallocation.

Pour spécifier le nombre maximal de mémoires tampons d’E/S du journal qui peuvent être allouées à la fois pour l’écriture d’enregistrements de journal, définissez le paramètre cMaxWriteBuffers de la fonction ClfsCreateMarshallingArea . La limitation du nombre de mémoires tampons affecte la fréquence des vidages dans un stockage stable ; avec moins de mémoires tampons, les enregistrements de journal doivent être écrits plus souvent dans un stockage stable. Si vous n’avez pas besoin de contrôler la fréquence de vidage, définissez cMaxWriteBuffers sur INFINITE (défini dans Winbase.h).

Pour spécifier le nombre maximal de mémoires tampons d’E/S du journal qui peuvent être allouées à la fois pour la lecture des enregistrements de journal, définissez le paramètre cMaxReadBuffers de la fonction ClfsCreateMarshallingArea . Si vous n’avez pas besoin de contrôler le nombre de mémoires tampons de lecture allouées, définissez cMaxReadBuffers sur INFINITE.

Si vous souhaitez effectuer votre propre allocation de mémoire pour les mémoires tampons d’E/S du journal, définissez les paramètres pfnAllocBuffer et pfnFreeBuffer de la fonction ClfsCreateMarshallingArea pour pointer vers vos propres fonctions d’allocation et de désallocation. Ensuite, CLFS appelle vos fonctions pour effectuer l’allocation et la libération de la mémoire réelle chaque fois qu’il a besoin de créer ou de libérer des mémoires tampons d’E/S de journal.

Dans certains cas, vous pouvez réserver de l’espace dans une zone de marshaling à l’avance. Par exemple, vous savez peut-être que vous êtes sur le point d’écrire un ensemble de dix enregistrements de journal et que vous voulez être sûr qu’il y a suffisamment d’espace dans la zone de marshaling pour l’ensemble. Pour réserver de l’espace pour les dix enregistrements, créez un tableau de dix éléments qui contient les tailles des enregistrements, puis passez le tableau à la fonction ClfsReserveAndAppendLog dans le paramètre rgcbReservation . ClfsReserveAndAppendLog est une fonction multi-usage qui réserve de l’espace dans une zone de marshaling ou ajoute des enregistrements de journal à un flux ou effectue ces deux opérations de manière atomique. En définissant les paramètres de manière appropriée, vous pouvez appeler ClfsReserveAndAppendLog pour réserver de l’espace pour une utilisation future sans ajouter d’enregistrements au flux.