I have a server that is a quad-core i-7 with hyperthreading enabled. The kernel recognises this as 8 cpus, as it should. I want to create a couple virtual hosts running on this machine. virt-manager lets me select which cpus are used on which machine. I want to configure this so that I assign both cpus in a hyperthreaded pair to the same virtual machine. This way one machine under heavy load will not effect another virtual machine by sharing a single core due to the hyperthreading. But I do want hyperthreading available to each vm because I am running tasks that involve heavy parallelization.
So, how can I tell which cpus the kernel recognizes are a pair? I would suspect cpu 0 and cpu 1 make a pair, then cpu 2 and cpu 3, and so on, but I am not sure how to test/confirm.
This link describes how to match physical id, core id, and sibling count to identify which entries in /proc/cpuinfo are on the same core, but I can make no claims as to its accuracy. It also looks similar to this question.
will print comma-separated list of sibling cores for a particular physical CPU/core. I used cpu0 (first core) as example.
The same information can be extracted from "core id" fields in /proc/cpuinfo (thanks user61849).