On 2017年02月28日 02:35, Michael S. Tsirkin wrote:
On Wed, Feb 15, 2017 at 01:37:17PM +0800, Jason Wang wrote:
On 2016年12月14日 17:53, Jason Wang wrote:
When device IOTLB is enabled, all address translations were stored in
interval tree. O(lgN) searching time could be slow for virtqueue
metadata (avail, used and descriptors) since they were accessed much
often than other addresses. So this patch introduces an O(1) array
which points to the interval tree nodes that store the translations of
vq metadata. Those array were update during vq IOTLB prefetching and
were reset during each invalidation and tlb update. Each time we want
to access vq metadata, this small array were queried before interval
tree. This would be sufficient for static mappings but not dynamic
mappings, we could do optimizations on top.
Test were done with l2fwd in guest (2M hugepage):
noiommu | before | after
tx 1.32Mpps | 1.06Mpps(82%) | 1.30Mpps(98%)
rx 2.33Mpps | 1.46Mpps(63%) | 2.29Mpps(98%)
We can almost reach the same performance as noiommu mode.
Signed-off-by: Jason Wang<jasowang@xxxxxxxxxx>
---
Changes from V1:
- silent 32bit build warning
ping
Could you rebase pls?
I pushed my tree into linux next.
Ok, will do.
Thanks