Нагрузка на процессор распределяется неравномерно по ядрам

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

Когда я запускаю виртуальную машину под высокой нагрузкой, это не распределяется равномерно по всем ядрам. Я попытался изменить настройки процессора / ядра в настройках виртуальной машины и разных гипервизорах:

  • KVM
  • VM-Ware
  • VirtualBox

Если я запускаю стресс-тест процессора в Ubuntu, все ядра работают нормально и синхронизируются. Если я запускаю стресс-тестирование на виртуальной машине, некоторые ядра загружаются на 100%, а другие - на 10%. Загруженные ядра и количество загруженных ядер меняются. Так, один раз, core1 и 3 имеют нагрузку 100%, в другой раз только core4 имеет нагрузку 100%.

В разделе "обновление программного обеспечения" > "Дополнительные драйверы" устройство Intel Microcode отображается как "неизвестно". Мне кажется, что это играет роль в проблеме.

Я действительно застрял на том, как устранить неполадки или исправить это, поэтому любой вклад приветствуется.

РЕДАКТИРОВАТЬ: Я протестировал еще несколько с VMware:

  • Когда я настраиваю два ядра, через несколько минут я получаю ошибку vcpu
  • Когда я настраиваю только одно ядро, на виртуальном хосте используется только одно ядро. Когда я настраиваю четыре ядра, используются все ядра. Тем не мение,
  • Когда я запускаю вторую виртуальную машину с четырьмя настроенными ядрами, я получаю настоящее
    странные, неравномерные и нестабильные нагрузки на ядро.

РЕДАКТИРОВАТЬ: Таким образом, я обновил свой BIOS, переустановил Ubuntu, без изменений. Обновил мой микрокод с ftp.us.debian.org/debian/pool/non-free/i/intel-microcode, без изменений. Отключен гипертред, без изменений. Когда я запускаю две виртуальные машины, ядра медленно перестают синхронизироваться, и через некоторое время core1 достигает 100%, а core2 - 20%.

РЕДАКТИРОВАТЬ: Итак, я попробовал это с новым ядром Linux Ubuntu 16.10, без разницы сток. Еще глубже, отключив драйвер intel_pstate и изменив конфигурационный файл tlp, но все безуспешно. Дело даже не в том, чтобы заставить это работать, я просто хочу знать как. Черт возьми, Linux.

2 ответа

Вам нужен intel-microcode version 3.20160714.1. Микрокоды 0x7c и 0x84 не работают (возможно, не на каждой конкретной модели процессора Skylake, но мы не получаем достаточно данных от Intel, чтобы знать). Т.е. вы хотите микрокод ревизии 0x9d/0x9e или выше.

В любом случае, если вам повезет, микрокод 0x9d или новее может помочь при сбое vmware. Если нет, то, по крайней мере, это поможет избежать дальнейших проблем.

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

Убедитесь, что ваш BIOS/UEFI настроен на "полную / максимальную производительность", и что в нем нет ничего, что пытается максимизировать производительность одноядерного процессора (также на всякий случай попробуйте "сбалансированный режим"). Если этого недостаточно, вы можете установить версию пакета linux-tools-common и попробовать использовать x86_energy_perf_policy, чтобы перевести процессор в режим производительности.

К сожалению, я не знаю, какая утилита Linux позволяет запрашивать процессор, чтобы узнать, работает ли он самостоятельно из-за ограничений TDP или мощности.

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

Чтобы решить сообщение с микрокодом, в Synaptic щелкните значок RELOAD, затем значок SEARCH и введите intel-microcode, отметьте единственный результат для установки, затем щелкните значок ПРИМЕНИТЬ. Выйти из Synaptic. Перезагрузите компьютер.

Чтобы увидеть, действительно ли это работает, в терминале введите dmesg|grep microcode,

Ура, Ал

Другие вопросы по тегам