Области маршалинга CLFS

Клиент Common Log File System (CLFS) добавляет записи журнала в область маршаллинга в переменной памяти, а CLFS периодически записывает эти записи в стабильное хранилище. Область маршаллинга — это набор буферов ввода-вывода журнала, каждый из которых может содержать несколько записей журнала. Буферы ввода-вывода журнала хранят записи, недавно записанные в поток (но, возможно, не сбрасываются в стабильное хранилище) и записи, которые недавно считываются из потока.

Вы создаете область маршаллинга, вызывая ClfsCreateMarshallingArea, при этом необходимо указать размер буферов ввода-вывода журнала, которые использует область маршаллинга, и находятся ли эти буферы в страничном или нестраничном пуле. Все буферы операций ввода-вывода журнала в области маршаллинга одинаковы, и CLFS гарантирует, что размер является кратным размером сектора в базовой стабильной среде хранения. То есть CLFS принимает запрошенный размер и округляет его по мере необходимости, чтобы обеспечить совместимость буферов ввода-вывода с стабильным носителем.

CLFS выделяет и освобождает журналы ввода-вывода по мере необходимости, но у вас есть возможность задать максимальное количество буферов ввода-вывода, которые могут быть выделены одновременно. Вы также можете предоставить собственные функции выделения и освобождения буфера.

Чтобы указать максимальное количество буферов ввода-вывода журнала, которые можно выделить одновременно для записи записей журнала, задайте параметр cMaxWriteBuffers функции ClfsCreateMarshallingArea . Ограничение количества буферов влияет на частоту сброса в стабильное хранилище; при меньшем количестве буферов записи журналов должны записываться в стабильное хранилище чаще. Если вам не нужно контролировать частоту сброса, задайте для cMaxWriteBuffers значение INFINITE (определено в Winbase.h).

Чтобы указать максимальное количество буферов ввода-вывода журнала, которые можно выделить одновременно для чтения записей журнала, задайте параметр cMaxReadBuffers функции ClfsCreateMarshallingArea . Если вам не нужно контролировать количество выделенных буферов чтения, задайте для cMaxReadBuffers значение INFINITE.

Если вы хотите выделить собственную память для буферов журналирования, задайте параметры pfnAllocBuffer и pfnFreeBuffer функции ClfsCreateMarshallingArea, чтобы указать на собственные функции выделения и освобождения памяти. Затем CLFS вызывает функции для выполнения фактического выделения и освобождения памяти, когда требуется создать или освободить буферы ввода-вывода журнала.

В некоторых случаях может потребоваться заранее зарезервировать место на площадке маршаллинга. Например, вы можете знать, что вы собираетесь записать набор из 10 журналов, и нужно убедиться, что в буферной области достаточно места для всего набора. Чтобы зарезервировать пространство для 10 записей, создайте массив 10 элементов, содержащий размеры записей, а затем передайте массив в функцию ClfsReserveAndAppendLog в параметре rgcbReservation . ClfsReserveAndAppendLog — это многофункциональная функция, которая резервирует пространство в области маршаллинга, добавляет записи журнала в поток или выполняет оба эти действия одновременно. Задав параметры соответствующим образом, можно вызвать ClfsReserveAndAppendLog , чтобы зарезервировать пространство для дальнейшего использования без фактического добавления записей в поток.

См. также

ClfsCreateMarshallingArea

ClfsReserveAndAppendLog

зона сбора