[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCHv13 0/2] gnttab: Improve scaleability
Performance results for aggregate intrahost network throughput (between 20 VM pairs, with 16 dom0 VCPUs) show substantial improvements. Throughput/Gbit/s Base 9.7 Split locks 25.8 Split locks 42.9 + per-VCPU maptrack lists v13: * When adding new frames, update v->maptrack_head last. * Each VCPU no longer gets a reserved number of frames -- they're allocated first-come, first-served. * Use original gt->maptrack_limit (instead of gt->maptrack_pages). * Steal an extra entry for the sentinel if a VCPU's free list is unitialized. v12: * Check for same refs in __gnttab_swap_grant_ref() to avoid deadlock. * Assert local grant table lock is held in mapcount(). * Document that maptrack_lock is only for the free list. * Document locking needed for maptrack entries (the active entry lock). * Try and steal maptrack entries if a VCPU runs out (RFC). v11: * Fix exists test in gnttab_map_exists(). * Call gnttab_need_iommu_mapping() once for each lock/unlock. * Take active entry lock in gnttab_transfer(). * Use read_atomic() when checking maptrack flags for validity (note: all other reads of map->flags are either after it is validated as stable or protected by the active entry lock and thus don't need read_atomic()). * Add comment to double_gt_lock(). * Allocate maptrack array with vzalloc() since it may be >1 page. v10: * Reduce scope of act in grant_map_exists(). * Make unlock sequence in error paths consistent in __acquire_grant_for_copy(). * gnt_unlock_out -> to gt_unlock_out in __acquire_grant_for_copy(). * In gnttab_map_grant_ref(), keep double lock around maptrack update if gnttab_need_iommu_mapping(). Use a wmb(), otherwise. * Divide max_maptrack_frames evenly amongst the VCPUs. * Increase default max_maptrack_frames to compensate. v9: * Refactor the locking patches into three commits: 1. Add per-active entry locking. 2. Add maptrack_lock. 3. Make the grant table lock a read-write lock. * Keep the double lock around IOMMU updates, but adjust their scope to only the IOMMU updates. v8: * Misc locking fixes. * Use read/write_atomic() in per-VCPU maptrack free list. * Improve locking docs. v7: * Re-add grant table rwlock (locking was broken without it and the gains are minimal anyway). * Remove unneeded locks from grant_table_destroy(). * Fix get_maptrack_handle() locking. v6: * Remove most uses of the grant table lock. * Make the grant table lock a spin lock again (there were only writers left after the above) * Add per-VCPU maptrack free lists. v5: * Addressed locking issue pointed out by Jan Beulich * Fixed git rebase merge issue introduced in v4 (acquiring locking twice) * Change for ()-loop in grant_map_exists * Coding style fixes v4: * Coding style nits from Jan Beulich * Fixup read locks pointed out by Jan Beulich * renamed double_gt_(un)lock to double_maptrack_(un)lock per request from Jan Beulich * Addressed ASSERT()'s from Jan Beulich * Addressed locking issues in unmap_common pointed out by Jan Beulich v3: * Addressed gnttab_swap_grant_ref() comment from Andrew Cooper v2: * Add arm part per request from Julien Grall David _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |