other: 0.092 boot: 0.091 device: 0.086 PID: 0.078 KVM: 0.078 network: 0.072 semantic: 0.068 vnc: 0.063 performance: 0.063 graphic: 0.063 files: 0.063 debug: 0.062 socket: 0.062 permissions: 0.057 network: 0.751 boot: 0.041 debug: 0.034 device: 0.029 files: 0.029 socket: 0.019 other: 0.018 semantic: 0.018 KVM: 0.014 PID: 0.013 vnc: 0.011 performance: 0.009 graphic: 0.007 permissions: 0.005 Qemu scrambles order of eth devices in vm HV = 12.04 LTS plus libvirt 1.0x VM = 12.04 LTS On the HV there are 12 eth interfaces which we make available to the VM. We have 4 10G virtual function interfaces, and 8 1G conventionally bridged interfaces. No matter what order we present the interfaces in the xml file, they come up in eth0-eth11 order on the VM as follows: ( the interfcaes do work, once you figure out which is which) eth0-eth7 not in order as compoared to the bridges on the HV (interfaces file) or compared to the xml file for the VM, or compared to the bus numbers. MAC addresses are random. eth8-eth11 show up in the VM in order of PCU bus numbers just as you'd expect, always after the bridged interfaces. Consulting the libvirt mailing list, the developer says they present the list in bus order to qemu, but qemu scrambles that order. That appears to me too, to be the case. There is really no such concept as "NIC order" at the hardware level in QEMU. NIC naming order is something that operating systems invent according to some policy they have. As far as libvirt & QEMU are concerned, you only have control over the PCI device slot numbering. The operating system may choose to number NICs based on their PCI device slot number, or something else entirely. Further after an OS has been booted once, they often record the original mapping of MAC <-> NIC names, so even if you change the PCI slot ordering on later boots, the naming won't change. Thank you Daniel. I understand what you say and agree. However when presented with a mapping and an order by libvirt, shouldn't the order be preserved by default? If the OS scrambles it, then fine, not your problem... Are we on the right track here, is there some way to control the order as presented by Qemu when the VM's OS boots? If its at all helpful to understand the issue, here is our current proposed workaround: =start 32 fresh VMs, each with 8 bridged connections and 4 82599 virtual connections= take one generic xml file qemu-img one default disk image examine the HV's lspci output to find out bus numbering for the 82599 virtuals add correct bus numbering in xml file virsh create the xml to get randomized MAC addresses ( better ways to do this...) save xml again shutdown VM > heres where the workaround occurs < mount VM write to /etc/udev/rules.d file to capture MAC vs PCI numbering in order of presentation for booting etc etc For the benefit of 1) others and 2) me when I forget how this works- I did find a solution in formatting the xml file. If you leave the vnets out completely, see file below, the generic xml file will cooperate with libvirt and qemu and order the VM's eth devices as they are ordered on the hypervisor. (note: the macvtap entries seen below may also not be needed, sound and usb not tested) ## sample xml file for libvirt 1.0.0 showing some bridges and some SRIOV ports too ## sample sample 524288 524288 1 hvm destroy restart restart /usr/bin/kvm