WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Xen dom0 network I/O scalability

To: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Subject: Re: [Xen-devel] Xen dom0 network I/O scalability
From: Kaushik Kumar Ram <kaushik@xxxxxxxx>
Date: Mon, 9 May 2011 21:13:09 -0500
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Mon, 09 May 2011 19:14:38 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20110427175025.GD31181@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <2D693F50-E757-4DAA-8B67-041CB01AC250@xxxxxxxx> <20110427175025.GD31181@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Apr 27, 2011, at 12:50 PM, Konrad Rzeszutek Wilk wrote:
>> So the current implementation of netback does not scale beyond a single CPU 
>> core, thanks to the use of tasklets, making it a bottleneck (please correct 
>> me if I am wrong). I remember coming across some patches which attempts to 
>> use softirqs instead of tasklets to solve this issue. But the latest version 
>> of linux-2.6-xen.hg repo does not include them. Are they included in some 
>> other version of dom0 Linux? Or will they be included in future? 
> 
> You should be using the 2.6.39 kernel or the 2.6.32 to take advantage of 
> those patches.

Thanks Konrad. I got hold of a pvops dom0 kernel from Jeremy's git repo 
(xen/stable-2.6.32.x). As you pointed out it did include those patches. I spent 
some time studying the new netback design and ran some experiments. I have a 
few questions regarding them. 

I am using the latest version of the hypervisor from the xen-unstable.hg repo. 
I ran the experiments on a dual socket AMD quad-core opteron machine (with 8 
CPU cores). My experiments simply involved running 'netperf' between 1 or 2 
pairs of VMs on the same machine. I allocated 4 vcpus for dom0 and one each for 
the VMs. None of the vcpus were pinned.

- So the new design allows you to choose between tasklets and kthreads within 
netback, with tasklets being the default option. Is there any specific reason 
for this?

- The inter-VM performance (throughput) is worse using both tasklets and 
kthreads as compared to the old version of netback (as in linux-2.6-xen.hg 
repo). I observed about 50% drop in throughput in my experiments. Has anyone 
else observed this? Is the new version yet to be optimized?

- Two tasklets (rx and tx) are created per vcpu within netback. But in my 
experiments I noticed that only one vcpu was being used during the experiments 
(even with 4 VMs).  I also observed that all the event channel notifications 
within netback are always sent to vcpu 0. So my conjecture is that since the 
tasklets are always scheduled by vcpu 0, all of them are run only on vcpu 0. Is 
this a BUG?

- Unlike with tasklets, I observed the CPU utilization go up when I used 
kthreads and increased the number of VMs. But the performance never scaled up. 
On profiling the code (using xenoprof) I observed significant synchronization 
overhead due to lock contention. The main culprit seems to be the per-domain 
lock acquired inside the hypervisor (specifically within do_grant_table_op). 
Further, packets are copied (inside gnttab_copy) while this lock is held. Seems 
like a bad idea?

- A smaller source of overhead is when the '_lock' is acquired within netback 
in netif_idx_release(). Shouldn't this lock be per struct xen-netbk instead of 
being global (declared as static within the function)? Is this a BUG?

If some (or all) of these points have already been discussed before, I 
apologize in advance! 

I appreciate any feedback or pointers.

Thanks.

--Kaushik 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>