KVM / Qemu, Ubuntu: Dlaczego więcej gości procesorów szybko ulepsza Disk-I / O?

9

Mamy klaster Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt składający się z dwóch węzłów. Na każdym węźle działa Ubuntu 12.04 64-bitowy z następującymi pakietami / wersjami:

  • Jądro 3.2.0-32-generic # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu 14.3
  • libvirt 0.9.13
  • stymulator 1.1.7
  • bicie serca 3.0.5

Wirtualni goście korzystają z systemu Ubuntu 10.04 64-bitowego i Ubuntu 12.04 64-bitowego. Używamy funkcji libvirt, aby przekazać możliwości procesorów hosta wirtualnym gościom w celu uzyskania najlepszej wydajności procesora.

Oto wspólna konfiguracja tego klastra:

  • „Monitorowanie” maszyny wirtualnej ma 4 jednostki vCPU
  • „Monitorowanie” maszyny wirtualnej wykorzystuje ide jako interfejs dyskowy (obecnie z oczywistych powodów przechodzimy na VirtIO)

Niedawno przeprowadziliśmy kilka prostych testów. Wiem, że nie są profesjonalistami i nie osiągają wysokich standardów, ale już wykazują silny trend:

Węzeł A uruchamia maszynę wirtualną „bla” Węzeł B uruchamia maszynę wirtualną „monitorowanie”

Kiedy synchronizujemy plik z maszyny wirtualnej „bla” do maszyny wirtualnej „monitorującej”, uzyskujemy tylko 12 MB / s. Kiedy wykonujemy proste dd if = / dev / null of = / tmp / blubb wewnątrz „monitorowania” maszyny wirtualnej, osiągamy około 30 MB / s.

Następnie dodaliśmy 4 kolejne vCPU do „monitorowania” maszyny wirtualnej i zrestartowaliśmy ją. „Monitorowanie” maszyny wirtualnej ma teraz 8 vCPU. Ponownie uruchomiliśmy testy z następującymi wynikami: Kiedy synchronizujemy plik z maszyny wirtualnej „bla” do maszyny wirtualnej „monitorującej”, osiągamy teraz 36 MB / s. Kiedy wykonujemy proste dd if = / dev / null of = / tmp / blubb wewnątrz „monitorowania” maszyny wirtualnej, osiągamy teraz około 61 MB / s.

Dla mnie ten efekt jest dość zaskakujący. Jak to się dzieje, że dodanie wirtualnego procesora dla tego wirtualnego gościa automatycznie oznacza większą wydajność dysku w maszynie wirtualnej?

Nie mam na to wytłumaczenia i naprawdę doceniłbym twój wkład. Chcę zrozumieć, co powoduje ten wzrost wydajności, ponieważ mogę odtworzyć to zachowanie w 100%.

Valentin
źródło
2
Użyj specjalnie opracowanego narzędzia do analizy porównawczej, takiego jak iozone lub bonnie ++, aby wyeliminować inne zmienne.
ewwhite
Byłoby interesujące, jak wyglądają rzeczywiste obciążenia procesora ... jest to coś związanego z procesorem wprowadzonym w ukrytym miejscu (rsync plus prawdopodobnie ssh z pewnością jest do pewnego stopnia, podobnie jak sterowniki sieciowe wprowadzone w ten sposób, a także dd może robić nieoczekiwane rzeczy związane z procesorem ...), czy też jest tak, że rzeczy nie optymalnie czekają na siebie z powodu mniejszej liczby dostępnych wątków wykonawczych?
rackandboneman
3
uruchom, kvm_traceaby zobaczyć, jak IO_Exitszmienia się liczba po zmianie numerów procesora. Sądzę, że to dlatego, że używasz IDE, które jest planowane z procesorami-gośćmi. W przypadku virtio wydajność powinna być stała, a gdy płaszczyzna danych jest w qemu, nastąpi drastyczny wzrost. Kolejnym przypuszczeniem może być fakt, że korzystasz z dystrybucji znanej z błędnego stosu wirtualizacji.
dyasny
@ ewwhite: Tak, dobrym wyborem byłoby przeprowadzenie profesjonalnych testów. Jednak najpierw chcę zrozumieć, dlaczego występuje to zachowanie we / wy. @ rachandboneman: Kiedy spojrzałem ostatni, 4 procesory miały bardzo wysoką wartość oczekiwania (około 70-80%). @dyasny: Dzięki, spróbuję tego. Jak mogę sprawdzić, czy płaszczyzna danych jest aktywowana / aktualnie używana?
Valentin,
płaszczyzna danych jest na razie w fazie eksperymentalnej i jestem prawie pewien, że pierwszą dystrybucją, która ją odbierze, będzie Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Odpowiedzi:

