Performance is a matter of opinion and a question of what task are you looking at trying to perform? Until you can describe the "type" of performance you need... all answers will be just a random shot in the dark. And of course... many of the answers will also depend on your hypervisor. (libvirt is just an abstraction library for many different hypervisors)
If you're looking for high CPU performance... you're really at the mercy of your hypervisor and physical hardware. They hypervisor will have a bit of overhead which you can't escape. You also need to make sure your hypervisor of choice will be able to support the native CPU instructions to help reduce that overhead.
Disk IO is an ever present battle. Very little beats having access to physical disks. Creating your virtual guest with a virtual disk frequently means you've doubled your overhead. You are at the mercy of your guest OS having to manage a file-system contained within your host OS's file-system which has it's own overhead. For this reason, many environments switch to using network-file-systems (things like NFS) which offloads the IO to the network stack and a separate server.... or use iSCSI or Fiber-Channel based solutions. Simply putting a virtual hard drive in a different directory on the same hard drive will NOT give you any noticeable performance increases.
Network performance is usually not a problem as most good-hypervisors are capable of providing a special virtual interface that has minimal overhead... or emulating a standard network adapter. Emulation requires more resources... but is better supported by most guest OSes.
Memory performance... is much like CPU performance. Depending on the hypervisor, there are extensions that can provide direct access to the physical RAM... but your hardware must support these features. A lot of performance-tuning for memory is pretty standard across the board. Avoid Swap as much as possible... as you'll have compounded problems with Disk IO. When you end up with swap-space... your memory is written to disk which in-turn has the additional overhead from the virtual disk problems I mentioned earlier.
Bus IO performance... is going to be the one point that you really can't do much about. Virtual systems sound great when you think you can take 4 systems and throw them on 1 physical piece of hardware with 4x the resources... but the reality is, they all must share the same system bus. If you require a great deal of access between various peripherals on the physical hardware... (memory/cpu/network adapters/disk controller/usb ports/etc...) all your virtual instances will suffer. Most server-grade hardware is purpose built to provide maximum bus throughput... unlike desktop-machines.
... this by-far an incomplete list... and omits several key aspects... but should provide you with a bit of insight to the complexity of high-quality virtualization.