qemu-kvm проблемы раскрытия топологии numa

Я пытаюсь реализовать следующий сценарий.

У меня есть Linux-бокс с 4 узлами numa, каждый с 6 процессорами. Чтобы добиться лучшей производительности kvm-гостя, я прикрепляю каждый виртуальный процессор к набору процессоров, предпочтительно в одной и той же ячейке numa.

Например, если я хочу запустить гостевую систему с 12 ядрами, я прикрепляю первые 6 виртуальных процессоров к процессору в узле NUMA 1, а вторые 6 - к процессору в узле NUMA 2.

Пока все хорошо, проблемы начинают возникать, когда я пытаюсь открыть эту топологию гостю, то есть сообщить гостю, что у него есть два процессора на 2 узлах NUMA.

Я подумал, что если я использую параметры -smp 12,sockets=2,cores=6,threads=1 для qemu-kvm, он, скорее всего, разделит их пополам, сгруппировав первые 6 в один сокет, а вторые 6 в другой и использую параметр -numa для установки 2 узлов numa на соответствующий vcpus. Итак, мои вопросы следующие:

  1. Будет ли опция -numa делать свое дело? В документации сказано, что это для симуляции нумы. Если это моделирование, не означает ли это, что это повредит производительности? Мне нужен способ сказать гостю: «Эти процессоры находятся на одном узле NUMA» (даже если это не так). Это способ добиться этого?

  2. Похоже, в qemu (1.2.0) есть ошибка, и топология раскрыта очень плохо. Когда я устанавливаю топологию ЦП на (например) -smp 9,sockets=3,cores=3,threads=1, по какой-то странной причине внутри гостя я вижу их (с помощью lstopo), размещенных в трех сокетах, но 4 ядра на первом, 4 ядра на втором и 1 ядро ​​на втором. третий (4 | 4 | 1). Я подумал, что это делит их в степени 2, а не поровну. Я также наблюдал такое же поведение с sockets=2,cores=10; sockets=2,cores=18, как вы его называете, всегда разделяет их не пополам, а по степени двойки (т.е. 8 | 2 и 16 | 2). sockets=2,cores=8 работает нормально (чего и следовало ожидать). Кто-нибудь такое испытывал?


person user1477160    schedule 12.12.2012    source источник
comment
На самом деле у меня такая же проблема, как и у вас. Я хочу прикрепить первую половину виртуального процессора к первой половине ядер на хосте, а вторую половину виртуального процессора - ко второй половине ядер. А в гостевой системе мне нужно знать, какие ядра в гостевой системе привязаны ко второй половине ядер хоста. Поскольку моя проблема и ваша проблема связаны с «взаимодействием» между хостом и гостем, мой анализ и заключение таковы, что это совершенно непрозрачно между гостем и хостом. Если вообще есть такая «разоблаченность», думаю, значит нарушение виртуализации. Гость должен быть таким же независимым, суверенным, автономным для пользователя, как и хост.   -  person madhu    schedule 02.01.2013


Ответы (1)


Начиная с версии 0.9.8, можно использовать элемент numa для указания гостевой топологии NUMA. В сочетании с vcpupin в элементах cputune вы сможете при желании достичь желаемого сопоставления ЦП / памяти между хостом и гостем.

http://libvirt.org/formatdomain.html#elementsCPU

person Ilja Maslov    schedule 29.03.2013