Partilhar via


Áreas de movimentação do CLFS

Um cliente CLFS (Common Log File System) acrescenta registos de log a uma área de marshalização em memória volátil, e o CLFS grava periodicamente esses registos em um armazenamento estável. Uma área de empacotamento é uma coleção de buffers de E/S de log, cada um dos quais pode conter vários registros de log. Os buffers de E/S de logs armazenam registos recentemente gravados num fluxo (mas possivelmente ainda não transferidos para armazenamento estável) e registos recentemente lidos do fluxo.

Você cria uma área de agrupamento chamando ClfsCreateMarshallingArea, momento em que deve-se especificar o tamanho dos buffers de E/S de log que a área de agrupamento usa e se esses buffers estão no pool de memória paginada ou não paginada. Todos os buffers de E/S de log em uma área de empacotamento têm o mesmo tamanho, e o CLFS garante que o tamanho seja um múltiplo do tamanho do setor no meio de armazenamento estável subjacente. Ou seja, o CLFS pega o tamanho solicitado e arredonda-o 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 registos de log, defina o parâmetro cMaxWriteBuffers da função ClfsCreateMarshallingArea. A limitação do número de buffers afeta a frequência de descargas para 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 de uma só vez para ler 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 pretender realizar a 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 de modo a que apontem para as 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 real sempre que precisar criar ou liberar buffers de E/S de log.

Em alguns casos, você pode querer reservar espaço em uma área de triagem com antecedência. Por exemplo, você pode saber que está prestes a escrever um conjunto de 10 registros de log e quer ter certeza de que há espaço suficiente na área de empacotamento 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, em seguida, passe a matriz para a função ClfsReserveAndAppendLog no parâmetro rgcbReservation . ClfsReserveAndAppendLog é uma função multiuso que reserva espaço numa área de coleta ou acrescenta registos de log a um fluxo, ou faz ambas as coisas de forma atómica. Definindo os parâmetros adequadamente, você pode chamar ClfsReserveAndAppendLog para reservar espaço para uso futuro sem realmente anexar nenhum registro ao fluxo.

Consulte também

ClfsCreateMarshallingArea

ClfsReserveAndAppendLog

área de concentração