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

Очень быстрый откат виртуальной машины

Сводка: есть ли виртуальная машина, оптимизированная для быстрого отката в памяти к предыдущему состоянию?

Я напрасно пробовал на StackOverflow и SuperUser - возможно, это подходящее место, чтобы задать этот вопрос. :)

Я ищу самый быстрый способ откатить виртуальную машину до ранее известного состояния. Я буду делать много откатов до того же состояния. Создание снимка может быть медленным, но откат должен быть быстрым.

В идеале я бы хотел, чтобы производительность отката была как можно ближе к производительности одного memcpy ().

В настоящее время я тестирую что-то на своем портативном компьютере (Mac OS X), но позже разверну его на мощном сервере Linux. Переносимость была бы хороша, но работать только на Linux - нормально. Коммерческие решения прекрасны, если они выполняют свою работу.

Для справки, вот сколько времени memcpy () занимает на моей машине: (Код доступен здесь.)

     Size      Time
 ========= ========= 
    64 MB   0.030 s
   128 MB   0.085 s
   256 MB   0.140 s
   512 MB   0.290 s
  1024 MB   0.600 s

Пока что я пробовал VirtualBox и VMWare Fusion на своей машине. Производительность была сопоставима для обоих.

В идеале тоже хотелось бы откатить состояние диска. VirtualBox, похоже, поддерживает «неизменяемые» диски, где весь дисковый ввод-вывод записывается в дифференциальный файл и отбрасывается при откатах. Это кажется естественным совпадением.

Для VirtualBox откат виртуальной машины с 2,5 ГБ выделенной оперативной памяти с сохранением состояния на диске (SSD) занял ~ 35 секунд.

Поскольку ожидается, что дисковый ввод-вывод будет медленным, я затем создал RAM-диск (отформатированный как HFS +) и переместил туда снимки. Откат не измененной в остальном виртуальной машины до того же состояния занимает ~ 16,5 секунд.

Данные моментального снимка занимают 1,11 ГБ. Таким образом, VirtualBox занимает ~ 15 с / 1 ГБ данных при откате с RAM-диска. Это в 6,72 раза больше времени, чем memcpy (). (Не вызывает ли столько накладных расходов прохождение через систему ввода-вывода Mac OS X?)

Поскольку я не знаю способа откатить виртуальную машину VirtualBox, не выключив ее сначала, а затем снова запустив, возможно, это вызвано другими факторами.

В идеале гипервизор должен хранить все состояние снимков в основной памяти и использовать memcpy () для отката, позволяя выполнить откат примерно за 5 секунд. (Даже более умный гипервизор мог бы реализовать копирование при записи на страницах и откатывать только те страницы памяти, которые действительно изменились.)

Есть ли какие-нибудь гипервизоры, оптимизированные для рабочих нагрузок с частым откатом? Если нет: что может быть наиболее жизнеспособным способом реализовать такую ​​вещь самостоятельно?

(Я также провел небольшое исследование отката на уровне процессов, и, похоже, для этого есть несколько интересных решений для Linux; но наличие отката, работающего для произвольных приложений, и возможность отката ввода-вывода - большие плюсы.)

(Что я действительно хочу сделать, так это откат к контрольной точке в произвольных Java-приложениях, в идеале вместе с их вводом-выводом. Я нашел только мертвые исследовательские проекты для отката JVM, но, может быть, кто-то знает о более поздних работах? Однако мне придется иметь дело с почти произвольными приложениями Java.)

На самом деле, нет. Цель моментального снимка - сделать «снимок» текущего состояния системы, чтобы, если что-то пойдет не так в ближайшем будущем (обновление или установка программного обеспечения), его можно будет быстро вернуть в состояние, предшествующее установке. Таким образом, вам не нужно выполнять полное восстановление из резервной копии. Моментальные снимки должны храниться только в течение короткого периода времени и очищать их для каждой VMWare.

Что-то похожее на то, что вы ищете, - это VMWare Site Recovery Manager, который позволяет вам иметь полностью реплицированную инфраструктуру виртуальных машин и будет только частично работать для того, что вам нужно. Я не верю, что это точно соответствует вашим целям, потому что это больше для зеркальной копии вашей виртуальной машины, а не для состояния «отката» вашей виртуальной машины.

Другой известный мне вариант с VMWare и, возможно, VirtulBox - это создание запланированных задач, автоматизирующих моментальный снимок и возврат с помощью командных строк (PowerCLI). Затем он создаст снимок и вернется обратно по расписанию.

Кроме того, если вам часто приходится делать снимки и откатываться назад, возможно, что-то не так в вашем процессе. Возможно, если вы объясните, почему именно вы это делаете, откликнется больше.

редактировать

Я думаю, что лучший подход к этому может заключаться в том, чтобы просто запустить несколько виртуальных машин с одинаковой базовой линией. В основном клонируйте первую до 3 или 4 дополнительных виртуальных машин и используйте их для тестирования. Что это будет делать, так это как только исходный набор тестирования будет выполнен на VM1, начнется тестирование на VM2. Откатите ВМ1 с моментальным снимком, пока это происходит. Затем, когда VM2 будет завершена, перейдите к VM3 при откате VM2. Затем вернитесь к ВМ1, когда ВМ3 будет готово, и откатите ВМ3. Если к тому времени, когда вы закончите с ВМ3, ВМ1 не завершила откат, добавьте дополнительную ВМ. Таким образом, когда вы дойдете до конца «строки», так сказать, VM1 выполнит откат. Поскольку он автоматизирован, вы можете использовать PowerCLI или другую командную строку, чтобы вернуть моментальный снимок после завершения теста.

Я не знаю, каковы ваши настоящие потребности. Однако можно ли запустить несколько клонов и выполнить какую-то циклическую балансировку нагрузки? Затем вы можете откатить эти машины в фоновом режиме, и у вас будет больше времени для этого.