У нас есть кластер Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt, состоящий из двух узлов. На каждом узле работает Ubuntu 12.04 64 Bit со следующими пакетами / версиями:
- Ядро 3.2.0-32-generic # 51-Ubuntu SMP
- DRBD 8.3.11
- qemu-kvm 1.0 + noroms-0ubuntu14.3
- libvirt 0.9.13
- кардиостимулятор 1.1.7
- сердцебиение 3.0.5
Виртуальные гости работают под управлением Ubuntu 10.04 64 Bit и Ubuntu 12.04 64 Bit. Мы используем функцию libvirt для передачи возможностей хост-процессоров виртуальным гостям для достижения максимальной производительности процессоров.
Теперь вот общая настройка этого кластера:
- ВМ "мониторинг" имеет 4 виртуальных ЦП
- «Мониторинг» виртуальной машины использует ide в качестве интерфейса диска (в настоящее время мы переходим на VirtIO по понятным причинам)
Недавно мы провели несколько простых тестов. Я знаю, что они не профессионалы и не достигают высоких стандартов, но они уже показывают сильную тенденцию:
Узел A работает под управлением виртуальной машины "bla". Узел B работает под управлением виртуальной машины.
Когда мы rsync файл с ВМ "Bla" для "Мониторинг" ВМ, мы достигаем только 12 МБ / с. Когда мы выполняем простой dd if = / dev / null of = / tmp / blubb внутри «мониторинга» виртуальной машины, мы достигаем около 30 МБ / с.
Затем мы добавили еще 4 виртуальных ЦП к «мониторингу» ВМ и перезапустили его. «Мониторинг» виртуальной машины теперь имеет 8 виртуальных ЦП. Мы повторно запустили тесты со следующими результатами: Когда мы rsync файл с виртуальной машины «bla» для мониторинга «VM», мы теперь достигаем 36 МБ / с. Когда мы выполняем простой dd if = / dev / null of = / tmp / blubb внутри «мониторинга» виртуальной машины, мы достигаем около 61 МБ / с.
Для меня этот эффект довольно удивителен. Как получается, что добавление дополнительных виртуальных процессоров для этого виртуального гостя автоматически означает увеличение производительности диска внутри виртуальной машины?
У меня нет объяснения этому, и я был бы очень признателен за ваш вклад. Я хочу понять, что вызывает это увеличение производительности, так как я могу воспроизвести это поведение на 100%.
kvm_trace
чтобы увидеть, как количествоIO_Exits
изменений при изменении номера процессора. Я думаю, это потому, что вы используете IDE, которая запланирована с гостевыми процессорами. С virtio производительность должна быть согласованной, а когда data-plane находится в qemu, он получит радикальный прирост. Другое предположение может заключаться в том, что вы используете дистрибутив, который известен как глючный стек виртуализации.Ответы:
Я дам очень грубую идею / объяснение.
В OP-ситуации, помимо измерения внутри виртуальной машины, необходимо также следить за хостом.
В этом случае мы можем предположить, что верно следующее
"monitoring"
) I / O увеличивается с большим количеством процессоров, выделенных для него. Если хост-ввод / вывод уже был максимально исчерпан, не должно быть увеличения производительности ввода-вывода."bla"
не является ограничивающим фактором, поскольку производительность"monitoring"
ввода-вывода улучшилась без изменений в"bla"
Дополнительный фактор
Что произойдет, когда больше процессоров назначено
"monitoring"
?Когда
"monitoring"
выделяется больше процессоров, он получает больше вычислительной мощности, но также получает больше времени обработки для ввода-вывода.Это не имеет ничего общего с тем,
rsync
что это однопотоковая программа.Это уровень ввода-вывода, использующий повышенную мощность ЦП или, точнее, увеличенное время обработки.
Если
"monitoring"
во время теста используется программа мониторинга процессора (например, top) , она покажет не одну, а всю загрузку процессора, а также% wa. % wa - время ожидания на ввод / вывод.Это увеличение производительности произойдет только тогда, когда ваш ввод / вывод хоста не максимален. вне.
Я не могу найти расписание процессора на сайте KVM, но есть этот блог, в котором упоминается, что KVM использует CFS и cgroups, ниже приводится цитата
В двух словах: больше процессора = больше времени процессора = больше временного интервала ввода / вывода в данный период времени.
источник