[kata-dev] CPU constraint translation to Qemu SMP options

Edupuganti, Saikrishna saikrishna.edupuganti at intel.com
Wed Jun 20 18:58:04 UTC 2018


Thanks for the reply. I was just about to send out my findings -

Summary:
By default if you don’t specify sockets and cores qemu comes up in 1 core per socket topology.
With sockets=1,cores=K (same as max_vcpus), they come all come up in one socket and you can still hot-plug as shown
I tried the same with K=255 and it seemed to work, although I don’t know if testing like this without an actual VM is enough

qemu-system-x86_64 -qmp unix:/tmp/qmp-sock,server,nowait -smp 1,maxcpus=4 -nographic

(QEMU) query-hotpluggable-cpus
{"return": [{"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 3, "core-id": 0, "thread-id": 0}}, {"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 2, "core-id": 0, "thread-id": 0}}, {"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 1, "core-id": 0, "thread-id": 0}}, {"qom-path": "/machine/unattached/device[0]", "type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 0, "thread-id": 0}}]}


qemu-system-x86_64 -qmp unix:/tmp/qmp-sock,server,nowait -smp 1,cores=4,sockets=1,maxcpus=4 -nographic

(QEMU) query-hotpluggable-cpus
{"return": [{"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 3, "thread-id": 0}}, {"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 2, "thread-id": 0}}, {"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 1, "thread-id": 0}}, {"qom-path": "/machine/unattached/device[0]", "type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 0, "thread-id": 0}}]}

 (QEMU) device_add driver=qemu64-x86_64-cpu socket-id=0 core-id=2 thread-id=0
{"return": {}}

(QEMU) query-hotpluggable-cpus
{"return": [{"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 3, "thread-id": 0}}, {"qom-path": "/machine/peripheral-anon/device[0]", "type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 2, "thread-id": 0}}, {"type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 1, "thread-id": 0}}, {"qom-path": "/machine/unattached/device[0]", "type": "qemu64-x86_64-cpu", "vcpus-count": 1, "props": {"socket-id": 0, "core-id": 0, "thread-id": 0}}]}

Thanks,
Sai

-----Original Message-----
From: Montes, Julio 
Sent: Wednesday, June 20, 2018 11:37 AM
To: kata-dev at lists.katacontainers.io; Edupuganti, Saikrishna <saikrishna.edupuganti at intel.com>
Cc: Ernst, Eric <eric.ernst at intel.com>
Subject: Re: CPU constraint translation to Qemu SMP options

Hi Sai

On Wed, 2018-06-20 at 08:50 -0700, Edupuganti, Saikrishna wrote:
> Hi Team,
> 
> When translating the K cpu count from Docker/k8s to Qemu options,
> what is reasoning behind configuring K sockets with 1 core per socket
> instead of K cores with 1 socket? Did any performance measurements
> guide this decision?

no, this is to support the maximum number of vCPUs.

from https://github.com/containers/virtcontainers/pull/591

"The maximum number of CPUs per VM recommended by KVM is 240.
To support this amount of CPUs, the CPU topology must change
to 1 CPU 1 Socket, otherwise the VM will fail and print next
error message:
qemu: max_cpus is too large. APIC ID of last CPU is N"

see issue https://github.com/containers/virtcontainers/issues/597


do you see better pnp numbers by changing the topology?
threads vs cores vs sockets

> 
> When we bring up kata container with 8 cpus it brings up a VM with
> (8+1) sockets - 

read https://github.com/kata-containers/documentation/blob/master/const
raints/cpu.md

please don't hesitate to ask me if you don't understand above document.

> 
> kubectl exec -it ubuntu-kata -- lscpu
> Architecture:          x86_64
> CPU op-mode(s):        32-bit, 64-bit
> Byte Order:            Little Endian
> CPU(s):                1
> On-line CPU(s) list:   0
> Thread(s) per core:    1
> Core(s) per socket:    1
> Socket(s):             1
> 
> kubectl exec -it ubuntu-kata-8cpu-limit -- lscpu
> Architecture:          x86_64
> CPU op-mode(s):        32-bit, 64-bit
> Byte Order:            Little Endian
> CPU(s):                9
> On-line CPU(s) list:   0-8
> Thread(s) per core:    1
> Core(s) per socket:    1
> Socket(s):             9
> 
> Thanks,
> Sai


More information about the kata-dev mailing list