[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Hackathon minutes] PV block improvements
On 21/06/13 20:07, Matt Wilson wrote: > On Fri, Jun 21, 2013 at 07:10:59PM +0200, Roger Pau Monné wrote: >> Hello, >> >> While working on further block improvements I've found an issue with >> persistent grants in blkfront. >> >> Persistent grants basically allocate grants and then they are never >> released, so both blkfront and blkback keep using the same memory pages >> for all the transactions. >> >> This is not a problem in blkback, because we can dynamically choose how >> many grants we want to map. On the other hand, blkfront cannot remove >> the access to those grants at any point, because blkfront doesn't know >> if blkback has this grants mapped persistently or not. >> >> So if for example we start expanding the number of segments in indirect >> requests, to a value like 512 segments per requests, blkfront will >> probably try to persistently map 512*32+512 = 16896 grants per device, >> that's much more grants that the current default, which is 32*256 = 8192 >> (if using grant tables v2). This can cause serious problems to other >> interfaces inside the DomU, since blkfront basically starts hoarding all >> possible grants, leaving other interfaces completely locked. > > Yikes. > >> I've been thinking about different ways to solve this, but so far I >> haven't been able to found a nice solution: >> >> 1. Limit the number of persistent grants a blkfront instance can use, >> let's say that only the first X used grants will be persistently mapped >> by both blkfront and blkback, and if more grants are needed the previous >> map/unmap will be used. > > I'm not thrilled with this option. It would likely introduce some > significant performance variability, wouldn't it? Probably, and also it will be hard to distribute the number of available grant across the different interfaces in a performance sensible way, specially given the fact that once a grant is assigned to a interface it cannot be returned back to the pool of grants. So if we had two interfaces with very different usage (one very busy and another one almost idle), and equally distribute the grants amongst them, one will have a lot of unused grants while the other will suffer from starvation. > >> 2. Switch to grant copy in blkback, and get rid of persistent grants (I >> have not benchmarked this solution, but I'm quite sure it will involve a >> performance regression, specially when scaling to a high number of domains). > > Why do you think so? First because grant_copy is done by the hypervisor, while when using persistent grants the copy is done by the guest. Also, grant_copy takes the grant lock, so when scaling to a large number of domains there's going to be contention around this lock. Persistent grants don't need any shared lock, and thus scale better. > >> 3. Increase the size of the grant_table or the size of a single grant >> (from 4k to 2M) (this is from Stefano Stabellini). > > Seems like a bit of a bigger hammer approach. > >> 4. Introduce a new request type that we can use to request blkback to >> unmap certain grefs so we can free them in blkfront. > > Sounds complex. > >> So far none of them looks like a suitable solution. > > I agree. Of these, I think #2 is worth a little more attention. > > --msw > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |