Compartilhar via


Áreas de organização do CLFS

Um cliente CLFS (Common Log File System) acrescenta registros de log a uma área de marshalização na memória volátil, e o CLFS grava periodicamente esses registros no armazenamento estável. Uma área de marshalling é uma coleção de buffers de E/S de log, e cada um deles pode conter vários registros de log. Os buffers de E/S de log contêm registros gravados recentemente em um fluxo (mas possivelmente não liberados para armazenamento estável) e registros lidos recentemente do fluxo.

Crie uma área de marshalling chamando ClfsCreateMarshallingArea. Nesse momento, você deve especificar o tamanho dos buffers de E/S de log que essa área de marshalling usa e se esses buffers estão no pool paginado ou não paginado. Todos os buffers de E/S de log em uma área de marshalling têm o mesmo tamanho e o CLFS garante que o tamanho seja um múltiplo do tamanho do setor na mídia de armazenamento estável subjacente. Ou seja, o CLFS usa o tamanho solicitado e o arredonda conforme necessário para tornar seus buffers de E/S compatíveis com o meio de armazenamento estável.

O CLFS aloca e libera buffers de E/S de log conforme necessário, mas você tem a opção de definir o número máximo de buffers de E/S que podem ser alocados de uma só vez. Você também tem a opção de fornecer suas próprias funções de alocação e desalocação de buffer.

Para especificar o número máximo de buffers de E/S de log que podem ser alocados simultaneamente para gravar registros de log, defina o parâmetro cMaxWriteBuffers da função ClfsCreateMarshallingArea. Limitar o número de buffers afeta a frequência de liberações para o armazenamento estável; com menos buffers, os registros de log devem ser gravados no armazenamento estável com mais frequência. Se você não precisar controlar a frequência de liberação, defina cMaxWriteBuffers como INFINITE (definido em Winbase.h).

Para especificar o número máximo de buffers de E/S de log que podem ser alocados simultaneamente para a leitura de registros de log, defina o parâmetro cMaxReadBuffers da função ClfsCreateMarshallingArea. Se você não precisar controlar o número de buffers de leitura alocados, defina cMaxReadBuffers como INFINITE.

Se você quiser fazer sua própria alocação de memória para buffers de E/S de log, defina os parâmetros pfnAllocBuffer e pfnFreeBuffer da função ClfsCreateMarshallingArea para apontar para suas próprias funções de alocação e desalocação. Em seguida, o CLFS chama suas funções para executar a alocação e desalocação de memória reais sempre que precisar criar ou liberar buffers de E/S de log.

Em alguns casos, talvez você queira reservar espaço em uma área de agrupamento antecipadamente. Por exemplo, você pode saber que está prestes a gravar um conjunto de 10 registros de log e deseja ter certeza de que há espaço suficiente na área de marshalling para todo o conjunto. Para reservar espaço para os 10 registros, crie uma matriz de 10 elementos que contenha os tamanhos dos registros e passe a matriz para a função ClfsReserveAndAppendLog no parâmetro rgcbReservation . ClfsReserveAndAppendLog é uma função de múltiplas finalidades que reserva espaço em uma área de marshaling, acrescenta registros de log a um fluxo ou executa ambas as ações de forma atômica. Definindo os parâmetros adequadamente, você pode chamar ClfsReserveAndAppendLog para reservar espaço para uso futuro sem anexar nenhum registro ao fluxo.

Consulte também

ClfsCreateMarshallingArea

ClfsReserveAndAppendLog

área de triagem