Magazyn funkcji Hyper-V: buforowanie warstw i wpływ na spójność danych

Ten artykuł zawiera omówienie buforowania w wirtualnym stosie magazynu oraz wskazówki dla deweloperów oprogramowania i administratorów, aby upewnić się, że spełnione są wymagane wymagania dotyczące spójności danych.

Dotyczy: Windows Server 2012 R2
Oryginalny numer KB: 2801713

Więcej informacji

Co najmniej różne warstwy buforowania w systemie zwykle obejmują następujące elementy:

  • Pamięć podręczna systemu plików. Domyślnie system Windows buforuje dane plików odczytane z dysków i zapisywane na dyskach. Oznacza to, że operacje odczytu odczytują dane pliku z obszaru w pamięci systemowej, który jest znany jako systemowa pamięć podręczna plików, a nie z dysku fizycznego. Odpowiednio operacje zapisu zapisują dane plików w systemowej pamięci podręcznej plików zamiast na dysku, a ten rodzaj pamięci podręcznej jest znany jako pamięć podręczna zapisu zwrotnego. Aplikacje mogą używać niezabuforowanej semantyki systemu plików, aby upewnić się, że zapisy nie są buforowane w systemowej pamięci podręcznej.
  • Pamięć podręczna dysków. Dyski implementują buforowanie w warstwie oprogramowania układowego, aby zwiększyć wydajność dysków. Mimo że buforowanie w warstwie oprogramowania układowego może zwiększyć wydajność, dane na dysku mogą zostać utracone, zanim zostaną zapisane na dysku w przypadku awarii zasilania. Opcje kontrolowania tego zachowania buforowania są częścią ustandaryzowanych interfejsów dysków, takich jak SCSI, SATA i ATA. Opcje te są następujące:
    1. Użyj mechanizmu kontroli we/wy znanego jako Force Unit Access (FUA). Ta flaga określa, że dysk powinien zapisywać dane w stabilnym magazynie multimediów przed zakończeniem sygnalizacji. Aplikacje, które muszą to zrobić, upewnij się, że dane są stabilne na dysku problem FUA, aby upewnić się, że dane nie zostaną utracone w przypadku awarii zasilania.

      Dyski klasy serwera (SCSI i Fibre Channel) zwykle obsługują flagę FUA. Na dyskach towarowych (ATA, SATA i USB) fua może nie być honorowane. Może to spowodować pozostawienie danych w niespójnym stanie, chyba że pamięć podręczna zapisu dysku jest wyłączona. Upewnij się, że podsystem dysku prawidłowo obsługuje interfejs FUA, jeśli jest to zależne od tego mechanizmu.

    2. Wymuś opróżnianie pamięci podręcznej dysku. Aplikacja lub system, który wysyła spłukiwane do dysku będzie wymuszać podsystemu dysku do zapisu wszystkich danych w pamięci podręcznej na dysku. Zbyt częste wystawianie opróżnień będzie miało wpływ na wydajność, ponieważ wszystkie informacje w pamięci podręcznej dysku będą musiały zostać zapisane na nośniku dysku przed zwróceniem opróżnienia.

    3. Wyłącz buforowanie dysku. Buforowanie zapisu dysku można wyłączyć, wystawiając kod sterowania IOCTL_DISK_SET_CACHE_INFORMATION na dysku. Stan pamięci podręcznej zapisu (włączony lub wyłączony) zostanie zachowany podczas ponownego uruchamiania systemu. Wydanie tego kodu sterującego będzie miało bardzo znaczące konsekwencje dla wszystkich mechanizmów we/wy, które są wystawiane na tym dysku. Te konsekwencje najprawdopodobniej będą obejmować zauważalny spadek wydajności. Należy dokładnie rozważyć użycie tego kodu kontrolki przed jego wdrożeniem.

      Uwaga

      Jeśli nie możesz wyłączyć buforowania dysku, rozważ opcje 1 i 2.

W związku z tym, jeśli aplikacja lub obciążenie działa wewnątrz maszyny wirtualnej, różne warstwy buforowania mają wpływ na spójność danych.

  • Pamięć podręczna systemu plików gościa. Tę warstwę można pominąć przy użyciu niezabuforowanych semantyk systemu plików, jak wspomniano wcześniej.

  • Pamięć podręczna dysku wirtualnego gościa. Zwirtualizowane środowisko IDE (emulowane lub syntetyczne) lub urządzenie SCSI zgłosi stan pamięci podręcznej zapisu zwracany przez niższy stos. Dyski wirtualne zgłosi, że ich pamięć podręczna zapisu jest włączona i nie zezwalają gościowi na wyłączenie pamięci podręcznej zapisu. Wyłączenie pamięci podręcznej zakończy się niepowodzeniem i zawsze będzie odpowiadać, że pamięć podręczna jest włączona. To zachowanie jest konieczne z następujących powodów:

    • Funkcja Hyper-V nie może przyjąć założenia, że wszystkie maszyny wirtualne działające na tym samym dysku będą musiały mieć takie same ustawienia pamięci podręcznej dysku.

    • Magazyn bazowy może mieć zawsze włączoną pamięć podręczną zapisu, której nie można wyłączyć. Podkreśla to fakt, że dysk wirtualny może zostać zmigrowany na inny dysk na tym samym hoście (migracja magazynu na żywo) lub do innego hosta (migracja na żywo).

      Ponieważ aplikacje nie będą mogły wyłączyć pamięci podręcznej dysku, każda aplikacja gościa, która musi zapewnić integralność danych w przypadku awarii zasilania, będzie musiała użyć opcji 1 lub opcji 2, aby upewnić się, że zapisy pomijają pamięć podręczną dysku.

  • Hostowanie pamięci podręcznej systemu plików. Stos magazynu funkcji Hyper-V używa również niebuforowych zapisów, aby upewnić się, że zapisy z gościa pomijają bazowy stos systemu plików hosta.

  • Pamięć podręczna dysku hosta. Funkcja FUA, jeśli jest ustawiona przez gościa, jest propagowana do hosta i do stosu magazynu hosta. System dysków fizycznych hosta musi spełniać co najmniej jedno z następujących kryteriów, aby zapewnić integralność zwirtualizowanych danych obciążenia poprzez błędy zasilania:

    • System używa dysków klasy serwera (SCSI, Fibre Channel).
    • System zapewnia, że dyski są podłączone do karty magistrali hosta buforowania (HBA) zasilanej z baterii.
    • System używa kontrolera magazynu (na przykład systemu RAID) jako urządzenia magazynu.
    • System zapewnia, że zasilanie dysku jest chronione przez zasilacz ups (UNS).
    • System upewnia się, że funkcja buforowania zapisu na dysku jest wyłączona.