KVM / Qemu, Ubuntu: Mengapa lebih banyak tamu CPU meningkatkan Disk-I / O dengan cepat?

9

Kami memiliki cluster Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt yang terdiri dari dua node. Setiap node menjalankan Ubuntu 12.04 64 Bit dengan paket / versi berikut:

  • Kernel 3.2.0-32-generik # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • alat pacu jantung 1.1.7
  • detak jantung 3.0.5

Para tamu virtual menjalankan Ubuntu 10.04 64 Bit dan Ubuntu 12.04 64 Bit. Kami menggunakan fitur libvirt untuk memberikan kemampuan CPU host kepada tamu virtual untuk mencapai kinerja CPU terbaik.

Sekarang di sini adalah pengaturan umum pada klaster ini:

  • VM "monitoring" memiliki 4 vCPU
  • VM "monitoring" menggunakan ide sebagai antarmuka disk (kami saat ini beralih ke VirtIO karena alasan yang jelas)

Kami baru-baru ini menjalankan beberapa tes sederhana. Saya tahu mereka tidak profesional dan tidak mencapai standar tinggi, tetapi mereka sudah menunjukkan tren yang kuat:

Node A menjalankan VM "bla" Node B menjalankan VM "monitoring"

Ketika kami rsync file dari VM "bla" ke VM "monitoring" kami hanya mencapai 12 MB / s. Ketika kami melakukan dd sederhana jika = / dev / null dari = / tmp / blubb di dalam "pemantauan" VM, kami mencapai sekitar 30 MB / s.

Kemudian kami menambahkan 4 vCPU lainnya ke VM "monitoring" dan restart itu. VM "monitoring" sekarang memiliki 8 vCPU. Kami menjalankan ulang pengujian dengan hasil berikut: Ketika kami rsync file dari VM "bla" ke VM "monitoring" sekarang kami mencapai 36 MB / s. Ketika kita melakukan dd sederhana jika = / dev / null dari = / tmp / blubb di dalam "pemantauan" VM sekarang kita mencapai sekitar 61 MB / s.

Bagi saya, efek ini cukup mengejutkan. Kenapa itu tampaknya menambahkan lebih banyak CPU virtual untuk tamu virtual ini secara otomatis berarti lebih banyak kinerja disk di dalam VM?

Saya tidak punya penjelasan untuk ini dan akan sangat menghargai masukan Anda. Saya ingin memahami apa yang menyebabkan peningkatan kinerja ini karena saya dapat mereproduksi perilaku ini 100%.

Valentin
sumber
2
Gunakan alat pembandingan yang dibuat khusus seperti iozone atau bonnie ++ untuk membantu menghilangkan variabel lain.
ewwhite
Akan menarik bagaimana tampilan CPU yang sebenarnya terlihat ... adalah sesuatu cpu terikat diperkenalkan di tempat tersembunyi (rsync plus mungkin ssh tentu sampai batas tertentu, begitu juga driver jaringan diperkenalkan seperti itu, juga dd mungkin melakukan hal-hal cpu terikat tak terduga ...), atau apakah ini hal-hal yang secara suboptimal menunggu satu sama lain karena kurang tersedia thread eksekusi?
rackandboneman
3
jalankan kvm_traceuntuk melihat bagaimana jumlah IO_Exitsperubahan ketika Anda mengubah nomor CPU. Saya kira itu karena Anda menggunakan IDE, yang dijadwalkan dengan CPU tamu. Dengan virtio kinerjanya harus konsisten, dan ketika data-plane dalam qemu, itu akan mendapatkan dorongan drastis. Dugaan lain bisa pada kenyataan bahwa Anda menggunakan distribusi yang dikenal untuk tumpukan virtualisasi kereta.
dyasny
ewewite: Ya, menjalankan tes profesional akan menjadi pilihan yang baik. Namun, saya ingin mengerti dulu mengapa perilaku I / O ini terjadi. @ rachandboneman: Ketika saya melihat terakhir, 4 CPU memiliki nilai tunggu yang sangat tinggi (sekitar 70-80%). @dyasny: Terima kasih, saya akan mencobanya. Bagaimana saya dapat memeriksa bahwa data-pesawat diaktifkan / saat ini digunakan?
Valentin
pesawat data masih eksperimental untuk saat ini, dan saya cukup yakin distribusi pertama yang mengambilnya adalah Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Jawaban:

