Назад | Перейти на главную страницу

KVM / Qemu, Ubuntu: Почему все больше гостевых процессоров быстро улучшают дисковый ввод-вывод?

У нас есть кластер 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, помимо измерения внутри виртуальной машины, следует также посмотреть на хост.

В этом случае можно предположить, что верны следующие

  1. Во всех тестах пропускная способность ввода-вывода хоста (диска) не была максимальной. Как ВМ ("monitoring") Количество операций ввода-вывода увеличивается с увеличением количества выделенных ему процессоров. Если количество операций ввода-вывода хоста уже достигло максимума, увеличения производительности ввода-вывода не должно быть.
  2. "bla" не ограничивающий фактор Так как "monitoring" Производительность ввода-вывода улучшена без изменений "bla"
  3. ЦП - основная фабрика по увеличению производительности(в случае OP), поскольку ввод-вывод не является узким местом, и OP не упоминает никаких изменений размера памяти. Но почему? Или как?

Дополнительный фактор

  1. Запись занимает больше времени, чем чтение То же самое для ВМ и для хоста. Проще говоря: виртуальная машина ждет, пока хост закончит чтение и запись.

Что произойдет, если назначить больше ЦП "monitoring"?

когда "monitoring" выделяется больше процессоров, он получает больше вычислительной мощности, но он также получает больше обработки время для ввода / вывода.

Это не имеет ничего общего с rsync поскольку это однопоточная программа.

Это уровень ввода-вывода, использующий увеличенную мощность ЦП, или, точнее, увеличенное время обработки.

Если программа мониторинга процессора (например, top) используется на "monitoring" во время теста он покажет не одно, а все использование процессора, а также% wa. % wa - время ожидания ввода-вывода.

Это увеличение производительности произойдет только тогда, когда количество операций ввода-вывода вашего хоста не будет максимальным. вне.

Я не могу найти расписание ЦП на сайте KVM, но есть это блог упоминание о том, что KVM использует CFS и cgroups, следующая цитата

Внутри KVM каждый виртуальный процессор сопоставляется с процессом Linux, который, в свою очередь, использует аппаратную помощь для создания необходимого «дыма и зеркал» для виртуализации. Таким образом, vcpu - это просто еще один процесс для CFS, а также, что немаловажно, для cgroups, который в качестве менеджера ресурсов позволяет Linux управлять распределением ресурсов - обычно пропорционально, чтобы установить распределения ограничений. cgroups также применяются к памяти, сети и вводу-выводу. Группы процессов можно сделать частью группы планирования для применения требований распределения ресурсов к иерархическим группам процессов.

Вкратце, больше ЦП = больше времени ЦП = больше временных интервалов ввода-вывода в заданный период времени.