Добрый день!
Возникло несколько вопросов по настройке vcpu в kvm:
1. Читал что для оптимальной производительности нужно, чтобы общее число vcpu не превышало число ядер процессоров хоста. Если на хосте стоит 4-ядерный процессор с HT, то оптимальным будет 8 vcpu или 4? Стоит ли оставлять ядро для хостовой системы?
2. В virt-install есть параметр maxvcpus=MAX, про него в мане написано: If ’maxvcpus’ is specified, the guest will be able to hotplug up to MAX vcpus while the guest is running, but will startup with VCPUS. Когда это может быть полезно и работает ли это с гостевым Centos?
3. там же можно задать топологию добавляемых процессоров [,sockets=#][,cores=#][,threads=#]. Есть ли разница между sockets=1,cores=4 и sockets=4,cores=1? И так и так выходит 4 vcpu. Во втором случае гостевая ОС будет считать что она крутится на NUMA? Какой вариант оптимальнее, для чего може понадобится указание threads(как понимаю имеется в вижу HT)?
4. Если с помощью cpuset назначить гостю определенные ядра, то они будут полностью в его распоряжении? Или эти ядра может использовать хост или другой гость, у которого привязки нет?
Заранее спасибо за помощь  ab

2

ingvarhost пишет:

1. Читал что для оптимальной производительности нужно, чтобы общее число vcpu не превышало число ядер процессоров хоста. Если на хосте стоит 4-ядерный процессор с HT, то оптимальным будет 8 vcpu или 4? Стоит ли оставлять ядро для хостовой системы?

зависит от типа нагрузки, некоторые нагрузки не дружат с HT, дргие дружат.

ingvarhost пишет:

2. В virt-install есть параметр maxvcpus=MAX, про него в мане написано: If ’maxvcpus’ is specified, the guest will be able to hotplug up to MAX vcpus while the guest is running, but will startup with VCPUS. Когда это может быть полезно и работает ли это с гостевым Centos?

должно работать начиная с 6.4 емнип. это параметр который устанавливает максимальное кол-во процессоров которые можно на лету подключить к ВМ. включается ВМ с оригинальным а не максимальным количеством. Сделано для автоматизации нагрузки, когда ВМ поднимается с минимальным кол-вом процессоров, если ресурсов не хватает, можно добавить еще, но до определенного лимита.

ingvarhost пишет:

3. там же можно задать топологию добавляемых процессоров [,sockets=#][,cores=#][,threads=#]. Есть ли разница между sockets=1,cores=4 и sockets=4,cores=1? И так и так выходит 4 vcpu. Во втором случае гостевая ОС будет считать что она крутится на NUMA? Какой вариант оптимальнее, для чего може понадобится указание threads(как понимаю имеется в вижу HT)?

с точки зрения хоста никакой разницы. все эти параметры транслируются в треды на хосте. внутри ВМ топология будет выглядеть так как ее задали, что зачастую помогает с лицензиями (например винда лицензируется по сокетам, и можно задать два сокета, но 100500 ядер, и получить мощную машину вполне легально). threads - то же самое, в гесте будет симулировать тред а не ядро.

ingvarhost пишет:

4. Если с помощью cpuset назначить гостю определенные ядра, то они будут полностью в его распоряжении? Или эти ядра может использовать хост или другой гость, у которого привязки нет?

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

3

dyasny, большое спасибо за ответ. Еще пара вещей интересует:
1. Стоит ли резервировать один поток или ядро для хоста и не отдавать его виртуалкам (с помощью того же cpuset) или в этом нет смысла?
2. У меня 4-ядерный процессор с HT. В системе видится как 8 ядер от 0 до 7. Как понять - какие из них принадлежат одному физическому ядру? Т.е., например, 0 и 1 - это два логичесикх потока одного физического ядра, так же 2 и 3 и т.д. Или 0 или 4?

4

ingvarhost пишет:

dyasny, большое спасибо за ответ. Еще пара вещей интересует:
1. Стоит ли резервировать один поток или ядро для хоста и не отдавать его виртуалкам (с помощью того же cpuset) или в этом нет смысла?

it depends ab если ВМ сильно нагружена и критична, и заметно что другие ВМ мешают ей работать, тогда стоит разнести ВМ по разным ядрам чтоб они не мешали друг другу. особенно если сумамрно ВМ получают больше ядер чем имеется у физ. хоста. Если же нет, то это обычно ни к чему. Самое простое - попробовать и посмотреть есть ли заметная разница во время пиковой нагрузки. Если нет, то нечего заморачиваться.

2. У меня 4-ядерный процессор с HT. В системе видится как 8 ядер от 0 до 7. Как понять - какие из них принадлежат одному физическому ядру? Т.е., например, 0 и 1 - это два логичесикх потока одного физического ядра, так же 2 и 3 и т.д. Или 0 или 4?

надо смотреть на /sys/devices/system/cpu/cpuN/topology/thread_siblings и /sys/devices/system/cpu/cpuN/topology/thread_siblings_list

http://pic.dhe.ibm.com/infocenter/lnxin … roctop.htm
https://lopsa.org/content/detecting-whe … ng-enabled (по ходу первый раз вижу пользу от LOPSA)

5

dyasny, большое спасибо!

6

всегда пожалуйста