Почему включение Hyper-V ускоряет запуск процесса MSYS2?
504
Mehrdad
Когда я запускаю этот цикл в оболочке MSY2 Bash
function test() { bcdedit | grep hypervisorlaunchtype printf "Press ENTER to begin..." 1>&2 read # warm-up for ((i=0; i<"$1"; i++)); do $(:); done # actual iterations local tstart="$(date "+%s%3N")" iterations=0 local i for ((i=2; i<"$1"; i++)); do $(:); done local tend="$(date "+%s%3N")" # 2 extra spawns here printf "%s ms/spawn" $((("$tend" - "$tstart") / "$i")) 1>&2 read } test 300
Я получаю около 23 мс / спавн, если hypervisorlaunchtype
есть off
, но около 4 мс / спавн, если это так auto
.
Вот GIF-файлы, сравнивающие два с одинаковыми итерациями: Hyper-V off против Hyper-V auto .
(Обратите внимание, что статистика времени процессора не остается на нуле из-за поломки - она остается на нуле, потому что на самом деле они слишком малы. Если вы оставите программу работающей достаточно долго, она будет увеличиваться.)
Что вызывает это несоответствие?
Странно, но большинство людей сообщают об обратном эффекте. Включение Hyper-V в Windows 8+ фактически превращает его в настоящую операционную систему, в то время как Windows вынуждена работать как виртуальная машина, хотя и со специальными правами доступа к оборудованию, что может снизить производительность. Я мог бы предположить, что одной из причин этого различия может быть то, что Hyper-V предварительно выделяет память не так, как Windows, но это может лучше соответствовать вашему случаю. Не могли бы вы дать более подробную информацию о вашей среде и методе измерения?
harrymc 6 лет назад
0
@harrymc: Да, это тоже поражает. Метод измерения - это буквально сам код - он сам рассчитывает время (с помощью команды `date`), просто запустите его. Сначала я заметил это, потому что заметил, что MSYS2 неожиданно запускается быстрее с включенным Hyper-V. (!) Не уверен, что именно ты под моей "средой" конкретно ... это Windows 8.1 x64 с последними обновлениями, если ты это имеешь ввиду. Я воспроизвел это на двух разных ноутбуках, поэтому я не думаю, что это очень специфично для моих ноутбуков. У вас есть Windows 8.1 / вы можете ее воспроизвести?
Mehrdad 6 лет назад
0
У меня Windows 10, которая включает в себя более развитый Hyper-V. Я имел в виду то, как вы запускаете программное обеспечение. Если я правильно понимаю, вы запускаете цикл bash (лучше покажите нам сценарий), поэтому, я думаю, вы действительно измеряете время запуска или системные вызовы. Попробуйте запустить Resource Monitor, чтобы увидеть, где разница. В Диспетчере задач можно также отобразить столбцы «Ошибки страниц», «Чтения ввода-вывода», «Прочие операции ввода-вывода», «Ручки и потоки» - различия в профиле выполнения могут помочь. Даже если никаких различий не наблюдается, это полезный факт.
harrymc 6 лет назад
0
@harrymc: этот код выше * является * сценарием - я просто копирую и вставляю его в оболочку и наблюдаю за выводом. Я постараюсь выяснить, смогу ли я собрать эту информацию, но, возможно, пройдет немного времени, прежде чем я смогу ее найти. Было бы полезно, если бы вы попытались запустить MSYS2 на своем конце и посмотреть, наблюдаете ли вы такое же поведение на Win10.
Mehrdad 6 лет назад
0
@harrymc: На самом деле, чьи * ошибки * страницы и I / O и т. д. вы запрашиваете? Родительский процесс, запускающий детей или самих детей? Я ожидал бы, что это будет более актуально для детей, но я не уверен, как измерить их, так как они, очевидно, прекратили через короткий промежуток времени, и я не могу остановить их до конца.
Mehrdad 6 лет назад
0
Измените ваш сценарий так, чтобы он выполнялся в длинном цикле, накапливая разницу мс, чтобы у вас было время наблюдать за поведением. Resource Monitor покажет общее поведение системы. Я не знаю MSYS2 достаточно, чтобы сказать, является ли «дата» дочерним или встроенным.
harrymc 6 лет назад
0
@harrymc: О, суть здесь в том, что `date` - это ребенок, и поэтому подоболочка, которая его вызывает (отсюда деление на 2, вы видите в расчете). Вот почему я говорю, что не могу измерить поведение ребенка - оба процесса многократно запускаются и заканчиваются быстро. Я постараюсь увидеть, приносит ли родитель что-нибудь, но я, честно говоря, не ожидаю этого.
Mehrdad 6 лет назад
0
Resource Monitor все равно будет полезен. Это можно сделать с помощью бесплатного [Process Hacker] (http://processhacker.sourceforge.net/) - включите Параметры-> Дополнительно-> Включить использование ЦП (и других) дочерних элементов в свернутые процессы, а затем сверните родительский элемент ([подробнее] и снимок экрана] (https://superuser.com/a/1153795/8672)).
harrymc 6 лет назад
0
@harrymc: Хорошо, поэтому, когда я оставляю скрипт работающим в течение ~ 10 секунд, я вижу значительную разницу в количестве ошибок ввода-вывода и страниц, а также времени, проведенного в режиме пользователя или ядра в родительском процессе Bash. См. [Hyper-V off] (https://i.stack.imgur.com/WirSR.png) и [Hyper-V auto] (https://i.stack.imgur.com/JZKSp.png). Не уверен, что делать с этим, хотя.
Mehrdad 6 лет назад
0
Вы уверены, что рабочий период был примерно одинаковым для обоих? Число «Hyper-V auto» в 2-4 раза больше, чем «Hyper-V off». Вы можете изменить скрипт так, чтобы он останавливался через 10 секунд, а не полагаться на свои часы и делать скриншоты статистики до и после выполнения цикла. А какой у тебя компьютер?
harrymc 6 лет назад
0
@harrymc: Да, я определенно уверен, я делал это несколько раз. Они постоянно получаются такими. Кажется, с Hyper-V процессор просто делает больше работы. Компьютер является ThinkPad.
Mehrdad 6 лет назад
0
Делать больше работы должно быть медленнее, а не быстрее. В отличие от этого, похоже, что ядро в Hyper-V использует ваше оборудование намного лучше, чем в Windows 8.1 (лучше [HAL] (https://en.wikipedia.org/wiki/Hardware_abstraction)?). Ваш компьютер кажется более быстрым с Hyper-V?
harrymc 6 лет назад
0
@harrymc: Нет, совсем нет, иначе я бы заметил это много лет назад. Я только замечаю разницу в скриптах MSYS2. Может быть, ядро использует аппаратное обеспечение «лучше», но я сомневаюсь в этом - несоответствие в циклах делает более вероятным, что предстоит выполнить больше работы, чем та же самая работа, выполняемая быстрее. Я предполагаю, что может быть какая-то искусственная пауза где-то, чего не происходит в системе с поддержкой Hyper-V, но я понятия не имею, что это может быть.
Mehrdad 6 лет назад
0
Это повышает вероятность того, что проблема с библиотеками MSYS2. Каким-то образом они неправильно понимают аппаратное обеспечение и медленно выполняют некоторые операции. Под Hyper-V аппаратная идентификация дает лучшие результаты.
harrymc 6 лет назад
0
@harrymc: Это кажется маловероятным, хотя возможно. Я уже спрашивал об этом, но вы ничего не сказали - хотите ли вы установить MSYS2 и попытаться воспроизвести его на своем компьютере? Это ничего не загрязняет; насколько я знаю, все находится ниже основной папки \ MSYS2. Кажется, помочь вам понять, что происходит, может быть намного проще, чем просто гадать в темноте.
Mehrdad 6 лет назад
0
@ McDonald's: я уже удалил / переустановил Hyper-V; не видел никакой разницы. Как я уже сказал, это происходит на разных моделях ноутбуков - я не думаю, что это проблема с BIOS (и, по крайней мере, хотя бы одна из них является актуальной). И нет, я не использую программное обеспечение для виртуальных машин.
Mehrdad 6 лет назад
0
@ McDonald's: я приложил GIF-файлы в вопросах, проверьте это. Надеюсь, это достаточно убедительно, что мне не нужно пересылать почту через мой ноутбук. :-)
Mehrdad 6 лет назад
0
@harrymc: я добавил GIF-файлы в вопросы и отредактировал скрипт, чтобы остановить его после определенного количества итераций, проверьте его. С Hyper-V это смехотворно быстрее.
Mehrdad 6 лет назад
0
У вас больше нет ответов. Я никогда не сталкивался с таким поведением, как ваше, и мне не нужна ваша крошечная награда.
harrymc 6 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
1
Могу ли я использовать Mac OS X в качестве виртуальной машины Hyper-V?
-
4
Какой антивирус лучше всего работает с Microsoft Hyper-V
-
3
Поддерживает ли Windows 7 Hyper-V?
-
-
1
Сервер Hyper V не найден по имени
-
2
Менеджер загрузки Windows 7
-
1
Disk2vhd, конвертируйте мой компьютер в виртуальную машину Hyper-V
-
1
Не могу сделать nodejs mingw32: pkg-config не может найти gnutils
-
1
Узел назначения недоступен после перехода на Hyper-V
-
2
Как мы можем определить, кто, если кто-либо, вошел в систему на сервере Windows Server 2008?
-
1
Как я могу определить, считает ли Windows жесткий диск съемным без графического интерфейса?