Hello,
while spending some days out of office, I kept thinking about your performance issue. Could it possibly be related to the spinlock that we use to protect the lock metadata? See [1] and [2] for the lock implementation.
I remember when Alex first introduced the use of multiple priorities within a single component (which was actually VirtualBox), we stumbled over the issue that a high-priority thread would eventually keep spinning on a contended spinlock. The spinlock holder, however, was never scheduled anymore because it had a lower priority than the lock applicant. Alex addressed this issue with a NOVA-specific spinlock that maintains priority inheritance. See [3].
[1] https://github.com/genodelabs/genode/blob/master/repos/base/include/base/can... [2] https://github.com/genodelabs/genode/blob/master/repos/base/src/base/lock/lo... [3] https://github.com/genodelabs/genode/blob/master/repos/base-nova/src/base/lo...
It would be interesting to see the spinlock-holding times of the lock's spinlock (by taking rdtsc values when acquiring and releasing the spinlock) in your version of VirtualBox on base-hw/Muen. One would expect the hold times to be just the few cycles. If they are orders of magnitudes higher, we'd need to consider a priority-inheriting spinlock for base-hw.
Cheers Norman