Я пытаюсь реализовать следующий сценарий.
У меня есть 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. Итак, мои вопросы следующие:
Будет ли опция
-numa
делать свое дело? В документации сказано, что это для симуляции нумы. Если это моделирование, не означает ли это, что это повредит производительности? Мне нужен способ сказать гостю: «Эти процессоры находятся на одном узле NUMA» (даже если это не так). Это способ добиться этого?Похоже, в 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
работает нормально (чего и следовало ожидать). Кто-нибудь такое испытывал?