ZaLinux.ru

Ужасная производительность диска VirtualBox (РЕШЕНО)

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

Но при интенсивном использовании диска в виртуальной машине её производительность падает непропорционально драматически. Например, установка пакета, содержащего большое количество файлов, в гостевой машине Linux может растянуться на часы! Это при том, что аналогичный пакет на реальном компьютере устанавливается за минуты. Обновление Windows могут замедлить работу виртуальной машины до полной её неработоспособности.

Всё это замедляет работу и портит опыт работы с виртуальными машинами.

Данную проблему можно исправить, включив «Кэширования ввода/вывода» для виртуального диска.

Чтобы включить «Кэширования ввода/вывода»:

  1. Выключите виртуальную машину, если она включена
  2. Откройте диалоговое окно настроек виртуальной машины.
  3. Перейти в «Носители»
  4. Щёлкните контроллер «Контроллер: SATA».
  5. Включите параметр «Кэширования ввода/вывода».

Вы также можете проверить любые другие контроллеры и/или диски, чтобы увидеть, есть ли там эта опция.

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

Есть объяснение, почему эта нужная опция по умолчанию выключена — у неё есть некоторые недостатки. Если коротко, авторы VirtualBox исходят из концепции «безопасность важнее производительности». Рассмотрим подробнее, какие последствия может нести включение этой опции:

1. Отложенная запись через кэш ОС хоста менее безопасна. Когда гостевая ОС записывает данные, она считает данные записанными, даже если они фактически ещё не прибыли на физический диск. Если по какой-то причине запись не произойдёт (сбой питания, сбой хоста), вероятность потери данных увеличивается.

2. Файлы образов дисков обычно очень большие. Кеширование их может поэтому быстро израсходовать весь кэш ОС хоста. В зависимости от эффективности кэширования ОС хоста, это может сильно замедлить работу хоста, особенно, если несколько виртуальных машин работают одновременно. Например, в Linux хостах, кэширование хоста может привести к тому, что Linux отложит все записи до момента, когда кэш хоста почти заполнен, и затем все эти изменения записываются в один раз, это может привести к остановке выполнение виртуальной машины на несколько минут. А это в свою очередь может привести к ошибке ввода-вывода в гостевой системе, поскольку время запросов ввода-вывода истекло.

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

Даже если отключить кэширование ввода-вывода хоста по указанным выше причинам, VirtualBox использует свой собственный небольшой кеш для буферизации записи, но не чтения кэширование, поскольку это обычно уже выполняется гостевой ОС. Кроме того, VirtualBox полностью поддерживает асинхронный ввод-вывод для своих виртуальных контроллеров SATA, SCSI и SAS через несколько потоков ввода-вывода.

На самом деле практика показывает, что данные не теряются, а включение данной настройки отлично сказывается на производительность.

Кроме описанного способа есть ещё один вариант для продвинутых пользователей. Суть в том, что в качестве диска виртуальной машины используется реальный USB диск. С такого диска можно загрузиться как в VirtualBox, так и на физическом компьютере. При этом производительность приближается к работе реального компьютера — никаких задержек, операции обновления и установки больших пакетов происходят с той же скоростью, как на реальном компьютере. О том, как это сделать, смотрите в статье «Как в VirtualBox загрузиться с USB».

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *