I am launching an x86 debian system as guest using QEMU2.6.0 on my x86 host machine. The host is an 8-core, 2-socket machine booted with RHEL7 with KVM enabled. 2 PCI devices are being emulated on the guest. -I need to verify the concurrent operation of these PCI devices. PCI device A is designed in such a way that accesing a particular BAR offset X induces sleep() in this device for fixed duration. During this sleep duration, the test application tries to access BAR for PCI device B & write data to it.
- Global locking is cleared while creating memory regions for both PCI devices.
- Task affinity is set for processes launched to kick test applications which are trying to access BARs for PCI A & B.
- When QEMU is booted with -smp 4 option, 4 vcpus are created. By Setting task affinity , I force the scheduler to schedule access operation for both devices to separate vcpus.
- In that case, even if PCI device A goes to sleep on say vcpu0, PCI device B BAR access should be scheduled on another vcpu number chosen using taskset .
- This behavior is not being observed. When device A enter sleep, R/W operations on device B are halted & they resume only when device A comes out of sleep.
Can anyone share your view on why such behavior is observed ?
I am currenty in dark regarding debugging this problem & need a pointer as to how should I start debugging this issue.