У нас есть кластер Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt, состоящий из двух узлов. На каждом узле работает Ubuntu 12.04 64 Bit со следующими пакетами / версиями:
Виртуальные гости работают под управлением Ubuntu 10.04 64 Bit и Ubuntu 12.04 64 Bit. Мы используем функцию libvirt, чтобы передать возможности центральных процессоров виртуальным гостям для достижения максимальной производительности процессора.
Вот обычная установка этого кластера:
Недавно мы провели несколько простых тестов. Я знаю, что они непрофессиональны и не достигают высоких стандартов, но они уже показывают сильную тенденцию:
На узле A выполняется виртуальная машина bla На узле B выполняется мониторинг виртуальной машины
Когда мы синхронизируем файл с виртуальной машины «bla» на виртуальную машину «мониторинг», мы получаем только 12 МБ / с. Когда мы выполняем простой dd if = / dev / null of = / tmp / blubb внутри «мониторинга» виртуальной машины, мы получаем около 30 МБ / с.
Затем мы добавили еще 4 виртуальных ЦП в «мониторинг» виртуальной машины и перезапустили ее. «Мониторинг» виртуальной машины теперь имеет 8 виртуальных ЦП. Мы повторно запустили тесты со следующими результатами: Когда мы rsync файла из ВМ «bla» в ВМ «мониторинг», мы теперь достигаем 36 МБ / с. Когда мы выполняем простой dd if = / dev / null of = / tmp / blubb внутри «мониторинга» виртуальной машины, мы теперь получаем около 61 МБ / с.
Для меня этот эффект довольно неожиданный. Почему очевидно, что добавление дополнительных виртуальных процессоров для этого виртуального гостя автоматически означает повышение производительности диска внутри виртуальной машины?
У меня нет объяснения этому, и я буду очень признателен за ваш вклад. Я хочу понять, что вызывает такое повышение производительности, поскольку я могу воспроизвести это поведение на 100%.
Я дам очень приблизительное представление / объяснение.
В ситуации OP, помимо измерения внутри виртуальной машины, следует также посмотреть на хост.
В этом случае можно предположить, что верны следующие
"monitoring"
) Количество операций ввода-вывода увеличивается с увеличением количества выделенных ему процессоров. Если количество операций ввода-вывода хоста уже достигло максимума, увеличения производительности ввода-вывода не должно быть."bla"
не ограничивающий фактор Так как "monitoring"
Производительность ввода-вывода улучшена без изменений "bla"
Дополнительный фактор
Что произойдет, если назначить больше ЦП "monitoring"
?
когда "monitoring"
выделяется больше процессоров, он получает больше вычислительной мощности, но он также получает больше обработки время для ввода / вывода.
Это не имеет ничего общего с rsync
поскольку это однопоточная программа.
Это уровень ввода-вывода, использующий увеличенную мощность ЦП, или, точнее, увеличенное время обработки.
Если программа мониторинга процессора (например, top) используется на "monitoring"
во время теста он покажет не одно, а все использование процессора, а также% wa. % wa - время ожидания ввода-вывода.
Это увеличение производительности произойдет только тогда, когда количество операций ввода-вывода вашего хоста не будет максимальным. вне.
Я не могу найти расписание ЦП на сайте KVM, но есть это блог упоминание о том, что KVM использует CFS и cgroups, следующая цитата
Внутри KVM каждый виртуальный процессор сопоставляется с процессом Linux, который, в свою очередь, использует аппаратную помощь для создания необходимого «дыма и зеркал» для виртуализации. Таким образом, vcpu - это просто еще один процесс для CFS, а также, что немаловажно, для cgroups, который в качестве менеджера ресурсов позволяет Linux управлять распределением ресурсов - обычно пропорционально, чтобы установить распределения ограничений. cgroups также применяются к памяти, сети и вводу-выводу. Группы процессов можно сделать частью группы планирования для применения требований распределения ресурсов к иерархическим группам процессов.
Вкратце, больше ЦП = больше времени ЦП = больше временных интервалов ввода-вывода в заданный период времени.