This guide can be used for different applications but it's important to understand my use case scenario. I have about 10 or so "other" VM's on my system that don't need much resources and 1 main Windows 10 VM w/ GPU Passthrough that needs as much horsepower as I can give it for gaming/workstation uses.

I recently upgraded to the Coffee Lake i7 which has 6 cores + HT for 12 possible Threads. If you only have Quad Core, i'd think twice about CPU Pinning, especially if you run other VM's along side your main guest.

CPU Pinning:
My Plan:
I want to give my WindowsVM 4 cores and the rest to be shared between KVM host + Other VM's.

Core 1 & 2 = KVM Host + "Other" VM's 
Core 3-6 = Windows 10 Guest 

Note:  I read it's best to give KVM host Core 0.

Isolate Cores that will be directly Pinned to VCpu's: IE: Block host from being able to use them via Grub

You want to use isolcpu's to block CPU's from being used by the HOST so that they can be assigned to VM Guests. 

Find Core Pairs:

cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort | uniq 
0,6 
1,7 
2,8 
3,9 
4,10 
5,11

Add to grub, update grub and reboot:

isolcpus=2,8,3,9,4,10,5,11 

Notes:

#Of VCpu's = # of THREADS
#Set vcpu 0 & 1 to the same physical core and so forth 
#Set CPU's to have 2 Threads per Core

<vcpu placement='static'>8</vcpu> 
<cputune> 
<vcpupin vcpu='0' cpuset='2'/> 
<vcpupin vcpu='1' cpuset='8'/> 
<vcpupin vcpu='2' cpuset='3'/> 
<vcpupin vcpu='3' cpuset='9'/> 
<vcpupin vcpu='4' cpuset='4'/> 
<vcpupin vcpu='5' cpuset='10'/> 
<vcpupin vcpu='6' cpuset='5'/> 
<vcpupin vcpu='7' cpuset='11'/> 
<emulatorpin cpuset='0,6'/> 
</cputune> 
<os> 
<cpu mode='host-passthrough' check='none'> 
<topology sockets='1' cores='4' threads='2'/> 
</cpu> 


(4 cores * 2 Threads/Core = 8 VCpu's)

Let's make sure it's working!

https://unix.stackexchange.com/questions/336017/how-to-detect-if-isolcpus-is-activated

cat /sys/devices/system/cpu/isolated
2-5,8-11
cat /sys/devices/system/cpu/possible 
0-11 
virsh vcpupin Windows10
VCPU: CPU Affinity
----------------------------------
0: 2
1: 8
2: 3
3: 9
4: 4
5: 10
6: 5
7: 11
virsh vcpuinfo NGinX
[root@kvmatrix ~]# virsh vcpupin NGinX
VCPU: CPU Affinity
----------------------------------
0: 0-11
[root@kvmatrix ~]# virsh vcpuinfo NGinX
VCPU: 0
CPU: 1
State: running
CPU time: 9.2s
CPU Affinity: yyyyyyyyyyyy
[root@kvmatrix ~]# virsh vcpuinfo Confluence
VCPU: 0
CPU: 1
State: running
CPU time: 59.1s
CPU Affinity: yyyyyyyyyyyy
VCPU: 1
CPU: 0
State: running
CPU time: 58.6s
CPU Affinity: yyyyyyyyyyyy

Sources:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/ch33s08

https://serverfault.com/questions/871053/cpu-pinning-strategy-for-kvm-centos7
https://lime-technology.com/forums/topic/47345-performance-improvements-in-vms-by-adjusting-cpu-pinning-and-assignment/

https://www.reddit.com/r/VFIO/comments/7zcn5g/kvm_windows_10_guest_cpu_pinning_recommended/