9

Dam bardzo ogólny pomysł / wyjaśnienie.

W sytuacji OP, oprócz pomiaru w maszynie wirtualnej, należy również spojrzeć na hosta.

W takim przypadku możemy założyć, że poniższe informacje są poprawne

  1. We wszystkich testach przepustowość hosta we / wy (dysku) nie jest maksymalna. W miarę "monitoring"wzrostu liczby operacji we / wy VM ( ) wraz z przydzieleniem większej liczby procesorów. Jeśli host I / O był już maksymalny, przyrost wydajności I / O nie powinien być większy.
  2. "bla"nie jest czynnikiem ograniczającym, ponieważ "monitoring"wydajność we / wy poprawiła się bez zmian w"bla"
  3. Procesor jest główną fabryką dla zwiększenia wydajności (w przypadku OP), ponieważ I / O nie jest szyjką butelki, a OP nie wspomina o żadnych zmianach wielkości pamięci. Ale dlaczego? Albo jak?

Dodatkowy czynnik

  1. Zapis zajmuje więcej czasu niż odczyt To samo dotyczy VM i hosta. Ujmując to w bardzo prosty sposób: VM czeka na hosta do zakończenia odczytu i zapisu.

Co się stanie, gdy przypisane zostanie więcej procesorów "monitoring"?

Kiedy "monitoring"jest alokowana więcej procesorów, to przyrost więcej mocy przetwarzania, ale również zysk przetwarzania więcej czasu dla I / O.

Nie ma to nic wspólnego, rsyncponieważ jest to program jednowątkowy.

Jest to warstwa we / wy wykorzystująca zwiększoną moc procesora, a ściślej dłuższy czas przetwarzania.

Jeśli CPU monitorowanie programu (np. U góry) jest używany w "monitoring"czasie testu, pokaże nie jeden, ale użycie procesora idą w górę, a także% wa. % wa to czas oczekiwania spędzony na We / Wy.

Ten wzrost wydajności nastąpi tylko wtedy, gdy We / Wy hosta nie jest maksymalna. na zewnątrz.

Nie mogę znaleźć harmonogramu procesora w witrynie KVM, ale jest blog, w którym wspomniano, że KVM korzysta z CFS i cgroups, poniżej cytat

W KVM każde vcpu jest mapowane na proces Linux, który z kolei wykorzystuje pomoc sprzętową do stworzenia niezbędnego „dymu i kopii lustrzanych” do wirtualizacji. Jako taka, vcpu jest po prostu kolejnym procesem dla CFS, a także, co ważne, dla grup, które jako menedżer zasobów pozwalają Linuxowi zarządzać alokacją zasobów - zwykle proporcjonalnie w celu ustawienia alokacji ograniczeń. Grupy c mają również zastosowanie do pamięci, sieci i we / wy. Grupy procesów mogą stać się częścią grupy planowania w celu zastosowania wymagań alokacji zasobów do hierarchicznych grup procesów.

W skrócie, więcej procesora = więcej czasu procesora = więcej przedziału czasowego we / wy w danym okresie czasu.

John Siu
źródło
Dziękujemy za napisanie tej odpowiedzi. „Więcej procesorów vCPU oznacza dłuższy czas przetwarzania operacji we / wy” to wyjaśnienie, którego szukałem. Warto nagrodę!
Valentin,