다음을 통해 공유


CLFS 마샬링 영역

CLFS(Common Log File System) 클라이언트는 휘발성 메모리의 마샬링 영역에 로그 레코드를 추가하고, CLFS는 주기적으로 해당 레코드를 안정적인 스토리지에 씁니다. 마샬링 영역은 각각 여러 로그 레코드를 보유할 수 있는 로그 I/O 버퍼의 컬렉션입니다. 로그 I/O 버퍼에는 최근에 스트림에 기록되었지만 안정적인 스토리지로 플러시되지 않은 레코드와 최근에 스트림에서 읽은 레코드가 저장됩니다.

ClfsCreateMarshallingArea를 호출하여 마샬링 영역을 만듭니다. 이때 마샬링 영역에서 사용할 로그 I/O 버퍼의 크기와 해당 버퍼가 페이징 풀에 있는지 아니면 페이징되지 않은 풀에 있는지를 지정해야 합니다. 마샬링 영역의 모든 로그 I/O 버퍼는 크기가 동일하며 CLFS는 크기가 기본 안정적인 스토리지 매체의 섹터 크기의 배수인지 확인합니다. 즉, CLFS는 요청된 크기를 가져와 I/O 버퍼를 안정적인 스토리지 매체와 호환되도록 필요에 따라 반올림합니다.

CLFS는 필요에 따라 로그 I/O 버퍼를 할당하고 해제하지만 한 번에 할당할 수 있는 최대 I/O 버퍼 수를 설정할 수 있습니다. 또한 사용자 고유의 버퍼 할당 및 할당 취소 함수를 제공할 수도 있습니다.

로그 레코드를 작성하기 위해 한 번에 할당할 수 있는 최대 로그 I/O 버퍼 수를 지정하려면 ClfsCreateMarshallingArea 함수의 cMaxWriteBuffers 매개 변수를 설정합니다. 버퍼 수를 제한하면 안정적인 스토리지에 대한 플러시 빈도에 영향을 줍니다. 버퍼 수가 적으므로 로그 레코드를 안정적인 스토리지에 더 자주 기록해야 합니다. 플러시 빈도를 제어할 필요가 없는 경우 cMaxWriteBuffers 를 INFINITE(Winbase.h에 정의됨)로 설정합니다.

로그 레코드를 읽기 위해 한 번에 할당할 수 있는 최대 로그 I/O 버퍼 수를 지정하려면 ClfsCreateMarshallingArea 함수의 cMaxReadBuffers 매개 변수를 설정합니다. 할당된 읽기 버퍼 수를 제어할 필요가 없는 경우 cMaxReadBuffers 를 INFINITE로 설정합니다.

로그 I/O 버퍼에 대해 고유한 메모리 할당을 수행하려면 ClfsCreateMarshallingArea 함수의 pfnAllocBufferpfnFreeBuffer 매개 변수를 설정하여 고유한 할당 및 할당 취소 함수를 가리킵니다. 그런 다음, CLFS는 로그 I/O 버퍼를 만들거나 해제해야 할 때마다 함수를 호출하여 실제 메모리 할당 및 할당 취소를 수행합니다.

경우에 따라 미리 마샬링 영역에 공간을 예약할 수 있습니다. 예를 들어 10개의 로그 레코드 집합을 작성하려고 한다는 것을 알고 전체 집합에 대한 마샬링 영역에 충분한 공간이 있는지 확인하려고 할 수 있습니다. 10개의 레코드에 대한 공간을 예약하려면 레코드 크기를 포함하는 10개 요소 배열을 만든 다음, rgcbReservation 매개 변수의 ClfsReserveAndAppendLog 함수에 배열을 전달합니다. ClfsReserveAndAppendLog 는 마샬링 영역에 공간을 예약하거나 스트림에 로그 레코드를 추가하거나 이러한 두 작업을 원자 단위로 수행하는 다목적 함수입니다. 매개 변수를 적절하게 설정하면 ClfsReserveAndAppendLog 를 호출하여 스트림에 레코드를 실제로 추가하지 않고 나중에 사용할 공간을 예약할 수 있습니다.