On Tue, Nov 19, 2024 at 09:30:09PM +0100, Paolo Bonzini wrote: > > > > Do we have known places that we care a lot on object[_class]_dynamic_cast() > > performance? > > The easiest way to check is probably to print the type of every successful > object_dynamic_cast and object_class_dynamic_cast. I suspect the result > will be virtio-blk-device and/or scsi-hd, but maybe those already do an > unsafe cast (pointer type cast) instead of object_dynamic_cast.
Yes, it sounds more reasonable to me to optimize specific call sites so far rather than provides something generic.. Though it could still be a generic API so that devices can opt-in. Maybe still not as fast as an unsafe cast, though.. I think I'll leave that to block experts when it may needs some good measurements. > > I can give it some measurement if there is, otherwise I'm > > guessing whatever changes could fall into the noise. > > > Yes, probably. At most you can identify if there any heavy places out of > the 34000 calls, and see if they can use an unsafe cast. I can still trivially do this. I traced qemu using bpf and interestingly in my case close to half (over 10000+) of the calls are about ahci_irq_lower() from different higher level stack (yeah I used IDE in my setup.. with a split irqchi..), where it has: PCIDevice *pci_dev = (PCIDevice *) object_dynamic_cast(OBJECT(dev_state), TYPE_PCI_DEVICE); So IIUC that can be open to a unsafe cast too, but considering IDE is ODD FIXES stage, I'm not sure if I should send a patch at all. However I copied John regardless. Thanks, -- Peter Xu