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%.
kvm_trace
aby zobaczyć, jakIO_Exits
zmienia 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.Odpowiedzi:
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
"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."bla"
nie jest czynnikiem ograniczającym, ponieważ"monitoring"
wydajność we / wy poprawiła się bez zmian w"bla"
Dodatkowy czynnik
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,
rsync
ponieważ 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 skrócie, więcej procesora = więcej czasu procesora = więcej przedziału czasowego we / wy w danym okresie czasu.
źródło