Подняли сегодня для теста в качестве гостевой ОС Windows XP SP3 для экспериментов. Подняли на базе Hyper-V в Windows Server 2008 R2 SP1. Отдали 4 виртуальных процессора и получили странный эффект: После запуска ОС нормально работает, проходит несколько минут – и повисает! причём – не совсем. Процессоры в целом загружено на 8% (причём – стабильно при 8ми головах), ОС висит, хоть и не совсем померла. Вылечим!

Как выяснилось – всё банально. Windows XP “не умеет” взаимодействовать с RMM (менеджером ресурсов), а windows 2008 R2 sp1 на том железе, что мы ей дали, умеет “выключать” ядра. И получаем парадоксальную ситуацию: гостевая ОС разместила свои потоки на разных виртуальных процессорах, а хостовая ОС вдруг некоторые ядра, на которых размещены эти потоки, отключила! Результат – бесконечное ожидание потоков в выключенных ядрах.

При этом, если сохранить состояние виртуальной машины в Hyper-V и вновь восстановить её – первые несколько минут всё живёт нормально с того места, на котором всё и зависло. Но по прошествии нескольких минут – опять тот же эффект.

Windows Server 2008 R2 SP1 Hypev V и Windows XP в роли гостевой ОС – лечим “странные” зависания А лечится всё очень даже просто.

Обратите внимание на рисунок справа, параметры виртуальной машины. Нужно всего лишь поставить галку “Запустить более старую операционную систему, например Windows NT”. Потому как Windows XP через сервисы интеграции с хостом не в состоянии сообщить, что ей ядра нужны, и усыплять их не следует. После установки этой галки (при выключенной виртуальной машине, естественно) хостовая Windows 2008 R2 перестала “усыплять” ядра, занятые потоками гостевой ОС – и проблема решилась, пусть и за счёт менее оптимального расхода электроэнергии.

Отзывы » (4)

  1. Baf:

    А может быть всё проще? :)

    Отдали 4 виртуальных процессора

    MS в XP же поддерживает не больше 2х процессоров?

    • Вы удивитесь, но всё работает, и в диспетчере задач в XP — 4 процессора (естественно — ядра).
      Вы говорите о лицензионном ограничении, которые следует понимать — не более 2 физических процессоров (сокетов).
      P.S. Да, кстати, всё забываю исправить статью: предложенный мной рецепт не прошёл проверку. Зато куда более банальный помог: в Windows 2008 R2 (которая хост Hyper-V) изменили параметры Электропитания — план максимальной производительности просто пока поставили — и всё работает замечательно, потому как Windows 2008 R2 перестала отключать ядра.
      Посему проблема осталась открытой — как «правильно» объяснить windows 2008 R2, что ядра, на которых размещены потоки такой-то виртуальной машины, отключать нельзя? Вариант с планом электропитания работает, но красивым его не назовёшь…

    • По факту вижу — в диспетчере задач в XP 4 ядра. И не стоит путать понятия «виртуальный процессор» и «ядро». Под виртуальным процессором с точки зрения лицензирования понимать следует совокупность виртуальных ядер в количестве, в котором они присутствуют в реальном процессоре, на котором функционирует хостовая ОС. Так что, по сути — у меня виртуальная XP запущена на одном четырёхядерном виртуальном процессоре (с точки зрения лицензирования). А ограничение «не более 4х ядер на виртуальную машину» — уже технологическое ограничение Hyper-V на текущий момент.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка