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

libvirt cpu-mode = 'host-model' сбивает с толку при сопоставлении моделей процессора?

У меня есть физический хост, у которого есть модель процессора «Intel (R) Xeon (R) CPU E5-2670 v3 @ 2.30GHz», и у него есть флаг «avx2» в cpuinfo. На хосте настроен гипервизор kvm / qemu и libvirt. Я установил режим процессора как модель хоста в XML домена. На хосте можно создать гостевую виртуальную машину. Когда я проверяю модель процессора гостевой виртуальной машины, она отображается как «SandyBridge», а также имеет флаг «avx2» в cpuinfo. Но «SandyBridge» не поддерживает флаг «avx2», а модель «Haswell» поддерживает. Это просто из-за режима модели хоста, libvirt находит ближайшую модель процессора к «Intel (R) Xeon (R) CPU E5-2670 v3 @ 2.30GHz» как «SandyBridge», но вместо этого должна отображать «Haswell». Означает ли это, что в libvirt есть ошибка, или это допустимое представление в данном сценарии? Я использую libvirt версии 1.2.2

Я думаю, что здесь происходит то, что ваша старая версия libvirt не знает о том, что Intel отключила TSX в чипах Haswell в обновлении микрокода, которое ваш процессор почти наверняка уже получил. Libvirt только узнала и рекламировала модель процессора Haswell-noTSX в версии 1.2.14. Поскольку в вашем процессоре отключены некоторые функции, которые libvirt использует для определения типа процессора, он ошибочно считает, что это SandyBridge. В текущей версии libvirt он должен правильно определяться как Haswell-noTSX.

На практике это вообще не должно влиять на вас, за исключением того, что виртуальные машины не могут использовать другие функции введен в Haswell и отсутствует в SandyBridge, но вы можете вручную добавить эти в XML определения вашей виртуальной машины, если вы не можете обновить libvirt и действительно хотите их. Имейте в виду, что вам, вероятно, также потребуется обновить qemu. И в этот момент вам, вероятно, следует просто использовать более современный гипервизор. Все, что вы сейчас используете, старше, чем оборудование, на котором оно работает, что всегда является сомнительной идеей ...

Я нашел другой обходной путь, который не требует обновления libvirt. Я удалил флаги hle и rtm из определения Haswell в xml-файле сопоставления процессора, используемом libvirt (/usr/share/libvirt/cpu_map.xml). Затем я перезапустил процесс libvirt. Затем я перезагрузил виртуальную машину, и она показала правильное название модели как Haswell.