On Thu, Sep 07, 2017 at 10:51:42AM +0100, Dr. David Alan Gilbert wrote: > * Alexey Kardashevskiy ([email protected]) wrote: > > This was inspired by https://bugzilla.redhat.com/show_bug.cgi?id=1481593 > > > > What happens ithere is that every virtio block device creates 2 address > > spaces - for modern config space (called "virtio-pci-cfg-as") and > > for busmaster (common pci thing, called after the device name, > > in my case "virtio-blk-pci"). > > > > Each address_space_init() updates topology for every address space. > > Every topology update (address_space_update_topology()) creates a new > > dispatch tree - AddressSpaceDispatch with nodes (1KB) and > > sections (48KB) and destroys the old one. > > > > However the dispatch destructor is postponed via RCU which does not > > get a chance to execute until the machine is initialized but before > > we get there, memory is not returned to the pool, and this is a lot > > of memory which grows n^2. > > > > These patches are trying to address the memory use and boot time > > issues but tbh only the first one provides visible outcome. > > Do you have a feel for how much memory is saved?
I think that's a bit hard to answer.
As noted above there's O(n^2) (or more) space complexity here - one
which shouldn't be required by the data we actually have to track.
That means the amount of "excess" memory depends on how many devices
there are.
I haven't yet looked at these patches in detail, to know if it truly
fixes that O(n^2) or just pares the constant. If it does fix the
O(n^2) then the amount is going to vary from "probably not enough to
worry about" in normal use cases to hundreds of gigabytes in cases
with many devices.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
