Mam poważne problemy z wydajnością dysku podczas konfigurowania gościa KVM. Za pomocą prostego dd
testu partycja na hoście, na której znajdują się obrazy qcow2 (lustrzana macierz RAID), zapisuje z prędkością ponad 120 MB / s , podczas gdy mój gość zapisuje w zakresie od 0,5 do 3 MB / s .
- Gość jest skonfigurowany z kilkoma procesorami i 4G pamięci RAM i obecnie nie działa na niczym innym; w tej chwili jest to całkowicie minimalna instalacja.
- Wydajność jest testowana przy użyciu
time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000
. - Gość jest skonfigurowany do korzystania z virtio, ale nie ma to wpływu na wydajność.
- Partycje hosta są wyrównane do 4 KB (a wydajność na hostu jest dobra).
- Używanie buforowania z zapisem na dyskach znacznie zwiększa raportowaną wydajność, ale wolałbym jej nie używać; nawet bez tego wydajność powinna być znacznie lepsza.
- Zarówno host, jak i gość korzystają z systemu Ubuntu 12.04 LTS, który jest wyposażony w qemu-kvm 1.0 + noroms-0ubuntu13 i libvirt 0.9.8-2ubuntu17.1.
- Host ma włączony harmonogram IO, a gość nie ma noop.
Wydaje się, że istnieje wiele przewodników na temat poprawiania wydajności KVM i w końcu się tam dostanę, ale wydaje się, że powinienem uzyskać znacznie lepszą wydajność w tym momencie, więc wydaje się, że coś jest już bardzo źle.
Aktualizacja 1
I nagle, kiedy wracam i testuję teraz, jest to 26,6 MB / s; to bardziej przypomina to, czego się spodziewałem w / qcrow2. Zostawię to pytanie na wypadek, gdyby ktoś miał jakieś pomysły na temat problemu (i na wypadek, gdyby w tajemniczy sposób powrócił).
Aktualizacja 2
Przestałem się martwić wydajnością qcow2 i po prostu przełączyłem się na LVM na RAID1 z surowymi obrazami, wciąż używając virtio, ale ustawiając cache = „none” i io = „native” na dysku. Wydajność zapisu wynosi teraz appx. 135 MB / s przy użyciu tego samego testu podstawowego, co powyżej, więc wydaje się, że nie ma sensu ustalanie, na czym polega problem, gdy można go tak łatwo obejść całkowicie.
źródło
Odpowiedzi:
Tak, tak, pliki qcow2 nie są zaprojektowane z myślą o niesamowicie szybkiej wydajności. Znacznie więcej szczęścia uzyskasz dzięki surowym partycjom (lub najlepiej LV).
źródło
Jak osiągnąć najwyższą wydajność dzięki QCOW2 :
Najważniejszym z nich jest prealokacja, która według deweloperów qcow2 daje niezły zastrzyk. Teraz jest prawie na równi z LVM ! Zauważ, że jest to zwykle włączone w nowoczesnych dystrybucjach Linuksa (Fedora 25+).
Możesz także zapewnić niebezpieczną pamięć podręczną, jeśli nie jest to instancja produkcyjna (jest to niebezpieczne i niezalecane, nadaje się tylko do testowania):
Niektórzy użytkownicy zgłaszają, że ta konfiguracja w niektórych testach przewyższa konfigurację LVM / niebezpieczną.
Dla wszystkich tych parametrów wymagana jest najnowsza wersja QEMU 1.5+ ! Ponownie większość współczesnych dystrybucji ma je.
źródło
Dzięki temu ustawieniu uzyskałem świetne wyniki dla obrazu qcow2:
która wyłącza pamięć podręczną gości i włącza AIO (asynchroniczne operacje we / wy). Uruchomienie
dd
polecenia dało mi 177 MB / s na hoście i 155 MB / s na gościu. Obraz jest umieszczony na tym samym woluminie LVM, w którym przeprowadzono test hosta.Moja
qemu-kvm
wersja to1.0+noroms-0ubuntu14.8
i jądro3.2.0-41-generic
z magazynu Ubuntu 12.04.2 LTS.źródło
type='qcow2'
, czy możesz to sprawdzić przed edycją? Nie mam już dostępu do takiej konfiguracji - przeprowadziłem migrację do LXC zmount bind
katalogami, aby osiągnąć rzeczywistą prędkość natywną u gości.Jeśli używasz vms za pomocą jednego polecenia, możesz użyć argumentów
Dostałem od 3 MB / s do 70 MB / s
źródło
W starszych wersjach Qemu / KVM backend Qcow2 był bardzo wolny, gdy nie był wstępnie przydzielony, a tym bardziej, jeśli był używany bez włączonej pamięci podręcznej zapisu. Zobacz tutaj, aby uzyskać więcej informacji.
W nowszych wersjach Qemu pliki Qcow2 są znacznie szybsze, nawet gdy nie są używane wstępna alokacja (lub wstępna alokacja tylko metadanych). Mimo to wolumeny LVM pozostają szybsze.
Uwaga na trybów cache: opóźnionego zapisu cache jest preferowany tryb, chyba że przy użyciu gościa bez lub niepełnosprawnej wsparcie dla pamięci podręcznej dysku gładkimi / barier. W praktyce goście Win2000 + i wszelkie opcje montowania barier w systemach Linux EXT4, XFS lub EXT3 + są karane grzywną. Z drugiej strony, pamięci podręcznej = niebezpieczne nie należy nigdy używać w maszynach produkcyjnych, ponieważ opróżnianie pamięci podręcznej nie jest propagowane do systemu hosta. Nieoczekiwane zamknięcie hosta może dosłownie zniszczyć system plików gościa.
źródło
Wystąpił dokładnie ten sam problem. W maszynie wirtualnej RHEL7 mam oprogramowanie docelowe LIO iSCSI, z którym łączą się inne maszyny. Jako podstawową pamięć (backstore) dla moich jednostek LUN iSCSI początkowo użyłem LVM, ale potem przełączyłem się na obrazy oparte na plikach.
Krótko mówiąc: po podłączeniu pamięci masowej do kontrolera pamięci masowej virtio_blk (vda, vdb itp.) - wydajność klienta iSCSI łączącego się z celem iSCSI była w moim środowisku ~ 20 IOPS, z przepustowością (w zależności od wielkości IO) ~ 2- 3 MiB / s. Zmieniłem wirtualny kontroler dysku w maszynie wirtualnej na SCSI i jestem w stanie uzyskać ponad 1000 IOPS i przepustowość 100+ MiB / s od moich klientów iSCSI.
źródło