9

Saya akan memberikan ide / penjelasan yang sangat kasar.

Dalam situasi OP, selain mengukur dalam VM, tuan rumah juga harus melihat.

Dalam hal ini, kita dapat mengasumsikan yang berikut ini benar

  1. Dalam semua tes, host I / O (disk) bandwidth tidak maksimal. Ketika VM ( "monitoring") I / O meningkat dengan lebih banyak CPU yang dialokasikan untuk itu. Jika host I / O sudah maksimal, tidak boleh ada peningkatan kinerja I / O.
  2. "bla"bukan faktor pembatas Karena "monitoring"kinerja I / O membaik tanpa perubahan ke"bla"
  3. CPU adalah pabrik utama untuk peningkatan kinerja (dalam kasus OP) Karena I / O bukan leher botol, dan OP tidak menyebutkan perubahan ukuran memori. Tapi kenapa? Atau bagaimana?

Faktor tambahan

  1. Menulis membutuhkan waktu lebih lama daripada Baca Ini sama untuk VM dan untuk host. Taruh dalam istilah yang sangat sederhana: VM menunggu host selesai membaca dan menulis.

Apa yang terjadi ketika lebih banyak CPU ditugaskan "monitoring"?

Ketika "monitoring"dialokasikan lebih banyak CPU, itu mendapatkan lebih banyak kekuatan pemrosesan, tetapi juga mendapatkan lebih banyak waktu pemrosesan untuk I / O.

Ini tidak ada hubungannya dengan rsynckarena ini adalah program utas tunggal.

Ini adalah lapisan I / O yang memanfaatkan daya CPU yang meningkat, atau lebih tepatnya, peningkatan waktu pemrosesan.

Jika program pemantauan cpu (mis. Atas) digunakan "monitoring"selama pengujian, itu akan menunjukkan tidak satu, tetapi semua penggunaan cpu naik, dan juga% wa. % wa adalah waktu tunggu yang dihabiskan untuk I / O.

Peningkatan kinerja ini hanya akan terjadi ketika host I / O Anda tidak maksimal. di luar.

Saya tidak dapat menemukan penjadwalan cpu di situs KVM, tetapi ada blog yang menyebutkan bahwa KVM menggunakan CFS dan cgroup, berikut ini adalah kutipannya.

Dalam KVM, setiap vcpu dipetakan ke proses Linux yang pada gilirannya menggunakan bantuan perangkat keras untuk menciptakan 'asap dan cermin' yang diperlukan untuk virtualisasi. Dengan demikian, vcpu hanyalah proses lain untuk CFS dan juga penting untuk cgroup yang, sebagai manajer sumber daya, memungkinkan Linux untuk mengelola alokasi sumber daya - biasanya secara proporsional untuk menetapkan alokasi kendala. cgroup juga berlaku untuk Memori, jaringan dan I / O. Grup proses dapat dibuat bagian dari grup penjadwalan untuk menerapkan persyaratan alokasi sumber daya ke grup proses hierarkis.

Singkatnya, lebih banyak CPU = lebih banyak waktu CPU = lebih banyak slot waktu I / O dalam periode waktu tertentu.

John Siu
sumber
Terima kasih telah menulis jawaban ini. "Lebih banyak vCPU berarti lebih banyak waktu pemrosesan untuk I / O" adalah penjelasan yang saya cari. Bernilai karunia!
Valentin