Condividi tramite


Aree di marshalling CLFS

Un client CLFS (Common Log File System) aggiunge record di log a un'area di marshalling in memoria volatile e CLFS scrive periodicamente tali record in un'archiviazione stabile. Un'area di marshalling è una raccolta di buffer di I/O del log, ognuno dei quali può contenere diversi record di log. I buffer di I/O log contengono record che sono stati scritti di recente in un flusso (ma possibilmente non scaricati nell'archiviazione stabile) nonché i record che sono stati letti di recente dal flusso.

Si crea un'area di marshalling chiamando ClfsCreateMarshallingArea, al momento in cui è necessario specificare le dimensioni dei buffer di I/O del log che l'area di marshalling userà e se tali buffer saranno presenti nel pool di pagine o non a pagina. Tutti i buffer di I/O del log in un'area di marshalling sono le stesse dimensioni e CLFS garantisce che le dimensioni siano multiple delle dimensioni del settore nel supporto di archiviazione stabile sottostante. In questo caso, CLFS accetta le dimensioni richieste e lo arrotonda in base alle esigenze per rendere compatibili i buffer di I/O con il supporto di archiviazione stabile.

CLFS alloca e libera i buffer di I/O del log in base alle esigenze, ma è possibile impostare il numero massimo di buffer di I/O che possono essere allocati alla volta. È anche possibile fornire funzioni di allocazione e deallocazione del buffer personalizzate.

Per specificare il numero massimo di buffer di I/O del log che possono essere allocati alla volta per la scrittura di record di log, impostare il parametro cMaxWriteBuffers della funzione ClfsCreateMarshallingArea . La limitazione del numero di buffer influisce sulla frequenza di scaricamenti per l'archiviazione stabile; con meno buffer, i record di log devono essere scritti più spesso nell'archiviazione stabile. Se non è necessario controllare la frequenza di scaricamento, impostare cMaxWriteBuffers su INFINITE (definito in Winbase.h).

Per specificare il numero massimo di buffer di I/O del log che possono essere allocati alla volta per la lettura dei record di log, impostare il parametro cMaxReadBuffers della funzione ClfsCreateMarshallingArea . Se non è necessario controllare il numero di buffer di lettura allocati, impostare cMaxReadBuffers su INFINITE.

Se si vuole eseguire l'allocazione di memoria personalizzata per i buffer di I/O del log, impostare i parametri pfnAllocBuffer e pfnFreeBuffer della funzione ClfsCreateMarshallingArea per puntare alle funzioni di allocazione e deallocazione personalizzate. CLFS chiamerà quindi le funzioni per eseguire l'allocazione effettiva della memoria e la deallocazione ogni volta che deve creare o liberare buffer di I/O del log.

In alcuni casi, è possibile riservare spazio in un'area di marshalling in anticipo. Ad esempio, è possibile sapere che si sta per scrivere un set di dieci record di log e si vuole assicurarsi di avere spazio sufficiente nell'area di marshalling per l'intero set. Per riservare spazio per i dieci record, creare una matrice di dieci elementi che contiene le dimensioni dei record e quindi passare la matrice alla funzione ClfsReserveAndAppendLog nel parametro rgcbReservation . ClfsReserveAndAppendLog è una funzione multiuso che riserva lo spazio in un'area di marshalling o aggiunge i record di log a un flusso o esegue entrambe le operazioni in modo atomico. Impostando i parametri in modo appropriato, è possibile chiamare ClfsReserveAndAppendLog per riservare spazio per l'uso futuro senza aggiungere effettivamente alcun record al flusso.