Hyper-V 스토리지: 데이터 일관성에 대한 계층 및 영향 캐싱

이 문서에서는 가상 스토리지 스택의 캐싱에 대한 개요를 제공하고 소프트웨어 개발자 및 관리자에게 원하는 데이터 일관성 요구 사항이 충족되는지 확인하는 지침을 제공합니다.

적용 대상: Windows Server 2012 R2
원래 KB 번호: 2801713

추가 정보

최소한 시스템의 다양한 캐싱 계층에는 일반적으로 다음이 포함됩니다.

  • 파일 시스템 캐시. 기본적으로 Windows는 디스크에서 읽고 디스크에 기록되는 파일 데이터를 캐시합니다. 이는 읽기 작업이 실제 디스크가 아닌 시스템 파일 캐시라고 하는 시스템 메모리 영역의 파일 데이터를 읽는 것을 의미합니다. 이에 따라 쓰기 작업은 디스크 대신 시스템 파일 캐시에 파일 데이터를 쓰고, 이러한 종류의 캐시를 쓰기 저장 캐시라고 합니다. 애플리케이션은 파일 시스템 버퍼되지 않은 의미 체계를 사용하여 쓰기가 시스템 캐시에 캐시되지 않도록 할 수 있습니다.
  • 디스크 드라이브 캐시. 디스크 드라이브는 디스크 드라이브의 성능을 향상시키기 위해 펌웨어 계층에서 캐싱을 구현합니다. 펌웨어 계층에서 캐싱하면 성능이 향상될 수 있지만 정전 시 디스크에 기록되기 전에 디스크의 데이터가 손실될 수 있습니다. 이 캐싱 동작을 제어하는 옵션은 SCSI, SATA 및 ATA와 같은 표준화된 드라이브 인터페이스의 일부입니다. 이러한 옵션은 다음과 같습니다.
    1. FUA(Force Unit Access)라고 하는 I/O별 제어 메커니즘을 사용합니다. 이 플래그는 신호가 완료되기 전에 드라이브가 안정적인 미디어 스토리지에 데이터를 기록하도록 지정합니다. 이 작업을 수행해야 하는 애플리케이션은 디스크 문제 FUA에서 데이터가 안정적인지 확인하여 정전이 발생할 경우 데이터가 손실되지 않도록 합니다.

      서버 클래스 디스크 드라이브(SCSI 및 파이버 채널)는 일반적으로 FUA 플래그를 지원합니다. 상용 드라이브(ATA, SATA 및 USB)에서는 FUA가 적용되지 않을 수 있습니다. 이렇게 하면 드라이브의 쓰기 캐시를 사용하지 않도록 설정하지 않으면 데이터가 일관되지 않은 상태로 남을 수 있습니다. 이 메커니즘에 의존하는 경우 디스크 하위 시스템이 FUA를 올바르게 처리하는지 확인합니다.

    2. 디스크 캐시 플러시를 강제 적용합니다. 디스크로 플러시를 보내는 애플리케이션 또는 시스템은 디스크 하위 시스템이 캐시의 모든 데이터를 디스크에 쓰도록 강제합니다. 플러시 반환 전에 디스크 캐시의 모든 정보를 디스크 미디어에 기록해야 하므로 플러시를 너무 자주 실행하면 성능이 저하됩니다.

    3. 디스크 캐싱을 사용하지 않도록 설정합니다. 디스크에 IOCTL_DISK_SET_CACHE_INFORMATION 제어 코드를 실행하여 디스크의 쓰기 캐싱을 사용하지 않도록 설정할 수 있습니다. 시스템 다시 시작 시 쓰기 캐시의 상태(켜기 또는 끄기)가 유지됩니다. 이 제어 코드를 실행하면 해당 디스크에 발급된 모든 I/O 메커니즘에 매우 중요한 성능 결과가 발생합니다. 이러한 결과에는 성능이 눈에 띄게 감소할 가능성이 큽니다. 배포하기 전에 이 컨트롤 코드를 신중하게 사용하는 것이 좋습니다.

      참고

      디스크 캐싱을 사용하지 않도록 설정할 수 없는 경우 옵션 1과 2를 고려해야 합니다.

따라서 애플리케이션 또는 워크로드가 VM(가상 머신) 내에서 실행되는 경우 다양한 캐싱 계층은 데이터 일관성에 영향을 줍니다.

  • 게스트 파일 시스템 캐시. 이 계층은 앞에서 설명한 대로 파일 시스템 버퍼되지 않은 의미 체계를 사용하여 바이패스할 수 있습니다.

  • 게스트 가상 디스크 캐시. 가상화된 IDE(에뮬레이트 또는 가상) 또는 SCSI 디바이스는 하위 스택에서 반환되는 쓰기 캐시 상태를 보고합니다. 가상 디스크는 쓰기 캐시가 사용하도록 설정되어 있음을 보고하고 게스트가 쓰기 캐시를 해제하도록 허용하지 않습니다. 캐시를 사용하지 않도록 설정하면 실패하고 항상 캐시가 사용하도록 설정되어 있다고 응답합니다. 이 동작은 다음과 같은 이유로 필요합니다.

    • Hyper-V는 동일한 디스크에서 실행되는 모든 VM이 디스크 캐시 설정이 동일해야 한다고 가정할 수 없습니다.

    • 기본 스토리지에는 해제할 수 없는 상시 쓰기 캐시가 있을 수 있습니다. 이는 가상 디스크가 동일한 호스트(라이브 스토리지 마이그레이션) 또는 다른 호스트(실시간 마이그레이션)의 다른 디스크로 마이그레이션될 수 있다는 사실에 의해 강조됩니다.

      애플리케이션은 디스크 캐시를 끌 수 없으므로 전원 오류에서 데이터 무결성을 확인해야 하는 게스트의 모든 애플리케이션은 쓰기가 디스크 캐시를 우회하도록 옵션 1 또는 옵션 2를 사용해야 합니다.

  • 호스트 파일 시스템 캐시. 또한 Hyper-V 스토리지 스택은 버퍼링되지 않은 쓰기를 사용하여 게스트의 쓰기가 기본 호스트 파일 시스템 스택을 우회하는지 확인합니다.

  • 호스트 디스크 캐시. 게스트가 설정한 경우 FUA는 호스트 및 호스트 스토리지 스택으로 전파됩니다. 호스트 실제 디스크 시스템은 전원 오류를 통해 가상화된 워크로드 데이터 무결성을 확인하려면 다음 조건 중 하나 이상을 충족해야 합니다.

    • 시스템은 서버 클래스 디스크(SCSI, 파이버 채널)를 사용합니다.
    • 시스템은 디스크가 배터리 지원 캐싱 HBA(호스트 버스 어댑터)에 연결되어 있는지 확인합니다.
    • 시스템은 스토리지 컨트롤러(예: RAID 시스템)를 스토리지 디바이스로 사용합니다.
    • 시스템은 디스크에 대한 전원이 UPS(무정전 전원 공급 장치)로 보호되도록 합니다.
    • 시스템에서 디스크의 쓰기 캐싱 기능을 사용하지 않도록 설정합니다.